负载的计算
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 变量是为了解决上述问题而出现的一种有趣的特性,它为系统中的每个处理器
都分配自身的副本。这样在多处理器系统中,当处理器只能访问属于自己的那个变量副本时,
不需要考虑与其他处理器的竞争问题,还能充分利用处理器本地的硬件缓存来提升性能。