作者christ7622 (wewe)
看板LinuxDev
标题[问题] 关於kernel的jiffies值
时间Mon Aug 4 19:06:55 2014
关於kernel内的时间问题,
常常会看到jiffies这个时间变数,
翻kernel里面的code也很常看到unsigned long now = jiffies;的写法
但是把他印出来却发现这个值有时候会变超大,
例如在 linux-2.6.18\src\net\ipv4\route.c,内约莫3195行左右的
rt_secret_timer.expires = jiffies + net_random() % ip_rt_secret_interval +
ip_rt_secret_interval;
分解成以下写法:
unsigned long expires_test = 0;
unsigned long now = jiffies;
unsigned long random_test = net_random() % ip_rt_secret_interval;
expires_test = now + random_test + ip_rt_secret_interval;
rt_secret_timer.expires = expires_test;
并把 now, random_test, ip_rt_secret_interval, expires_test印出来看
会看到now=4294937384, random_test=6840, ip_rt_secret_interval=60000,
expires_test=36928。
很明显的爆了unsigned long的大小造成overflow了阿,这样kernel没问题吗?
还是有什麽patch有对这样的问题进行修改呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.135.73.14
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/LinuxDev/M.1407150417.A.566.html
1F:→ mshockwave:kernel的jiffies是一个有趣的东西 08/04 19:38
2F:→ mshockwave:简单来说就是kernel在link state的时候会把jiffies变 08/04 19:39
3F:→ mshockwave:64bits 要好几百万年才会overflow 08/04 19:39
4F:→ mshockwave:Robert Love的Linux Kernel Development第11章有更详细 08/04 19:42
5F:→ mshockwave:的说明 08/04 19:42
6F:→ i386:印象中开机300秒就overflow了 08/05 01:59
7F:推 jwliang:的确开机五分钟会overflow,不过有timer_after和timer_bef 08/05 09:09
8F:→ jwliang:ore这种macro可以让系统正确判断。 08/05 09:09