当 运行 一个简单的单线程 C++ 程序时,是否可以消除 Linux 机器的抖动?
Is it possible to eliminate jitter from a Linux machine when running a simple single-threaded C++ program?
我正在使用 Ubuntu box 运行 内核 3.5.7 进行各种实验。我 warmup 我的基准代码进行 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.
}
简短的回答是否定的。您将不得不放弃内核提供给 gua运行 的所有其他内容,以使您的代码获得 100% 的占空比。
如果您想要运行teed 垄断CPU,您需要使用允许您禁用所有中断的实时操作系统。类似于 FreeRTOS 或 VXWorks。
tickless 内核专为空闲时的节能而设计。它并非旨在完全禁用中断。所有 IO 设备都不断地要求中断。如果您禁用所有 IO 驱动程序和 运行 tickless 并禁用所有可能定期唤醒的服务,那么您可能会接近无抖动操作。但那样你就会得到一块砖头。
我正在使用 Ubuntu box 运行 内核 3.5.7 进行各种实验。我 warmup 我的基准代码进行 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.
}
简短的回答是否定的。您将不得不放弃内核提供给 gua运行 的所有其他内容,以使您的代码获得 100% 的占空比。
如果您想要运行teed 垄断CPU,您需要使用允许您禁用所有中断的实时操作系统。类似于 FreeRTOS 或 VXWorks。
tickless 内核专为空闲时的节能而设计。它并非旨在完全禁用中断。所有 IO 设备都不断地要求中断。如果您禁用所有 IO 驱动程序和 运行 tickless 并禁用所有可能定期唤醒的服务,那么您可能会接近无抖动操作。但那样你就会得到一块砖头。