多CPU与CPU间调度
优质
小牛编辑
129浏览
2023-12-01
多CPU与CPU间调度
SMP(对称多处理器)系统中,所有的CPU共享全部资源(总线,内存,I/O等),最大的特点就是所有资源共享,多个CPU之间没有区别。 NUMA(非一致内存访问)的基本特征是具有多个CPU节点,每个CPU节点由多个CPU组成,并且具有独立的本地内存与I/O槽口等。因此,虽然每个 CPU都可以访问整个系统的内存,但是访问本地节点内存的速度远远高于访问其它节点的内存。详见《SMP/NUMA/MPP体系结构对比》
- [SMP]
nosmp - 强制禁用SMP,这是个已被反对使用的旧选项
- [SMP]
maxcpus=整数 - 最大允许使用的CPU核心数。"0"表示禁用SMP特性(等价于已被反对使用的旧"nosmp"选项),同时也禁用IO APIC;正整数"n"表示最大允许使用n个CPU核心。
- [SMP]
nr_cpus=正整数 - 允许SMP内核支持的最大CPU核心数(等价于CONFIG_NR_CPUS)。配合CPU热插拔(CONFIG_HOTPLUG_CPU),可在运行时增加CPU数目。
- cpu0_hotplug
- 强制允许CPU0(boot CPU)热插拔(CONFIG_BOOTPARAM_HOTPLUG_CPU0)。下列特性必须依赖于cpu0,所此选项应谨慎使用:
(1)从休眠状态(S3,S4)唤醒以及从运行状态进入休眠状态
(2)PIC中断,也就是某些情况下,关机和重启也会依赖于cpu0 - [SMP]
additional_cpus=整数 - 最大允许热插拔的CPU数量。默认值由BIOS决定。相见Documentation/x86/x86_64/cpu-hotplug-spec
- [NUMA]
numa={off|noacpi} - off 关闭NUMA支持,也就是让所有内存都只属于同一个节点。
noacpi 不为NUMA解析ACPI SRAT表 - [KNL]
numa_balancing={enable|disable} - 启用/禁用NUMA均衡(CONFIG_NUMA_BALANCING),其默认值由CONFIG_NUMA_BALANCING_DEFAULT_ENABLED决定
- [KNL,BOOT]
numa_zonelist_order={zone|node|default} - 设置NUMA的zonelist顺序。这里设置的值还可以在运行中通过sysctl来修改。详见Documentation/sysctl/vm.txt
- [KNL,SMP]
isolcpus=CPU编号列表 - 将列表中的CPU从内核SMP平衡和调度算法中剔除。
[注意]提出后并不是绝对不能再使用该CPU的,操作系统仍然可以强制指定特定的进程使用哪个CPU(可以通过taskset来做到)。
该选项的目的主要是用于实现特定cpu只运行特定进程的目的。
CPU编号从"0"开始计数,列表的表示方法有三种:
numA,numB,...,numN
numA-numN
以及上述两种表示方法的组合:
numA,...,numM-numN
例如:0,3,4-7,9 - [KNL,SMP]
relax_domain_level={-1|0|1|2|3|4|5} - 设置CPUSET调度域(sched domain)的默认级别。大于此级别的调度域层次将禁用闲时均衡和唤醒均衡,而其余级别的调度域都开启。
-1(默认值) 使用系统的默认值(取决于不同的硬件架构)或者由其他的请求确定,也就是不人为指定默认级别。
0 禁用所有调度域的闲时均衡和唤醒均衡
1 超线程域(siblings),也就是同一个物理核心内的不同超线程
2 核域(cores),也就是同一个物理CPU中不同的核心
3 节点域(node),对于NUMA系统来说就是同一个NUMA节点内,对于non-NUMA系统来说这是整个系统范围
4 节点组域(chunk of node),仅适用于NUMA系统,表示在一组特定的NUMA节点范围内
5 全系统(system wide),全部系统范围内
详见Documentation/cgroups/cpusets.txt文档