我使用的CentOS Linux的發佈英特爾1611年3月7日(R)至強(R)CPU E5-2667 V4 @ 3.20GHzclock_gettime可能會很慢,甚至使用VDSO
在我的用戶空間應用程序的測試,我已經注意到clock_gettime(CLOCK_MONOTONIC,&ts)可能需要5-6微秒而不是〜23納秒的平均值。每10000次隨後的呼叫可能只發生一次,但可能會發生。
如果沒有VDSO庫,可以解釋。但是,VDSO用於每個clock_gettime(我通過strace檢查)。
不管相應的線程是否貼在某個CPU核心上,或者沒有。無論如何,如果這個CPU內核與操作系統隔離,或者不是。這意味着測試應用程序可能運行在獨佔的CPU核心上,而滯後可能會出現!
我通過比較兩個相繼clock_gettime調用的結果測量延遲,如:
unsigned long long __gettimeLatencyNs() {
struct timespec t1_ts;
struct timespec t2_ts;
clock_gettime(CLOCK_MONOTONIC, &t1_ts);
clock_gettime(CLOCK_MONOTONIC, &t2_ts);
return ((t2_ts.tv_sec - t1_ts.tv_sec)*NANO_SECONDS_IN_SEC + t2_ts.tv_nsec - t1_ts.tv_nsec);
}
任何人都可以分享一些想法,這可能是錯在那裏?
看起來,我們可能會遇到等待「內核正在更新內容」的情況,不僅在這樣的綜合測試中。如果內核僅僅需要幾微秒來更新內存,那就相當奇怪了...... –