Re: [問題] 想請教關於Linux抓取時間會亂跳的問題

看板LinuxDev作者 (Spig)時間16年前 (2009/01/22 21:32), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《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
文章代碼(AID): #19U7LXql (LinuxDev)
文章代碼(AID): #19U7LXql (LinuxDev)