linux进程、线程及调度算法(四)

2021-05-22  本文已影响0人  404Not_Found

负载均衡

linux中,每个核都会跑相同的调度算法

RT 进程(task_struct): N 个优先级最高的RT 分布到 N 个核上,每个核乐于工作

普通进程(normal)

所以一个线程,可能一会在CPU 1 一会再CPU2...,但可以控制线程在哪个核上

CPU task affinity 亲和性

//np: not posix 非posix api
int pthread_attr_setaffinity_np(pthread_attr_t*, size_t, const cpu_set_t *);

int pthread_attr_getaffinity_np(pthread_attr_t*, size_t, cpu_set_t*);

int sched_setaffinity(pid_t pid, unsigned int cpusetsize, cpu_set_t *mask);

int sched_getaffinity(pid_t pid, unsigned int cpusetsize, cpu_set_t *mask);

设置线程向哪个CPU 亲和,设置cpu_set_t 掩码: 0x6(110),指向在 1 2 两个核上跑。设置为0x4:(100), 则指在2号CPU上跑。

taskset -a -p 01 29991 
//命令设置进程在哪个核上跑。如果2个死循环线程跑在两个CPU上
//则从200% 降低到100%。因为所有线程都跑在一个核上啦

IRQ affinity 中断的负载均衡

分配IRQ到某个CPU


多队列网卡.png

网卡有4个队列,每个队列的收发中断,分别设置成 1 2 4 8,则均分到4个核上,这就是中断的负载均衡。

如果一张网卡只有一个队列,但是有8个核,中断发给了第0个核,当CPU0 收到中断IRQ后,如果在cpu0 中又调了一个 soft IRQ,这个中断也会运行在cpu0,中断调度的软中断也会运行在同一cpu上的。所以对于cpu0来说,中断和软中断的负载都很重,TCP/IP处理都丢到软中断里去了。cpu0 忙的要死,旁边7个核看热闹,包的吞吐率肯定上不来。
linux提交的RPS补丁,将包处理负载均衡到多个cpu。

//软中断负载均衡到1-15个核上去,4个f 则 0-15 负载均衡。
//fffe 将自己的软中断派发到其他cpu上,所以的cpu 核参与到 包的吞吐
echo fffe > /sys/class/net/eth1/queues/rx-0/rps_cpus fffe 

cgroups 进程的分群

示例:2个用户 在一台服务器上工作,比如编译,A用户创了1000个线程, B用户创建了32个线程,如果nice值都是0,则A线程占CPU的比例远远大于B线程占CPU的比例。
所以再引出一层: 分组。群与群之间先做完全公平调度。
群与群之间进行FC调度,群内部再进行CFS调度
cgourp 有一系列的操作,后续遇到再好好总结吧。

Hard realtime 可预期性

硬实时
在一定时间内必须有响应。比如导弹发射,从按按钮到发射,1ms。超过1ms 后果时灾难性的

软实时
可以超过截止期限,就算超过也非灾难性。linux是软实时的。

硬实时与软实时是按照需求来的。

kernal 越来越支持抢占

linux 抢占区间.png

可抢占区域逐步增加,linux内核也会被抢占

当linux 被打上硬实时补丁,就会到第四种情况,只存在点状不可调度区域。

linux 为什么不是硬实时

从linux不可调度实际,以及四类区间进行分析 。


四个区间.png

linux大部分运行在四个区间中.

  1. 中断区间
    被中断是 RT进程被唤醒,拒绝调度
  2. 软中断区间
    软中断过程中,RT进程被唤醒,也拒绝调度
  3. 进程
    3.1 spin_lock(线程拿了把锁)
    整个核的调度都被关啦,RT 当然拒绝调度
    3.2 可调度的上下文
    只有此时可以调度。

只有当1、2、3类区间都结束,才会开启抢断,RT进程运行。

抢占时机.png
  1. T0 时刻 系统调用陷入内核
  2. T1 拿到自旋锁
  3. T2 软中断
  4. T3 时刻 RT 进程被唤醒(RR/FIFO)
  5. T4 时刻 再被中断
  6. T5 出中断,但依旧不会响应 RT进程
  7. 出了临界区,RT 才被响应.

从T3 到T6 的延迟都是不可预知的,所以 linux 不是硬实时的,而是软实时的。

当linux 打上RT补丁后

其实就是把区间1,2,3 都变成了四类区间。所以linux 变成了硬实时。(中断服务也变成及其的短)
RT补丁就是第4个完全抢占

上一篇 下一篇

猜你喜欢

热点阅读