[問題] 關於kernel的jiffies值

看板LinuxDev作者 (wewe)時間10年前 (2014/08/04 19:06), 編輯推噓1(107)
留言8則, 3人參與, 最新討論串1/1
關於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://www.ptt.cc/bbs/LinuxDev/M.1407150417.A.566.html

08/04 19:38, , 1F
kernel的jiffies是一個有趣的東西
08/04 19:38, 1F

08/04 19:39, , 2F
簡單來說就是kernel在link state的時候會把jiffies變
08/04 19:39, 2F

08/04 19:39, , 3F
64bits 要好幾百萬年才會overflow
08/04 19:39, 3F

08/04 19:42, , 4F
Robert Love的Linux Kernel Development第11章有更詳細
08/04 19:42, 4F

08/04 19:42, , 5F
的說明
08/04 19:42, 5F

08/05 01:59, , 6F
印象中開機300秒就overflow了
08/05 01:59, 6F

08/05 09:09, , 7F
的確開機五分鐘會overflow,不過有timer_after和timer_bef
08/05 09:09, 7F

08/05 09:09, , 8F
ore這種macro可以讓系統正確判斷。
08/05 09:09, 8F
文章代碼(AID): #1JtsbHLc (LinuxDev)
文章代碼(AID): #1JtsbHLc (LinuxDev)