小编Dee*_*ght的帖子

降低linux内核定时器频率

当我以Gentoo作为客户运行我的虚拟机时,我发现tick_periodic功能有相当大的开销.(这是在每个定时器中断上运行的函数.)此函数更新导致开销的全局jiffy使用write_seqlocks.

这是HZ我的内核配置文件中的grep 和相关内容.

sharan013@sitmac4:~$ cat /boot/config | egrep 'HZ|TIME'

# CONFIG_RCU_FAST_NO_HZ is not set
CONFIG_NO_HZ=y
# CONFIG_HZ_100 is not set
# CONFIG_HZ_250 is not set
# CONFIG_HZ_300 is not set
CONFIG_HZ_1000=y
CONFIG_HZ=1000
# CONFIG_MACHZ_WDT is not set
CONFIG_TIMERFD=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_X86_CYCLONE_TIMER=y
CONFIG_HPET_TIMER=y
Run Code Online (Sandbox Code Playgroud)

显然它已将配置设置为1000,但是当我这样做时sysconf(_SC_CLK_TCK),我得到100作为我的计时器频率.那么我系统的定时器频率是多少?

我想要做的是将频率降低到100,如果可能的话甚至更低.虽然它可能影响poll/ select和调度程序时间片的交互性和精度,但我准备牺牲这些东西以减少定时器中断,因为它会加速VM.

当我试图找出必须完成的工作时,我在某个地方读到你可以通过更改配置文件来实现这一点,否则在那里我读到将bootider = 10添加到boot参数就完成了工作,否则我在那里读到了如果您可以设置CONFIG_HIGH_RES_TIMERS即使不增加定时器频率的触发低延迟定时器也不需要,并且使用无定时系统也是如此CONFIG_NO_HZ.

我对于什么是正确的方法感到非常困惑.

我想要的是将定时器中断降低到尽可能低的程度.

我能知道这样做的正确方法吗?

linux timer linux-kernel

16
推荐指数
1
解决办法
2万
查看次数

dmesg和/var/log/kern.log之间的区别

我正在修改kvm模块,我在内核代码中添加了printk语句.在运行虚拟机之后,printk向我提供了有关客户操作系统的错误地址和其他信息.

我需要从这个信息生成统计信息.当我使用dmesg时,我只能看到内核空间中的错误地址,即它们的地址高于0XC0000000.(当VMEXIT发生时需要故障地址,即我们从guest虚拟机切换到主机模式)

当我在kern.log中看到相同的统计信息时,我也会从用户空间(低于0XC0000000)获得错误地址.所以在我看来dmesg的容量有限,而且给出的信息是kern.log的一个子集.
我的kern.log文件太大了可以从kern.log中删除旧数据,因为像grep,join,awk这样的文本处理命令在文件上运行的时间太长了.

我的问题是:
dmesg和kern.log 有什么区别?
如何将kern.log文件大小减少为cron作业?(擦除过去24小时内添加的所有数据)
有没有更好的方法从内核获取printf类型的功能?

logging linux-kernel printk

10
推荐指数
1
解决办法
1万
查看次数

写入/ sys/class/gpio/export失败

我正在开发一个项目,需要我配置gpio引脚并在原子板上添加传感器.内核配置了gpio ... CONFIG_GPIO_SYSFS=y是内核选项之一.

我正在使用Fedora版本2.6.29-10
但是我无法写入gpio文件夹中的导出文件

GPIO=22  // to add pin 22 to userspace  
echo $GPIO > /sys/class/gpio/export
Run Code Online (Sandbox Code Playgroud)

我收到了错误
bash: echo: write error: Invalid argument

我也试过同样与sudosh -c,但没有用,除非我可以公开这些引脚用户空间,我不能写任何code.What我做错了什么?
是否需要设置内核版本或其他一些内核选项的问题?

提前致谢

gpio

5
推荐指数
1
解决办法
4407
查看次数

将误差条添加到gnuplot中的直方图

我有这样的数据文件

#col 1     2     3     4     5     6     7
#bench                 #these are max and min values 
#mark     #bar1 #bar2  #for the prevoius 2 values 
NOSHARE.2 43032 139412 100 45000 130000 140000
FALSE_SHARE.2 7035 24101 5000 7500 24100 25000
SHAREDVAR.2 11316 10248 10000 12000 10000 12000
Run Code Online (Sandbox Code Playgroud)

我能够使用gnuplot生成一个图形,如下所示 在此输入图像描述

我需要将max和min值作为错误栏添加到每个栏

继承人我的gnuplot脚本

set output "truevsfalse.png"
set title " TRUE VS FALSE SHARING "
set boxwidth 0.9 absolute
set style fill   solid 1.00 border lt -1
set key inside right top vertical Right noreverse noenhanced …
Run Code Online (Sandbox Code Playgroud)

gnuplot histogram

5
推荐指数
1
解决办法
2630
查看次数

陷阱标志(TF)和监视器陷阱标志之间的区别?

像GDB这样的调试功能通过设置eflags寄存器的TF标志来工作,这会在处理器每次执行指令后导致异常,让gdb等工具控制调试.当我们运行虚拟机时,如果是kvm则执行同样你需要设置一个名为MONITOR TRAP FLAG的标志(当前英特尔软件手册3c第15页),这将导致虚拟macine在每条指令给出管理程序之后进行EXIT(VMEXIT).

管理程序几乎可以设置VM(guest)的任何位/寄存器.当架构(EFLAG)中已经存在这样的标志时,为什么我们在VMCS(虚拟Macine控制结构)中需要一个单独的标志?

我在某地读到,其原因是如果使用EFLAGS,访客可以将VMM的(管理程序)意图覆盖为单步.

答:如果你没有控制权,那么模仿硬件的重点是什么?

B:我正面临一个问题,我需要设置BTF(分支陷阱标志)(PG 689 vOLUME 3a INTEL sotfware手册).在正常情况下每个分支指令,但因为我想这对VM这项事业调试异常,我无法推测其位在VMCS设置.在单步执行的情况下似乎没有直接的方法.任何人都可以让我知道如果有某种方法使用其他方法做同样的事情?

谢谢

linux gdb kvm intel virtual-machine

5
推荐指数
1
解决办法
1952
查看次数

Android会缓存库吗?

我正在研究Android应用程序使用的设备驱动程序.每当我对驱动程序进行一些小修改并重新编译修改过的驱动程序时,似乎应用程序没有使用修改后的驱动程序,但仍然使用=以前的版本.我确信这是因为所做的修改包括打印声明,该声明在应用程序运行时不会显示.

但是,一旦我删除驱动程序并重建它或重新启动系统,它似乎工作正常.这样做的问题是它很耗时,因为我必须确保该应用程序正在使用最新的驱动程序.

所以我的问题是android是否缓存库?如果是这样,有任何简单的黑客可以阻止它这样做吗?

编辑:事实上我可以删除我的设备驱动程序和使用它的应用程序仍然运行而不报告有关缺少驱动程序的问题!!!!!!!!!!!!!!!!!

android device-driver

5
推荐指数
1
解决办法
372
查看次数

最重要的信号要处理?

最近我正在研究一个用c编写的软件,它有大约3-4万行代码.当我开始出现分段错误时,我添加了一个SIGSEGV处理程序.这帮助我指出错误,因为处理程序是给一个回溯.

我的问题是除了SIGSEGV之外,当我们拥有一个大型软件时,应该处理哪些重要信号,以便错误检测很容易.

这可以任选地用于防止攻击.Ex软件在进行关键更新/操作时接收中止信号.标准告诉SIGHUP,SIGINT,SIGKILL,SIGPIPE,SIGTERM和一些其他信号具有默认属性来终止传递此信号的进程.

因此,要为我的软件添加另一层保护,我将不得不改变这些信号的行为.通过保护我的意思是我不希望我的软件在crtical更新之间终止,我将决定何时中止.

编辑:我想知道如何设计好的软件,处理SIGNAL,像安全网一样使用它们,这有助于软件的构建.

c debugging signals signal-handling

4
推荐指数
1
解决办法
760
查看次数