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

标签 multithreading scheduling experimental-design

只是为了避免任何关于“你为什么需要知道这个??”的评论:这只是一个我很好奇的谜题,不是出于任何实际原因我需要做的事情。

给定一个典型的 POSIX 系统[1],您将如何设计一个实验来确定 CPU 绑定(bind)进程的调度量[2]?

[1]:但不能让您通过系统调用或/proc 接口(interface)查询此信息

[2]:“调度时间片”定义为一个进程在其调度时间结束之前在 CPU 上运行而不会阻塞或让步的时间量,并且操作系统允许另一个进程运行。

最佳答案

我不确定它的准确性如何,但这可能有效:

  1. 确保您的计算机处于空闲状态(或尽可能空闲)
  2. 产生 2N 个线程(其中 N 是您计算机中的核心数)。所有这些线程都应设置为以彼此相同的优先级运行。
  3. 每个线程都应该运行一个无限循环,除了使用高分辨率计时器(例如调用 std::chrono::steady_clock::now() 或相似)。
  4. 在循环的每次迭代中,每个线程都应检查结果时间值是否存在“突然间断”,即时钟时间从 (t) 跳到 (t+n 毫秒,n 大于通常的增量值(value))。这些间隙很可能表明线程被踢出 CPU 以便另一个线程可以运行的时间段。
  5. 在某个时候,计算所有这些间隙大小的平均值,这就是您对调度程序的量子大小的估计。

请注意,这假设您的时钟分辨率大于调度程序的量子大小;如果不是(例如,如果您尝试使用分辨率为 10 毫秒的时钟来测量 5 毫秒的量子长度),那么测量量子长度将很困难 AFAICT。

关于multithreading - 如何通过实验确定进程/线程的调度量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37505887/

相关文章:

r - R 中的实验设计 : balanced incomplete block design

multithreading - 让线程在表单关闭时运行

java - 在 Java DAO 上使用同步是否会导致问题?

c# - 如何使用 .NET 框架设置作业调度?

multithreading - Work Stealing 总是最合适的用户级线程调度算法吗?

r - 在 R 中计算实验设计的效率

java - 并发数据库访问给出 IllegalStateException

c++ - 如何获取线程状态(例如挂起)、内存+CPU使用率、启动时间、优先级等

c++ - 内核模块和 SCHED_RR 线程的优先级

python - 您如何在 PsychoPy Builder 中实现条件分支实验?