如何通过实验确定进程/线程的调度量?

时间:2017-11-07 16:42:16

标签: c++ linux scheduling experimental-design

考虑到提示from here,我试图通过实验确定Linux 4.4.0-98通用操作系统上的(平均)时间片。以下是我使用C ++ 14 STL的代码。

#include <chrono>
#include <iostream>
#include <unistd.h>

int main(int argc, char** argv) {
  std::chrono::time_point<std::chrono::high_resolution_clock> clock_t1 = std::chrono::high_resolution_clock::now();
  std::chrono::time_point<std::chrono::high_resolution_clock> clock_t2 = std::chrono::high_resolution_clock::now();
  std::chrono::duration<long long, std::nano> diff = clock_t2 - clock_t1;

  std::chrono::duration<long long, std::nano> diff_precision = std::chrono::nanoseconds(1LL);

  for(int i=0; i<5; i++) {
    if(0 == fork()) {
      break;
    }
  }

  int num_tries = 0;
  while(num_tries < 10) {
   while((diff = clock_t2 - clock_t1) <= diff_precision) {
     clock_t1 = clock_t2;
     clock_t2 = std::chrono::high_resolution_clock::now();
   }
   std::cout << diff.count() << std::endl;
   clock_t1 = std::chrono::high_resolution_clock::now();
   clock_t2 = std::chrono::high_resolution_clock::now();
   num_tries++;
  }

  return 0;
}

问题是我总是为所有进程获得相同的数字。例如输出:

480
480
480
480
480
480

此外,时间片约半微秒似乎很奇怪。所以我尝试了从{1}到1毫秒的diff_precision不同的值。对于不同的精度,它给出了该范围内的输出;例如:对于1ms的精度,它会输出一堆5531380。确实很奇怪。

这是否是找出操作系统时间片的可靠方法?或者我应该相信source code

中的值 P.S:“有一个问题已经存在;请更具体一点。“哦,C&#39; mon SO。

0 个答案:

没有答案