0
点赞
收藏
分享

微信扫一扫

负载均衡和Per-CPU


负载的计算


CPU上的负载=(运行时间/总时间)x就绪队列总权重


负载均衡算法


1.负载均衡从当前CPU开始,由上而下遍历调度域,从最底层的调度域开始负载均衡

2.允许负载均衡的首要条件是当前CPU是调度域中的第一个CPU

3.在调度域中查找最繁忙的调度组,更新调度域和调度组的相关信息,最后计算出调度域中的不均衡负载值

4.在最繁忙的调度组中找出最繁忙的CPU,然后把繁忙的CPU迁移到当前CPU,迁移的负载量为不均衡负载值


Per-CPU

Per-CPU 变量是 Linux 内核中同步机制的一种。当系统中的所有 CPU 都访问共享的一个

变量,时,如果 CPUO 修改了变量,的值,而 CPU1 也在同时修改变量 ,的值,就会导致变

量,的值不正确。一种可行的办法就是在CPU0 访问变量,时使用原子加锁指令,这样 CPUr

访问变量,时就只能等待了,但这样做有两个比较明显的缺点。


1.原子操作是比较耗时的。
2.在现代处理器中,每个 CPU 都有 L1缓存,因而多个 CPU 同时访问同一个变量就
会导致缓存一致性问题。当某个 CPU 对共享的数据交量,进行修改后,其他 CPU
上对应的缓存行需要做无效操作,这对性能是有损耗的。


Per-CPU 变量是为了解决上述问题而出现的一种有趣的特性,它为系统中的每个处理器

都分配自身的副本。这样在多处理器系统中,当处理器只能访问属于自己的那个变量副本时,

不需要考虑与其他处理器的竞争问题,还能充分利用处理器本地的硬件缓存来提升性能。


举报

相关推荐

0 条评论