看板 LinuxDev 關於我們 聯絡資訊
我有一段c code大概是這樣的架構: while (1) { select(fd); // 等待的是串流資料,時間內沒有讀取的話會漏失一筆資料 if (fd is triggerd) { function1(); function2(); function3(); } } 這時運作大致都是正常的,不會漏掉資料,loop一次大約3000us。 但是當我在function之間加了幾個printf之後,就開始偶發性的漏失串流資料。 漏失資料的該次loop時間會暴增到300000us左右,但是其他次loop時間則很穩定。 而這暴增出來的時間會隨機發生於三個function其中之一。 時間是用gettimeofday()來測量的。 從top觀察到的結果來看,cpu和memory使用率都很低。 我有猜過是不是io buffer導致的,並試著加上fflush()和fsync(),但是沒有效果。 也有想過那些時間是不是剛好沒有被執行到還是怎樣,不過還沒想到怎麼驗證。 謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.169.198.128 ※ 文章網址: https://www.ptt.cc/bbs/LinuxDev/M.1445446151.A.CD0.html
leolarrel: 提供的資訊太少無法幫你隔空抓藥,不過我能確定的是在 10/22 14:23
leolarrel: linux的世界,串流的資料維護是串流裝置跟串流驅動程式 10/22 14:24
leolarrel: 該負責的事情,你解bug的重點不應是考慮執行時間 10/22 14:25
hl4: 串流的驅動程式細節都被包裝起來了 10/22 17:59
leolarrel: 那就請負責驅動程式的廠商解bug,如果廠商不願意解,就叫 10/22 18:58
leolarrel: 你主管去施壓,這已經是政治性問題不是技術問題了,因為 10/22 18:59
leolarrel: 基本上你程式的邏輯大體上沒有問題... 10/22 18:59