OSTEP:程序上下文切换的开销
第六章:受限制直接执行/上下文切换
实验环境
由于该实验要求在单个CPU上运行两个进程并在他们两个UNIX管道,而书中介绍的sche_affinity()
函数的具体调用不是很清楚,所以这里通过Docker
的参数限制,创建了一个只使用宿主机一个CPU资源的容器进行实验。
单核Docker
容器的创建
1 |
|
注:在以上环境中如果使用函数查询CPU核心数依旧可以发现为
16
或其他多核,但是在通过指令stress -c 4
实际测试后,性能只会在宿主机的单一CPU核心上运行,不影响实验。但是如果在创建Docker
容器的时候使用的是--cpus=1
,由于负载均衡,并不能达到单核进行实验的目的。
测量思路
通过
gettimeofday()
增加时间戳函数,获取执行时间创建10个管道,循环5次,每次循环的时候分别在两个管道之间反复通信,并输出上下文切换时间差
代码实现
1 |
|
测量结果
1 |
|
结果差错
由于在执行完write之后会继续执行主进程,下方的read也会运行,因此最后结果中奇数进程的结果时间会比偶数进程的时间长,正确答案应该靠近偶数(已经在代码中用注释写明)。
OSTEP:程序上下文切换的开销
https://halc.top/p/4b65fa48