其他分享
首页 > 其他分享> > 【翻译笔记】上下文切换代价量化笔记

【翻译笔记】上下文切换代价量化笔记

作者:互联网

【原文】

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