调度域(sched domains)和CPU集(cpusets)

一、内核时间(kernel time)

1.   时钟类型

l  RTC (Real time clock):真实时间(BIOS硬件时间,用于稳定系统时间,不受操作系统影响,保证系统重启后时间的稳定)

l  TSC(time stamp counter):时间戳计时器(用于系统的更新(注册到ntp中等),比RTC更精确。

l  APIC(Advaced Programmable Interrupt Controller):高级可编程中断控制器,可编程时钟

l  PIC(Programmable Interrupt counter):可编程中断计数器

#PIC通常使用IRQ 0的中断号

#默认频率 standard:1000HZ(1 tick is 1ms,每1毫秒嘀哒一次)

Kernel-xen:250HZ (1 tick 4ms,每4毫秒嘀哒一次)

2.   调整系统(CPU)时钟(嘀哒)频率(系统所用时钟都采用嘀哒机制)

l  内核启动参数

tick_devider=value

#内核启动参数,写在/etc/grub.conf中kernel行。仅用于X86和X86_64,Xen中不可使用.

l  value值和对应频率:

2 = 500 HZ

4 = 250 HZ

5 = 200  HZ

10 = 100 HZ

#value值高则会降低cpu的频率,减小cpu负载开销

3.   调CPU速度

未使用的CPU时钟会增加系统能量的消耗,可在不影响系统性能的情况下,调整cpu时钟。

l  开启/etc/init.d/cpuspeed服务,通过系统自动调整

[root@station9 ~]# /etc/init.d/cpuspeed start

#默认系统会自动启动此服务, kernel-xen不适用

l  修改配置文件/etc/sysconfig/cpuspeed,配置{MAX,MIN}_SPEED,CPU的最大和最小速度

[root@station9 ~]# vim /etc/sysconfig/cpuspeed

MAX_SPEED=

MIN_SPEED=

二、IRQ的均衡机制(IRQ balancing)

IRQ硬件的中断总是优先与进程的优先级。

1.   查看当前IRQ信息

l  procinfo

[root@station9 ~]# procinfo

Linux 2.6.18-194.el5PAE (mockbuild@x86-007.build.bos.redhat.com) (gcc 4.1.2 20080704 ) #1 4CPU [station9.(none)]

Memory:      Total        Used        Free      Shared     Buffers

Mem:       4151768      854020     3297748           0      168964

Swap:      8385920           0     8385920

Bootup: Thu Aug 18 11:48:29 2011    Load average: 0.02 0.02 0.00 1/141 9777

user  :       0:01:30.53   0.0%  page in :        0

nice  :       0:00:30.21   0.0%  page out:        0

system:       0:00:50.16   0.0%  swap in :        0

idle  :   3d 22:20:16.70  99.9%  swap out:        0

steal :       0:00:00.00   0.0%

uptime:      23:35:57.11         context : 45141770

irq  0:  84964173 timer                 irq 74:         0 uhci_hcd:usb4

irq  1:         3 i8042                 irq 82:   3371860 ehci_hcd:usb1, uhci_

irq  3:         5                       irq 90:        45 uhci_hcd:usb3

irq  4:         4                       irq 98:         0 ahci

irq  8:         3 rtc                   irq154:         1

irq  9:         0 acpi                  irq162:    100856 0          0     100

irq 12:         4 i8042                 irq177:     49130 ioc0

l  cat /proc/interrupts

[root@station9 ~]# cat /proc/interrupts

CPU0       CPU1       CPU2       CPU3

0:   84971583      21518      21524      21505    IO-APIC-edge  timer

1:          0          1          1          1    IO-APIC-edge  i8042

8:          0          2          1          0    IO-APIC-edge  rtc

9:          0          0          0          0   IO-APIC-level  acpi

12:          1          2          0          1    IO-APIC-edge  i8042

74:          0          0          0          0   IO-APIC-level  uhci_hcd:usb4

82:        154        139    1687180    1687187   IO-APIC-level  ehci_hcd:usb1, uhci_hcd:usb2

90:         11         12          8         14   IO-APIC-level  uhci_hcd:usb3

98:          0          0          0          0   IO-APIC-level  ahci

162:         22          0          0     100959         PCI-MSI  eth0

177:       1353       1324      23233      23239   IO-APIC-level  ioc0

NMI:          0          0          0          0

LOC:   85031712   85031718   85031713   85031719

ERR:          0

MIS:          0

2.   irqbalance

l  irqbalance主要功能:

可以合理的调配使用各个CPU核心,特别是对于目前主流多核心的CPU,简单的说就是能够把压力均匀的分配到各个CPU核心上,对提升性能有很大的帮助。
    irqbalance 用于优化中断分配,它会自动收集系统数据以分析使用模式,并依据系统负载状况将工作状态置于 Performance mode 或 Power-save mode。
    处于 Performance mode 时,irqbalance 会将中断尽可能均匀地分发给各个 CPU core,以充分利用 CPU 多核,提升性能。
    处于 Power-save mode 时,irqbalance 会将中断集中分配给第一个 CPU,以保证其它空闲 CPU 的睡眠时间,降低能耗。

irqbalance默认每10s会移动一次IRQ,即重新分配一次IRQ信息,将其分配给指定的CPU。

l  开启irqbalance机制

[root@station9 ~]# /etc/init.d/irqbalance start

[root@station9 ~]# chkconfig irqbalance on

#系统默认会启动该服务,配置文件/etc/sysconfig/irqbalance。

3.   IRQ Affinity(绑定硬件中断IRQ到指定 CPU)

l  关闭irqbalance服务

手动绑定 IRQ 到 CPU 之前需要先停掉 irqbalance 这个服务,irqbalance用来自动绑定和平衡 IRQ。

[root@station9 ~]# /etc/init.d/irqbalance stop

[root@station9 ~]# chkconfig irqbalance off

l  echo cpu_mask > /proc/irq/<interrupt_number>/smp_affinity

#为保证系统重启生效需set smp_affinity for every IRQ in /etc/rc.local

[root@station9 proc]# more interrupts

CPU0       CPU1       CPU2       CPU3

162:         22          0          0     109470         PCI-MSI  eth0

#只截取了eth0的信息,处理eth0中断的主要是cpu3(即第4颗CPU)  [root@station9 ~]# echo 1 >/proc/irq/162/smp_affinity

#将eth0绑定到cpu0(第1颗CPU上)

[root@station9 ~]# more /proc/interrupts |grep eth0

CPU0       CPU1       CPU2       CPU3

162:        388          0          0     109470         PCI-MSI  eth0

#显示处理eth0中断的变成cpu0了

l  cpu_mask或smp_affinity计算

/proc/irq/162/smp_affinity” 中的 ”1“ 是怎么来的,这其实是个二进制数字,代表 0000001,00000001 代表 CPU0 的话,00000010 就代表 CPU0, “echo 1 > /proc/irq/162/smp_affinity” 的意思就是说把 162中断绑定到 00000001(CPU0)上。所以各个 CPU 用二进制和十六进制表示就是:

Binary       Hex   #个人计算方法
    CPU 0    00000001         1    2的0次方
    CPU 1    00000010         2    2的1次方
    CPU 2    00000100         4    2的2次方
    CPU 3    00001000         8    2的3次方

如果我想把 IRQ 绑定到 CPU2 上就是 00000100=4:

[root@station9 ~]# echo "4" > /proc/irq/162/smp_affinity

如果我想把 IRQ 同时平衡到 CPU0 和 CPU2 上就是 00000001+00000100=00000101=5 (2的0次方+2的2次方=5)

[root@station9 ~]# echo "5" > /proc/irq/162/smp_affinity

本文转自netsword 51CTO博客,原文链接:http://blog.51cto.com/netsword/643251

RH442-7 调度域和CPU集之一相关推荐

  1. linux内核如何支持多核cpu,现在的多核CPU,Linux操作系统是否能够实现单个进程(多线程)的多核调度(跨CPU核心调度)?...

    现在的多核CPU,Linux操作系统是否能够实现单个进程(多线程)的多核调度(跨CPU核心调度)? 关注:106  答案:2  mip版 解决时间 2021-02-02 01:11 提问者你說.你愛我 ...

  2. 无法从计算机验证正在安装驱动,intel CPU集显驱动失败,无法为此计算机验证正在安装的驱动程序...

    intel CPU集显驱动失败,无法为此计算机验证正在安装的驱动程序 2021-04-19 08:21:00 来源:转载 0 intel CPU集显驱动失败,无法为此计算机验证正在安装的驱动程序 用户 ...

  3. linux多核编程系列之调度亲和性,关于CPU亲和性,这篇讲得最全面

    何为CPU的亲和性 CPU的亲和性,进程要在某个给定的 CPU 上尽量长时间地运行而不被迁移到其他处理器的倾向性,进程迁移的频率小就意味着产生的负载小.亲和性一词是从affinity翻译来的,实际可以 ...

  4. 没有人比我更懂集群调度器---之流行集群调度器综述

    集群调度器的演进 Firmament.io这片paper详细总结了目前调度的几大分类: a. 集中式调度器:代表k8s.Hadoop .HPC 调度器. 优势:调度器可以感知全局信息,因此可以基于此开 ...

  5. intel CPU集显ID速查

    前言 本速查表全部源于Intel产品规范,在转录过程中,难免有错误或遗漏,请大家在查阅过程中,如果发现错误,请告知独行秀才!本表主要用于黑苹果安装过程中,集成显卡ID的查询.方便大家根据自己的CPU选 ...

  6. P5937 [CEOI1999]Parity Game-扩展域并查集与离散化处理

    题目链接[CEOI1999]Parity Game - 洛谷 单调队列优化多重背包(全网最详细解析)_秦三马和他的CF生涯的博客-CSDN博客 考察内容,扩展域并查集,本题中把奇偶性相同归为一个集合, ...

  7. 私域运营新手学习:如何构建“私域流量池”,一定要搞清楚这些规则[附私域流量案例集]...

    如何构建出一个属于自己的"私域流量池"? 一.经济下行,企业如何去增长 1.流量困境 流量成本决定了企业的交易成本,影响企业利润,流量费用过高,利润就会下降,越是好的媒介资源,流量 ...

  8. Linux内核 sched,struct sched_domain在include / linux / sched.h中的含义(在内核中调度域)...

    我试图了解负载均衡器如何在Linux内核中的多处理器系统上运行, Linux调度程序基本上使用runques来存储它必须在下一次运行的任务,现在以执行load_balancer()的方式处理多处理器系 ...

  9. 一文读懂 | CPU负载均衡实现

    在<一文读懂 | 进程怎么绑定 CPU>这篇文章中介绍过,在 Linux 内核中会为每个 CPU 创建一个可运行进程队列,由于每个 CPU 都拥有一个可运行进程队列,那么就有可能会出现每个 ...

最新文章

  1. python http服务器_超简单的Python HTTP服务
  2. 0001 手工构建第一个C#应用程序
  3. 5g时代新型基础设施建设白皮书 下载_全文下载 | 5G时代新型基础设施建设白皮书...
  4. jq 通过标签名称获取标签_怎样利用tag标签来获取长尾关键词排名
  5. HibernateNONSTRICT_READ_WRITE CacheConcurrencyStrategy如何工作
  6. 经典Python面试题之Python基础篇
  7. c语言蓝桥删除多余的括号,蓝桥杯 括号问题
  8. 很好的关于机器学习入门讲解(深入浅出)
  9. appium实现屏幕截图
  10. win10下微软office2010卸载
  11. 【C#】基础篇(3) C#实现串口助手,解决中文乱码
  12. win10下pytorch 安装以及查看版本
  13. 光猫DNS服务器未响应,有光纤猫了还要猫吗?
  14. 数据库导入表时出错:Importing tables....errors detected(see log page)
  15. 一个创业项目成功需要具备什么条件?
  16. 油脂抵近历史高点,棕榈油认购大涨,CCS05继续向下2022.3.1
  17. 毕业生找工作要做好哪些准备
  18. Android 统计流量数据
  19. python根据IP查询地理位置
  20. 医生学计算机:强大的shar, ubuntu 的强大压缩工具,超出想像

热门文章

  1. 前程无忧2020新财报:曾经风光,今夕已老
  2. 考试系统(uniapp)第二节 (考试试题)
  3. 在Openshift上部署asp.net遇到的一些捉急问题总结
  4. 海康威视工程师谈嵌入式软件
  5. 图片渲染(图像编码原理)
  6. 安卓常用框架、模块、软件
  7. 自己的电脑怎样重装系统
  8. python实现q-learning算法
  9. Gradle 配置代理
  10. web项目:智能出行规划网站——爬虫+flask+echarts+基础前端(html、css、js、jq)