推 LiloHuang: 一般來說會用 select() 來做,經驗上來說比較精確些 02/15 16:47
推 lf5471: timer 這種東西, 很難準的, 和跑的 OS & H/W 有關. 02/15 17:28
→ lf5471: 我曾跑過 FreeRTOS ...等一些嵌入式系統, 也沒法保證準確. 02/15 17:30
→ lf5471: 只能"盡量"去做. 基本想法是針對你要實驗的那段 code 02/15 17:31
→ lf5471: 提高它的 process or thread priority, 然後其他的, 02/15 17:31
→ lf5471: 一些 service..有的沒的, 能關就盡量關. 02/15 17:32
→ lf5471: 或是直接跑嵌入式, 上面只跑你那支程式 XDDD 02/15 17:32
→ lf5471: 另外一個做法就是在相同環境, 做大量實驗. 02/15 17:34
→ lf5471: 舉例: 你要 sleep 1ms, 但實際你是下 0.9ms, 其中 0.1ms 02/15 17:35
→ lf5471: 是之前實驗告訴你的系統 overhead 02/15 17:35
→ lf5471: XDDD 02/15 17:36
→ liataian: lf大所言甚是XD 這方法我有try過,不過準確度很難捉摸XD 02/15 19:47
→ liataian: Lilo大說的select function我也會去研究看看, 謝謝兩位! 02/15 19:48
→ dritchie: while loop然後拿rdtsc的結果出來比,檢查是否過了1ms 02/16 00:58
→ liataian: 沒發現d大的留言!!... 感謝! 02/19 16:33
推 EdisonX: rdtsc 是個爭議… 02/19 22:36
→ liataian: E大,想問一下rdtsc在多核心上是不是會有問題呢?? 02/20 15:51
→ Killercat: select(time_fd)已經是user space能用的最準確的了 02/20 17:39
→ Killercat: 其他的不是平台限定 就是有移植問題 02/20 17:39
→ Killercat: rdtsc算是平台實作不同的作法就是 02/20 17:40
→ Killercat: 另外基本上這個應該只有Intel/AMD有 其他都CPU都沒有 02/20 17:40
推 EdisonX: rdtsc 在多核上會有問題外 , 同時讓人意外的和電源管理有 02/20 20:21
→ EdisonX: 關.總結三個理由不用 rdtsc(這三個理由到各大論壇都可得) 02/20 20:23
→ EdisonX: 1. 不能保證每個 cores 的 TSC (Time Stamp Counter)同步 02/20 20:23
→ EdisonX: 2. 省電模式時(ex:NB) , CPU 時脈率會隨之變化,不是常數 02/20 20:24
→ EdisonX: 3. 亂序執行時取得的週期數不準 02/20 20:26
→ EdisonX: Linux 下取代的方案我不熟,這個我就不贅述了。 02/20 20:26
→ EdisonX: 講到 rdtsc 好像有些離題了... 02/20 20:33
→ liataian: 謝謝E大詳細解說,我也在四處看有沒有可用的函數, 不過 02/20 20:54
→ liataian: 這問題看來是受限於系統本身的限制, 暫時是無解了.. 我 02/20 20:55
→ liataian: 先改成用K大也提到select試試看有沒有辦法改善一點.. 02/20 20:57
→ liataian: ^的 02/20 20:57
→ Killercat: select在新版linux kernel有幫你包好 叫做timefd 02/21 00:03
→ Killercat: 直接用timefd可以省掉你非常多的麻煩 02/21 00:03
→ Killercat: 不過普遍來講 select算是跨平台可兼容就是 02/21 00:04