簡體   English   中英

在運行簡單的單線程C ++程序時,是否可以消除Linux機器的抖動?

[英]Is it possible to eliminate jitter from a Linux machine when running a simple single-threaded C++ program?

我正在使用運行內核3.5.7的Ubuntu盒進行各種實驗。 我將我的基准代碼預熱到1000萬次迭代,然后進行9000次迭代。 我仍然看到以下抖動:

Average: 242 nanos | Min Time: 230 nanos | Max Time: 4717 nanos  
0.75 = avg: 240, max: 246  
0.9 = avg: 241, max: 247  
0.99 = avg: 242, max: 250  
0.999 = avg: 242, max: 251  
0.9999 = avg: 242, max: 517  
0.99999 = avg: 242, max: **2109** <===  
0.999999 = avg: 242, max: **3724** <===  
0.9999999 = avg: 242, max: **4424** <===

我看到0.01%的迭代時間都很糟糕。 是否有可能真正實現Linux內核? 內核中是否還有其他東西無法控制?

for(int i = 0; i < iterations; i++) {

    long start = get_nano_ts(&ts);

    for(int j = 0; j < load; j++) {
        long p = (i % 8) * (i % 16);
        if (i % 2 == 0) {
            x += p;
        } else {
            x -= p;
        }
    }

    long end = get_nano_ts(&ts);

    int res = end - start;

    // store the results, calculate the percentiles, averages, min, max, etc.
}

最簡潔的答案是不。 您必須拋棄內核提供的所有其他內容,以保證您的代碼獲得100%的占空比。

如果您希望在CPU上保證壟斷,則需要使用實時操作系統來禁用所有中斷。 像FreeRTOS或VXWorks這樣的東西。

無空閑內核專為空閑時的省電而設計。 它不是為完全禁用中斷而設計的。 所有IO設備都不斷要求中斷。 如果您禁用了所有IO驅動程序並且運行無空循環並禁用了可能會定期喚醒的所有服務,那么您可能會接近無抖動操作。 但是你會有一塊磚頭。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM