zoukankan      html  css  js  c++  java
  • 任督二脉之进程管理(4)

    一、大纲

    二、负载均衡

    1)

    原来是nice+/-5的改变。

    例子:两个死循环子线程:real为自然时间,sys内核态时间和user用户态时间 因为两个线程是在两个核上面运行所以 sys+user = 2* real。

     四核运行环境:

    RT:

    普通进程:

    • 周期性闲时其他核负载达到一定程度拖过来跑,
    • IDLE时负载均衡时拖过来跑,
    • fork和exec(数据段和代码段替换)推到其他闲的核上面跑。

    push到最闲的核和闲时pull到本核。

    2)task的亲和力 affinity

    函数:

    工具:taskset -a 所有 -p  01/02/03是cpu掩码

    三、中断负载均衡 特指硬中断

    1)一个网卡的4个中断队列分给4个核

    2)有时候中断做不了负载均衡,比如只有一个中断队列,cpu0里IRQ里面调度softIRQ,softIRQ也会运行在cpu0,这样cpu0比较忙,RPS补丁可以做软中断负载均衡,帮助把软中断借用ipi中断派发到其他核,(ipi中断:先发中断,在中断抛软中断)。

    四、cgroup

    1)分群调度,群间和群内都是cfs调度算法。

     RT进程能不能放进cgroup,和普通进程放一个group???

    创建cgroup:

    加进程到cgroup:下面是把整个进程加到group里面,也可以把单个线程放到group里面修改task

    修改group的权重,默认值为1024

    quota:-1表示不限制,在cpu.cfs_period_us时间里面最多跑cpu.cfs_quota_us。

    Android对cgroup的应用

    docker也有使用cgroup

     

    五、硬实时

    硬实时是可预期,有截止期限。

    工具测试调度抖动,应该唤醒到实际唤醒的时间差。

    六、linux调度

    1)红色为不可抢占的区间:

    最后一个为打上RT补丁后的效果。

    2)四类区间

    第四类为可调度的进程上下文。spin_lock可以有好几种api,默认是关本cpu的调度,也可以用另一个api关中断。

    软中断里面可以再软中断,中断里面不可以再中断,不能嵌套。软中断可以被中断打断,spin_lock可以被中断抢占。

    例子:IRQ1为软中断,

     

    3)RT补丁,把linux改造为一个hard real-time系统。

    1. spin_lock是关中断自旋,改为mutex睡眠,让渡CPU。
    2. 优先级继承是解决优先级反转问题。
    3. 中断线程化:把中断服务程序放到一个线程里面执行,变为第四类区间,只有在中断到来和线程之间不可抢占。
    4. 软中断线程化:也变为第四类区间。

     七、答疑

    1. 不能嵌套中断,正在执行中断,中断控制器会pending 后来的中断。硬件有可能会丢中断。
    2. FIQ能打断IRQ,一般linux说的IRQ不是FIQ。
    3. 实时操作系统不是所有进程都是实时的,
    4. 一句话中断不能抢,time tick中断不能抢因为不能线程化,raw_spin_lock不能抢。
    5. spin_lock_irq 、spin_lock_irqsave 是既关调度又关中断,spin_lock_irqsave会保存调用前的中断开/关状态。
  • 相关阅读:
    创建FLASK,同步docker
    FLASK Buleprint
    restful api
    Angular JS
    线程日志
    将项目部署到linux下的docker容器中
    安装和卸载docker
    学习目录总编
    Ansible
    装饰器
  • 原文地址:https://www.cnblogs.com/shihuvini/p/8419167.html
Copyright © 2011-2022 走看看