Chinaunix首页 | 论坛 | 博客
  • 博客访问: 191858
  • 博文数量: 38
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 424
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-19 12:41
文章分类

全部博文(38)

文章存档

2017年(2)

2016年(1)

2010年(8)

2009年(27)

我的朋友

分类: LINUX

2009-12-07 09:19:43

为了测试linux下面usleep, nanosleep, select哪个函数delay时间更准确,因此我要在定时器频率200Hz和1000Hz下面分别测试。这样我就需要将默认的频率修改到1000Hz。
 
法一:如果可以透过make menuconfig来配置的话, 那么这个选项在“Processor type and features  --->Timer frequency” 选择1000Hz。
 
法二:但是如果你的内核编译是通过脚本文件来实现的化, 那最好去修改'kernel\arch\arm'下的Kconfig文件,在文件中找到类似如下的部分:
config HZ
 int
 default 128 if ARCH_L7200
 default 200 if ARCH_EBSA110 || ARCH_S3C2410
 default OMAP_32K_TIMER_HZ if ARCH_OMAP && OMAP_32K_TIMER
 default 100
注意将default 100修改为1000, 并make调前3行。
config HZ
 int
 #default 128 if ARCH_L7200
 #default 200 if ARCH_EBSA110 || ARCH_S3C2410
 #default OMAP_32K_TIMER_HZ if ARCH_OMAP && OMAP_32K_TIMER
 default 1000
 
验证是否修改成功:
 在‘kernel\sched’中的一个叫‘asmlinkage void __sched schedule(void)’的api中没10000次打印一下内核调度,理论上100Hz,比1000Hz慢10倍,很容易感觉出来。
 
附上定时器性能测试结果:
实验1   条件:设置定时器10000Ms,分别用3种方式sleep 1000Ms 抽样20次, 读取定时器剩余时间。(越接近9000越准确)
usleep
200Hz
select
200Hz
nanosleep
200Hz
usleep
1000Hz
select
1000Hz
nanosleep
1000Hz
8998 9001 8997 8999 9000 9000
8997 9001 8997 8998 9000 8999
8996 9000 8996 9000 9000 8999
8996 9000 8996 9000 8999 9000
8996 9000 8996 9000 8999 9000
8996 9001 8996 9000 9000 8999
8996 9000 8996 9000 9000 8999
8996 9000 8996 9000 9000 9000
8996 9001 8996 8998 9000 8999
8996 9000 8996 9000 9000 9000
8996 9000 8996 8999 9000 8999
8997 9000 8997 9000 9000 9000
8996 9000 8996 9000 9000 9000
8996 9000 8996 9000 9000 9000
8996 9001 8996 8999 9000 9000
8996 9000 8996 8999 9000 9000
8996 9000 8996 9000 9000 8999
8996 9001 8996 9000 9000 8998
8996 9000 8996 9000 9000 9000
8996 9000 8996 9000 9000 8999
 
实验2  条件条件:设置定时器20Ms,分别用3种方式sleep 3Ms 抽样100次, 读取定时器剩余时间。(越接近17越准确)
usleep
200Hz
select
200Hz
nanosleep
200Hz
usleep
1000Hz
select
1000Hz
nanosleep
1000Hz
13 16 13 15 17 15
16 17 16 16 14 17
14 15 15 17 18 17
12 16 16 14 18 16
15 15 14 17 17 17
16 17 11 12 17 16
16 14 16 17 18 17
14 17 15 16 16 16
11 14 17 17 18 17
16 16 14 17 18 17
15 15 12 17 17 16
16 16 16 16 17 17
14 14 15 16 17 14
12 17 16 17 17 17
15 15 14 16 18 15
16 16 12 17 17 16
16 15 15 17 18 16
14 17 15 16 18 17
11 14 16 17 18 17
16 17 14 16 16 16
15 14 12 17 18 17
17 16 15 17 18 17
14 15 15 15 16 17
12 16 16 17 18 17
15 14 14 15 18 16
16 17 12 17 17 17
16 15 15 17 18 16
13 16 15 17 18 17
12 15 16 17 17 17
16 17 14 16 17 16
15 14 12 17 18 17
17 18 15 17 16 17
13 14 15 17 18 16
12 16 17 17 18 17
15 15 14 16 17 16
16 16 12 17 18 17
16 14 15 15 17 17
14 17 15 16 16 16
12 15 16 15 17 16
15 16 14 17 18 16
15 15 12 17 16 17
17 17 15 17 18 17
13 14 15 16 17 16
12 17 17 16 16 17
15 14 14 17 18 16
16 16 12 16 18 17
16 15 15 17 17 17
14 16 15 17 17 16
12 14 16 16 18 17
15 17 14 17 16 16
15 15 12 15 17 17
17 15 15 17 18 17
14 15 15 17 17 17
12 17 17 16 18 16
15 14 14 17 17 16
16 17 12 16 17 16
16 14 14 17 18 17
14 15 15 17 17 17
12 15 15 17 17 16
15 16 14 16 18 17
15 14 13 16 18 17
17 17 15 17 15 17
14 15 15 16 18 16
12 15 17 17 18 17
15 15 14 16 16 16
15 17 12 16 18 17
16 14 14 17 17 17
14 17 15 16 16 16
12 14 16 17 18 17
15 16 14 17 17 16
15 15 13 16 17 17
16 16 15 17 18 17
14 14 15 15 18 17
12 17 17 17 16 16
15 15 14 17 18 17
15 15 12 16 17 17
16 15 14 17 16 16
14 17 15 16 18 17
12 14 16 16 17 17
15 17 14 15 16 16
15 14 13 17 18 17
16 16 15 16 17 16
14 15 15 16 17 17
12 16 17 17 18 17
15 14 14 16 17 15
15 17 12 17 16 17
17 15 15 17 18 15
14 15 15 16 18 17
12 15 16 17 16 17
15 17 14 16 18 17
15 14 12 17 18 16
16 17 15 17 17 16
14 14 15 16 18 17
12 16 17 16 18 17
15 15 14 16 16 17
15 16 12 16 17 16
17 14 15 15 18 16
14 17 15 17 16 17
12 15 16 16 18 15
15 15 14 17 18 17
 
得出一些结论:
1.1KHz时候比200Hz定时精确.大致精确到1ms,由第一组数据看出
2.需要休眠粒度更细的情况下,用nanosleep的效果最好,且提供被中断后重启剩余定时的功能.
3.select有可能出现未到timeout就停止休眠的情况.
4.usleep的精度不如select和nanosleep.
阅读(2492) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~