【翻译笔记】上下文切换代价量化笔记
作者:互联网
【原文】
https://www.usenix.org/legacy/events/expcs07/papers/2-li.pdf
1)介绍
上下文切换的代价
直接代价:进程寄存器的保存和恢复,os的线程调度,tlb的加载,processor的pipline刷新
cache影响代价:不同的负载下,不同的内存访问模型导致cache miss代价
2)衡量方法
直接代价量化方法
2个进程通过管道交互通信的时间c1
2个进程通过管道交互通信+分配访问浮点数的时间c2
c1里,每次通信包含2次上下文切换+1次读和1次写系统调用
2.1)每次线程切换的代价
2w次(读+写)+2w次上下文切换的时间t1
1w次(读+写)时间t2
c1=t1/2w - t2/1w
2.2)c2的代价
在512KB arraySize的情况下,写时延最高到200ms
2.3) 避免潜在因素影响
用两核的cpu,其他线程绑定再第一个核上,实验的绑在第二个核上
使用real-time调度策略SCHED_FIFO,并且给最高的优先级
减少其他线程的影响
sched_setaffinity,sched_setscheduler
3)实验结果
使用IBM机器,每个有512KB L2缓存,cacheLineSize=128B
c1=3.8ms
c2从几ms到1s波动
3.1)dataSize的影响
第一个region(1KB-200KB),线程切换从4.2us到8.7us
因为能匹配L2 cache
第二个region(256KB-512KB),一个进程能匹配L2 cache,但是两个不能,线程切换从38us到203us
每次上下文切换,调度进程需要重新填满L2 cache,我们相信额外的时间是因为cache warmUp时间
在arraySize=384KB,代价开始大幅变动(不同的data访问策略),执行时间主要是花在内存带宽,dataWrite消耗2倍贷款
第三个region(512KB以上),由于数据太多不能放入cache,即使不上下文切换,也会cacheMiss
3.2)条带式访问
arraySize在(32KB,128KB)之间,数据能放入cache,不同stride访问差别不大
当不能放入cache,stride size越大,变化越高
stride=8B,消耗在44us和183us之间,平均116us
stride=128B, 消耗在133us和1500us,平均830us
原因在于stride影响了内存的warm-ups
3.3)实验环境的影响
额外增加ping外部测试,证明双核测试方法比单核更稳定
标签:cache,笔记,stride,线程,切换,量化,上下文,代价 来源: https://www.cnblogs.com/jiangshifu/p/16220794.html