繁体   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