Re: [問題] 想請教關於Linux抓取時間會亂跳的問題
※ 引述《asoedarren (天真歲月陽仲壽)》之銘言:
: ※ [本文轉錄自 Linux 看板]
: 作者: asoedarren (天真歲月陽仲壽) 看板: Linux
: 標題: [問題] 想請教關於Linux抓取時間會亂跳的問題
: 時間: Thu Jan 22 20:16:04 2009
: 我的server程式在centos上
: 不管使用time() 或是gettimeofday函式 只要過一段時間就會往後跳
: 例如 前幾次抓到依序是 100000 100001 100002 突然會跳到106801 (數字只是舉例)
: 造成程式誤判為timeout或是寫入log檔時間不定 請問有前輩遇過類似的問題嗎?
: 另外程式會不定期吃掉system loading 如圖 http://rapidpik.com/show/28829/nf5tc
: 但很神奇的是又不是吃到滿 如果是全藍還可以解釋是server程式loading過重,
: 那條線出現的時候,會出現集體斷線,以及client很難再連線的情形,
: 如果程式重啟會恢復,如果不管他過一陣子也會恢復,但不一定多久,可能幾小時,
: 現在懷疑跟上面那個問題有關係,不知道前輩有何看法。
: Server在國外,很難重灌,不知道有沒有解決的辦法。 感謝。
是在 x86 的 processor 上嗎?
我有遇到過, 不過是在某個 ARM 的 SoC 上
Linux kernel 裡的最小計時單位是 jiffies, 一般都是 100Hz (10ms)
若是需要更精確的單位 (ex:gettimeofday()拿到的ns), 則依頼硬體的 timer
他的做法是每次 timer interrupt 來的時候, jiffies + 1, 並且 reset h/w timer
若是有人呼叫 gettimeofday(), 則去看一下 h/w timer 跑到那裡, 跟現在的 jiffies
就能算出較精確的時間...
若是遇到時間回跳的情形, 多半都是 h/w timer 在 10ms 中間就算完, 並且自行 reset
解法有二種:
1. 治本: 確認一下 Kernel source 裡的 arch/xxx/mach-xxx/time.c 裡面算法是對的
2. 治標: gettimeofday() 後算時間差的時候, 遇到負值時暫時跳過, 等下一輪再處理
如果你回跳的程度超過一個 jiffies (10ms)
那請檢查一下是不是有 process 在 settimeofday(), 像是 ntp client 之類的
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.170.12.115
→
01/23 18:22, , 1F
01/23 18:22, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
LinuxDev 近期熱門文章
PTT數位生活區 即時熱門文章