
# HCE定制内核参数说明
HCE 2.0相较CentOS 8存在部分定制内核参数，具体说明及用途如下。
#### kernel参数
以下是所属文件在/proc/sys/kernel和/sys/kernel目录下的参数：
**扫描任务**
自动NUMA平衡会扫描任务的地址空间并取消页面映射，以检测页面放置是否正确，或者数据是否应迁移到靠近任务运行的内存节点。每次"扫描延迟"，任务会扫描其地址空间中的下一个"扫描大小"数量的页面。当达到地址空间的末尾时，扫描器会从头开始。
"扫描延迟"和"扫描大小"共同决定了扫描速率。当"扫描延迟"减少时，扫描速率增加。因此"扫描延迟"和每个任务的扫描速率是自适应的，取决于历史行为。如果页面放置正确，则扫描延迟增加；否则，扫描延迟减少。"扫描大小"不是自适应的，但"扫描大小"越大，扫描速率越高。
更高的扫描速率会带来更高的系统开销，因为必须捕获页面错误，并迁移数据。然而，扫描速率越高，任务的内存迁移到本地节点的速度越快，如果工作负载模式发生变化，可以最小化由于远程内存访问带来的性能影响。[表1]中的参数控制扫描延迟和扫描页面数量的阈值。
 表1扫描参数说明 
| 参数                                           | 说明                        | 取值               |
|:---|:---|:---|
| **kernel.numa_balancing_scan_delay_ms**      | 任务初次启动时的扫描延迟。             | 默认值：1000（单位：毫秒）  |
| **kernel.numa_balancing_scan_period_max_ms** | 控制扫描任务的最长时间间隔，从而控制最小扫描频率。 | 默认值：60000（单位：毫秒） |
| **kernel.numa_balancing_scan_period_min_ms** | 控制扫描任务的最短时间间隔，从而控制最大扫描频率。 | 默认值：1000（单位：毫秒）  |
| **kernel.numa_balancing_scan_size_mb**       | 定义每次扫描的页面大小。              | 默认值：256（单位：MB）   |
   
**CFS调度器**
CFS（完全公平调度器）采用纳秒级的精度进行会计，不依赖于任何jiffies或其他HZ相关的细节。因此，CFS调度器不再像之前的调度器那样具有"时间片"概念，也不包含任何启发式算法。唯一的可调参数（需要启用 CONFIG_SCHED_DEBUG）是：
```
/proc/sys/kernel/sched_min_granularity_ns
```
由于其设计，CFS调度器不易受到针对传统调度器启发式算法的现有"攻击"，如fiftyp.c、thud.c、chew.c、ring-test.c和massive_intr.c等测试均能正常执行，不会影响交互性。
CFS调度器在处理优先级（nice levels）和SCHED_BATCH上的表现显著优于之前的传统调度器：这两类工作负载的隔离性得到了更为积极的增强。对称多处理（SMP）负载均衡的实现经过了重构和清理：负载均衡代码中不再包含运行队列遍历的假设，现采用调度模块的迭代器。由此，负载均衡代码变得更加简洁。
表2CFS sched_min_granularity_ns参数说明 
| 参数                                  | 描述                                                                                 | 取值                 |
|:---|:---|:---|
| **kernel.sched_min_granularity_ns** | 该参数用于将调度器调整为"桌面"模式（即低延迟）或"服务器"模式（即良好的批处理）工作负载。默认设置适合桌面工作负载。SCHED_BATCH也由CFS调度模块处理。 | 默认值：3000000（单位：纳秒） |
   
**压力场景定位开关**
表3net_res_debug_enhance参数说明 
| 参数                               | 描述                                                                                                                                                                   | 取值         |
|:---|:---|:---|
| **kernel.net_res_debug_enhance** | 在海量收发报文等压力场景下，内核网络协议栈可能会发生资源不足或超限，从而导致用户态socket、send接口返回失败或者网络丢包等故障，**net_res_debug_enhance**开启的情况下会在该类异常场景下打印定位信息至系统日志中。 1表示启用，0表示不启用。 | 默认值：0（不启用） |
   
**oom事件故障定位**
产品/平台业务软件或操作系统本身可能因为某种特殊原因导致内存空间不足，触发oom事件。kbox能够将oom事件发生的时间、发生oom进程信息、系统进程信息等异常信息记录到存储设备中，方便维护人员定位。
表4信息控制参数说明 
| 参数                                      | 描述                 | 取值                                            |
|:---|:---|:---|
| **kernel.oom_enhance_enable**           | 控制是否启用oom信息打印功能。   | 0：不启用 1：启用（默认值）  |
| ****kernel.**oom_print_file_info**      | 控制是否打印文件系统信息。      | 0：不启用 1：启用（默认值） |
| ****kernel.**oom_show_file_num_in_dir** | 控制打印的文件系统信息中文件的数量。 | 默认值：10                                        |
   
**SMT驱离特性**
表5SMT 驱离特性参数说明 
| 参数                                       | 描述                             | 取值                                                               |
|:---|:---|:---|
| **kernel.qos_offline_wait_interval_ms**  | 离线任务在超负载情况下返回用户态时，每次睡眠的时间。     | 取值范围：\[100-1000\] 默认值：100（单位：毫秒）    |
| **kernel.qos_overload_detect_period_ms** | 非离线任务持续占有CPU超过此时间会触发优先级反转解决流程。 | 取值范围：\[100-100000\] 默认值：5000（单位：毫秒） |
   
openEuler新增内核参数，详情请参见[openEuler技术白皮书第五章节------SMT 驱离防止优先级反转特性](https://www.openeuler.org/whitepaper/openEuler 22.03 LTS SP2 技术白皮书.pdf)。
**算力统计**
同一节点内睿频、调频、SMT、大小核等因素导致从cpuacct子系统统计的CPU利用率不能真实反映使用了多少算力，节点间CPU利用率所代表的算力没有可比性（差异达到30%+）。算力统计的目标是基于CPU真实算力利用率进行统计，解决当前CPU利用率（占空比）不能真实反映算力利用的问题，基于真实算力推导的cgroup级别的CPU利用率，相对占空比的利用率更能表征业务性能指标。现阶段算力统计主要考虑SMT影响。
表6算力统计参数说明 
| 参数                                                     | 描述                                             | 取值                                            |
|:---|:---|:---|
| **kernel.normalize_capacity.sched_normalize_util**     | 动态开启CPU利用率归一化功能。                               | 0：关闭（默认值） 1：开启 |
| **kernel.normalize_capacity.sched_single_task_factor** | 在超线程的场景，设置逻辑核单独运行算力系数。取值1-100，数值越大，说明逻辑核的算力越大。 | 取值：1-100 默认值：100  |
| **kernel.normalize_capacity.sched_multi_task_factor**  | 在超线程的场景，设置逻辑核并行运行算力系数。取值1-100，数值越大说明逻辑核的算力越大。  | 取值：1-100 默认值：60  |
| **kernel.normalize_capacity.sched_normalize_adjust**   | 可读可写，动态开启算力补偿总开关                               | 0：关闭（默认值） 1：开启。   |
   
**preferred CPU利用率**
表7sched_util_low_pct参数说明 
| 参数                            | 描述                                                                                  | 取值     |
|:---|:---|:---|
| **kernel.sched_util_low_pct** | preferred CPU利用率阈值，当preferred CPU利用率低于该阈值时，限制业务在preferred CPU中选核，否则在allowed CPU中选核。 | 默认值：85 |
   
**软件狗检测周期**
HCE在内核watchdog基础上，增加LOCKUP情况下错误重置软件狗导致watchdog失效的场景检测功能，记录或回显有效信息，协助开发运维快速定位问题。软件狗检测周期增加了sysctl参数设置，可根据产品诉求，动态调整检测和告警日志打印周期。
表8软件狗检测周期参数说明 
| 参数                                        | 描述                                                                                              | 取值                                                                                                                               |
|:---|:---|:---|
| **kernel.watchdog_enhance_enable**        | 控制watchdog增强的所有功能。                                                                              | 0：表示关闭。 1：开启（默认值） 说明： 其他值表示开启。建议配置0或者1。 |
| ****kernel**.watchdog_softlockup_divide** | 软件狗检测周期调整参数，**kernel.watchdog_thresh** \* 2 / **kernel.watchdog_softlockup_divide**后的值为软件狗检测周期。 | 取值范围：\[1, 60\] 默认值：5（单位：秒）                                                                           |
| **kernel.watchdog_print_period**          | 设置软件狗检测到进程不调度后，打印进程信息的时间间隔。                                                                     | 取值范围：\[1, 60\] 默认值：10（单位：秒）                                                                       |
   
**中断风暴检测**
通过启用本特性，在软锁死发生时，能够每隔固定时间采集一次CPU状态，默认采集五次。报告包括系统、软中断、硬中断和空闲占用采样周期内时间的百分比，从而帮助开发人员分析是否存在中断风暴。
表9interrupt_storm_detector_enable参数说明 
| 参数                                         | 描述           | 取值                                      |
|:---|:---|:---|
| **kernel.interrupt_storm_detector_enable** | 控制中断风暴检测的功能。 | 0：关闭 1：开启 |
   
**cpu qos接口兼容开关**
表10sched_qos_level_0_has_smt_expell参数说明 
| 参数                                                         | 描述                                                                                                                                                                          | 取值    |
|:---|:---|:---|
| **kernel** **.sched_qos_** **level_** **0_has_smt_expell** | HCE+CCE混部2级扩展到5级后的cpu qos接口兼容开关，0表示关闭，即启用5级cpu qos状态。 当cce遇到需要保持兼容的场景时，可开启kernel.sched_qos_level_0_has_smt_expell开关，将开关置1，使0优先级保持原来在、离线混部时的语义。 | 默认值：0 |
   
**通过内核参数动态调整hz**
表11actual_hz参数说明 
| 参数                       | 描述                                                      | 取值                                                 |
|:---|:---|:---|
| ****kernel**.actual_hz** | 系统启动后可通过内核参数动态调整hz的能力，为0时表示关闭hz调整特性，此时将使用内核默认的 1000 HZ。 | 取值范围：\[0, 1000\] 默认值：0 |
   
**内核调度策略**
表12内核调度策略参数说明 
| 参数                                          | 描述                                                                                                                                            | 取值                                                                                                                                        |
|:---|:---|:---|
| **********kernel****.sched_latency_ns****** | **sched_latency_ns**是一个用于定义目标抢占延迟时间的变量。它指定了在这个时间周期内，调度器会至少调度一次所有运行队列中的任务。                                                                     | 默认值：24000000（单位：纳秒）                                                                                                                       |
| **kernel.sched_migration_cost_ns**          | **sched_migration_cost_ns**参数指定以纳秒为单位的时间间隔。任务最后一次执行后，CPU 缓存被视为具有有用内容，直到此间隔过期为止。增加这个间隔会导致任务迁移减少。                                               | 默认值：500000（单位：纳秒）                                                                                                                         |
| **kernel.sched_nr_migrate**                 | 如果一个SCHED_OTHER任务产生了大量其他任务，它们将全部在同一CPU上运行。迁移任务或softirq将尝试平衡这些任务，以便它们可以在空闲的CPU上运行。**sched_nr_migrate**选项可以设置为指定一次移动的任务数。                       | 默认值：32                                                                                                                                    |
| **kernel.sched_tunable_scaling**            | 控制调度程序是否可以根据在线CPU数量自动调整sched_min_granularity_ns/sched_latency_ns/sched_wakeup_granularity_ns的值。                                               | 0：不调整 1：对数调整（以 2 为底对数进行调整） 2：线性调整（线性比例调整） 默认值：1 |
| **kernel.sched_wakeup_granularity_ns**      | 调度程序唤醒间隔时间。                                                                                                                                   | 默认值：4000000（单位：纳秒）                                                                                                                        |
| **kernel.sched_autogroup_enabled**          | 是否开启**autogroup**调度特性。 当开启**autogroup** 调度特性时，一个**autogroup**中的所有成员都属于同一个内核调度器"任务组"。CFS调度器使用了在任务组间均衡分配CPU时钟周期的算法。 | 0：关闭（默认值） 1：开启                                                                                             |
   
**潮汐调度功能**
表13禁用潮汐调度功能开关 
| 参数                                        | 描述        | 取值                                            |
|:---|:---|:---|
| **kernel.sched_dynamic_affinity_disable** | 禁用潮汐调度功能。 | 0：开启（默认值） 1：禁用 |
   
**CPU QoS 优先级负载均衡特性**
openEuler新增内核参数，请参考[openEuler技术白皮书第五章节------CPU QoS 优先级负载均衡特性](https://www.openeuler.org/whitepaper/openEuler 22.03 LTS SP2 技术白皮书.pdf)。
表14sched_prio_load_balance_enabled参数说明 
| 参数                                         | 描述                              | 取值                                             |
|:---|:---|:---|
| **kernel.sched_prio_load_balance_enabled** | 是否开启CPU QoS优先级负载均衡，0表示关闭，1表示开启。 | 取值范围：{0,1} 默认值：0 |
   
**支持核挂死检测特性**
CPU核挂死问题比较特殊，它出现时，CPU核无法执行任何指令，也不响应中断，故内核检测无法覆盖此场景，需要芯片使用仿真器来定位根因。为提升此类问题定位的效率，内核开发了核挂死检测特性，此特性可快速定性是否出现核挂死问题。
表15核挂死检测阈值 
| 参数                                      | 描述                                                 | 取值    |
|:---|:---|:---|
| **kernel.corelockup_thresh**（仅适用于ARM架构） | 设置此阈值为x，当某个CPU连续x次收不到hrtimer和NMI中断时，就判定该CPU出现了核挂死。 | 默认值：5 |
   
**控制idle polling执行** **参数**
表16kernel.halt_poll_threshold参数说明 
| 参数                                        | 描述                                                                                                                        | 取值                                                     |
|:---|:---|:---|
| **kernel.halt_poll_threshold**（仅适用于ARM架构） | 开启此特性时，GuestOS kernel在进入idle时，会在先进行idle polling一段时间，而不发生VM-exit。此参数控制idle polling执行的时间，在idle polling过程中发生任务调度可以避免IPI中断开销。 | 默认值：0 取值范围：0-max(uint64) |
   
**用户态穿越内核UCE不复位**
表17kernel.machine_check_safe参数说明 
| 参数                                       | 描述                                                                                                     | 取值                                             |
|:---|:---|:---|
| **kernel.machine_check_safe**（仅适用于ARM架构） | 确保内核开启config开关CONFIG_ARCH_HAS_COPY_MC，/proc/sys/kernel/machine_check_safe值为1时代表全场景使能，改为0代表不使能，其他值均为非法。 | 默认值：1 取值范围：{0,1} |
   
**支持网络数据包校验错误时打印源 IP 地址**
当发生硬件错误或者网络遭受攻击时，内核会收到检验错误的网络数据包并直接抛弃，无法定位数据包来源。本特性提供如上场景下的可定位能力：校验失败后，在系统日志中打印该数据包的源IP地址。
表18kernel.net_csum_debug参数说明 
| 参数                                   | 描述            | 取值                                          |
|:---|:---|:---|
| **kernel.net_csum_debug**（仅适用于ARM架构） | 该参数仅存在于arm环境。 | 0：关闭（默认值0） 1：开启 |
   
**集群调度**
表19集群调度参数说明 
| 参数                                  | 描述 | 取值                                                                            |
|:---|:---|:---|
| **kernel.sched_cluster**（仅适用于ARM架构） | -  | 0：关闭 1：开启（默认值）  |
   
**D状态进程告警打印**
TASK_UNINTERRUPTIBLE状态为不可中断的睡眠状态，即D状态，当一个进程处于D状态时，该进程不占用CPU，但是该进程也不能接收响应信号，所以我们不能kill一个处于D状态的进程，只能等其他进程唤醒它才能继续运行。一个进程处于D状态常见的场景有等待IO操作完成、调用mutex_lock、down等待访问共享资源、调用wait_for_completion系列接口等待其他事件完成。
正常情况下，一个进程不会处于D状态太久，条件满足时该进程就会被唤醒，但是如果出现IO读写异常、mutex死锁等，可能会导致该进程长时间没有被唤醒，一直处于D状态无法继续运行。为了检测这类错误，内核实现了hungtask检测机制，在检测到异常时，打印告警、触发panic重启。
表20kernel.hung_task_warning_timeout_secs 参数说明 
| 参数                                        | 描述                                                                            | 取值     |
|:---|:---|:---|
| **kernel.hung_task_warning_timeout_secs** | 该配置为触发打印的阈值，设置为x，即进入D状态x秒后触发打印， 配置为0时关闭告警打印功能 | 默认值：60 |
   
**容器内核态资源隔离视图**
容器内核态资源隔离视图特性，在内核层面实现了对容器资源可见性的增强。启用该功能后，在容器中使用top、free等命令时，将直接获取容器资源信息，而非容器所在宿主机的资源信息。
表21容器内核态资源隔离视图参数说明 
| 参数                                         | 描述                   | 取值                                                                                                                                  |
|:---|:---|:---|
| **kernel.enhance_container_enable**        | 该接口控制容器资源隔离视图功能是否开启。 | 0：关闭（默认值），容器中显示宿主机信息 1：开启，显示容器内部信息                                                                   |
| **kernel.enhance_container_cgroup_source** | 该接口控制cgroup接口的数据源。   | 0：使用指针current所在的cgroup接口作为数据源（默认值） 1：使用child reaper（child reaper即当前PID Namespace的1号进程）所在的cgroup作为数据源。 |
   
**block慢IO检测特性**
为慢IO检测特性设计的动态总开关，用于控制整机慢IO检测特性是否开启的总开关，开关为默认开启。
表22慢IO检测特性动态总开关参数说明 
| 参数                               | 描述                                                   | 取值                                                                                         |
|:---|:---|:---|
| **kernel.slowio_monitor_enable** | 控制整机慢IO检测特性的总开关，可通过sysctl命令进行控制，以及可以通过sysctl配置文件持久化。 | 取值范围：0或1 bool类型值，默认值1 （0为关，1为开） |
   
#### net参数
以下是所属文件在/proc/sys/net目录下的参数：
**TCP套接字缓存控制**
表23net.ipv4.tcp_rx_skb_cache参数说明 
| 参数                            | 描述                                                                      | 取值         |
|:---|:---|:---|
| **net.ipv4.tcp_rx_skb_cache** | 控制一个skb的每个TCP套接字缓存，这可能有助于改善某些工作负载的性能。这在具有大量TCP套接字的系统上可能是危险的，因为它会增加内存使用。 | 默认值：0（不启用） |
   
**网络命名空间控制**
表24netfilter.nf_namespace_change_enable参数说明 
| 参数                                           | 描述                     | 取值    |
|:---|:---|:---|
| **net.netfilter.nf_namespace_change_enable** | 非初始化网络命名空间中，命名空间的只读状态。 | 默认值：0 |
   
**查询VF信息显示广播地址信息**
表25查询VF信息显示广播地址信息开关 
| 参数                        | 描述                                                        | 取值              |
|:---|:---|:---|
| **net.core.vf_attr_mask** | 用于控制netlink消息查询VF信息时（如"ip linkshow"命令）是否显示广播地址信息。与社区保持一致。 | 1：显示广播地址信息（默认值） |
   
**定制 TCP 重传策略**
HCE的TCP报文重传遵循指数退避原则，在弱网场景下丢包率较高，时延较高。因此新增通过编程接口定制TCP重传策略的能力，包括定制线性退避次数、最大重传次数、最大重传间隔时间，以优化弱网场景的丢包率和时延。
表26定制 TCP 重传策略开关 
| 参数                                          | 描述                   | 取值                                         |
|:---|:---|:---|
| **net.ipv4.tcp_sock_retrans_policy_custom** | 用于控制定制TCP重传策略功能是否开启。 | 0：关闭（默认值） 1：开启 |
   
**TCP delay ack功能配置**
在TCP通信中，接收端收到数据包后，通常会发送确认应答（ACK）。如果每收到一个包都立刻发ACK，有时会造成大量小包流量，浪费带宽。Delay ACK机制就是让ACK延迟一会儿发送，把确认和响应数据捎带一起，或者一次确认多个包。此为默认功能，可通过此参数关闭以使ACK不等待立刻回复。
表27TCP delay ack功能配置 
| 参数                            | 描述                                                      | 取值                                                                                                  |
|:---|:---|:---|
| **net.ipv4.tcp_no_delay_ack** | 用于控制TCP ack快速传输是否开启。0：默认有TCP delay ACK。1：开启TCP ack快速传输。 | 取值0或1 0：默认有TCP delay ACK 1：开启TCP ack快速传输 |
   
**TCP time wait超时时间配置**
当 TCP 连接的一端发起主动断开（发送 FIN）并收到对方对其 FIN 的 ACK 后，还不能立即释放这个连接，而需进入一个等待状态，这就是 TIME_WAIT。在这一阶段，套接字依然占用本地端口。该参数可配置在TIME-WAIT状态的等待时间。
表28 
| 参数                          | 描述                           | 取值                                                                   |
|:---|:---|:---|
| **net.ipv4.tcp_tw_timeout** | 用于控制TCP TIME-WAIT超时时间，单位为毫秒。 | 默认值：60,000毫秒（60秒） 取值范围：\[1000, 600,000\] |
   
**IPv6 repath 拥塞换路**
云DCN网络存在丰富的多路径， 现有云DCN网络采用ECMP方式进行负荷分担来减少冲突。在动态突发和流大小不一致的情况下，依旧会出现负载不均和拥塞热点。
IPv6 Re-path方案通过端侧拥塞检测与切换路径来实现网络负载均衡，提升业务流吞吐，降低传输时延。发送端动态感知网络拥塞状态，评估是否需要进行路径切换，如果需要，则执行Re-path换路，调整到轻载路径，从而避免网络拥塞"热点"。
表29IPv6 repath 拥塞换路内核参数说明 
| 参数                                         | 描述                                 | 取值                                                  |
|:---|:---|:---|
| **net.ipv6.tcp_repath_cong_thresh**        | 空闲时指定的拥塞轮次数目，若连续拥塞轮次超过该值则执行换路      | 取值范围：\[1-8192\] 默认值：10 |
| **net.ipv6.tcp_repath_enabled**            | 特性开关（值为0表示特性不使能，值为1表示特性使能）         | 取值范围：{0,1} 默认值：0       |
| **net.ipv6.tcp_repath_idle_rehash_rounds** | 非空闲时指定的拥塞轮次数目，若连续拥塞轮次超过该值则执行换路     | 取值范围：\[3-31\] 默认值：3    |
| **net.ipv6.tcp_repath_rehash_rounds**      | 控制调整一个轮次内丢失报文所占的比例的阈值，超过阈值则判断本轮次拥塞 | 取值范围：\[3-31\] 默认值：3    |
| **net.ipv6.tcp_repath_times_limit**        | 每秒钟允许的最大换路次数                       | 取值范围：\[1-10\] 默认值：2    |
   
**网络PPS性能调优参数**
当大规格虚拟机（例如192U的虚机）采用HCE 5.10内核时，在高并发（并发数大于8）场景下，可以使用net.core.high_order_alloc_disable参数提升接收网络PPS性能。
表30网络PPS性能调优参数 
| 参数名称                              | 参数描述                                                                     | 临时开启方法                                                                                            | 永久开启方法                                                                                                                                                                                                                                                           |
|:---|:---|:---|:---|
| net.core.high_order_alloc_disable | 默认情况下网络内存尝试使用高阶页面，该参数开启后选择order0页面分配。 默认值：0 | 执行命令**sysctl -w net.core.high_order_alloc_disable=1** 重启后该参数将变回默认值。 | 1. 将**net.core.high_order_alloc_disable=1**配置到/etc/sysctl.conf文件。  2. 执行sysctl -p命令立即生效。   重启后该参数值不变。 |
   
![](https://support.huaweicloud.com/usermanual-hce/public_sys-resources/note_3.0-zh-cn.png)
该参数开启选择order0页面分配，建议tcp、udp业务高并发业务场景下(并发数大于8)开启此选项，对性能可能有较大提升，低并发场景不建议开启此参数，可能对性能产生劣化。
#### vm参数
以下是所属文件在/proc/sys/vm目录下的参数：
**周期性回收**
表31周期性回收参数说明 
| 参数                          | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 取值    |
|:---|:---|:---|
| **vm.cache_reclaim_s**      | **cache_reclaim_s** 用于设置周期性内存回收的回收间隔。当启用周期性内存回收时，它会每**cache_reclaim_s**秒回收一次内存。                                                                                                                                                                                                                                                                                                                                                                                                       | 默认值：0 |
| **vm.cache_reclaim_weight** | **cache_reclaim_weight**是每次周期性回收中的回收因子。当启用周期性内存回收时，每次回收的回收量可以通过以下公式计算： ``` reclaim_amount = cache_reclaim_weight * SWAP_CLUSTER_MAX * nr_cpus_node(nid) ``` - SWAP_CLUSTER_MAX在 include/linux/swap.h中定义。  - nr_cpus_node用于获取节点nid上的CPU数量。   内存回收使用工作队列机制，如果内存回收任务耗时较长，会阻塞后续工作的执行，从而可能影响时间敏感的工作。 | 默认值：1 |
| **vm.cache_reclaim_enable** | **cache_reclaim_enable**用于启用或禁用周期性内存回收功能。                                                                                                                                                                                                                                                                                                                                                                                                                                             | 默认值：1 |
   
**页面缓存上限**
表32cache_limit_mbytes参数说明 
| 参数                        | 描述                                                                 | 取值    |
|:---|:---|:---|
| **vm.cache_limit_mbytes** | **cache_limit_mbytes**用于设置页面缓存的上限（以兆字节为单位）。如果页面缓存超过此限制，将会定期回收页面缓存。 | 默认值：0 |
   
**最大批处理大小和高水位线**
表33percpu_max_batchsize参数说明 
| 参数                          | 描述                              | 取值                                                                                                                                                                                                                                                                                                                                      |
|:---|:---|:---|
| **vm.percpu_max_batchsize** | 此参数用于设置每个区域中每个CPU的最大批处理大小和高水位线。 | - 默认值设置为 (64 \* 1024) / PAGE_SIZE。  - 最大值限制为 (512 \* 1024) / PAGE_SIZE。  - 最小值限制为 (64 \* 1024) / PAGE_SIZE。   |
   
**页面最大比例**
表34percpu_pagelist_fraction参数说明 
| 参数                              | 描述                                                                                                                                                                                                                                                                                                                                                                                                   | 取值    |
|:---|:---|:---|
| **vm.percpu_pagelist_fraction** | 此参数定义了每个区域中为每个CPU页面列表分配的页面的最大比例（高水位标记为pcp-\>high）。 此值的最小限制为8，这意味着在任何单个per_cpu_pagelist中，不允许分配超过每个区域1/8的页面。此条目仅会影响热的每个CPU 页面列表。用户可以指定一个数字，例如100，以便为每个CPU页面列表分配每个区域的1/100。 每个CPU页面列表的批处理值也会因此更新，设置为 pcp-\>high/4 。批处理的上限为 (PAGE_SHIFT \* 8) 。 初始值为零。内核在启动时不会使用此值来设置每个CPU页面列表的高水位线。如果用户将0写入此sysctl，它将恢复到默认行为。 | 默认值：0 |
   
**内存优先级分级特性**
表35memcg_qos_enable参数说明 
| 参数                      | 描述                              | 取值    |
|:---|:---|:---|
| **vm.memcg_qos_enable** | 动态的开启内存优先级分级特性，0代表关闭特性，1代表开启特性。 | 默认值：0 |
   
**mmap加载的虚拟地址周期**
表36mmap_rnd_mask参数说明 
| 参数                   | 描述                                             | 取值       |
|:---|:---|:---|
| **vm.mmap_rnd_mask** | 该参数可以将mmap加载的虚拟地址任意几个bit置成0，以此控制mmap加载的虚拟地址周期。 | 默认值：null |
   
**大页管理**
表37大页管理参数说明 
| 参数                                      | 描述                                                                                                                                                                  | 取值    |
|:---|:---|:---|
| **vm.hugepage_mig_noalloc**             | move_pages将大页从一个NUMA NODE迁移到另一个NUMA NODE，当目标NUMA NODE上的可用大页数量不足时，根据参数**hugepage_mig_noalloc**的值决定是否申请新的大页。值为1时不会申请新的大页，而是直接迁移失败。值为0时会在目标NUMA NODE上申请新的大页，并释放被迁移的大页。 | 默认值：0 |
| **vm.hugepage_nocache_copy**（仅适用于x86架构） | X86架构下，move_pages迁移大页到AEP对应的NUMA NODE时，根据参数**hugepage_nocache_copy**的值决定内存拷贝方式，值为1时会使用NT优化指令进行内存拷贝，值为0时会使用原生的mov指令进行内存拷贝。                                           | 默认值：0 |
| **vm.hugepage_pmem_allocall**           | 在AEP对应的NUMA NODE上申请大页时，根据参数**hugepage_pmem_allocall**的值决定是否对大页进行数量限制。值为0时允许转换为的大页数量受到内核水线的控制。值为1时允许将所有的可用内存都申请为大页。                                                  | 默认值：0 |
   
**vmemmap内存来源**
表38vmemmap_block_from_dram参数说明 
| 参数                             | 描述                                                                                                               | 取值    |
|:---|:---|:---|
| **vm.vmemmap_block_from_dram** | 在AEP的内存热插到系统NUMA NODE中时，根据参数**vmemmap_block_from_dram**的值决定从AEP上申请的vmemmap的内存的来源。值为1时会从DRAM中申请。值为0时正常从对应的AEP中申请。 | 默认值：0 |
   
**内存复用**
表39swap_madvised_only参数说明 
| 参数                        | 描述                                                      | 取值    |
|:---|:---|:---|
| **vm.swap_madvised_only** | 内存复用开关。参数**swap_madvised_only**值为1表示开启内存复用。值为0表示关闭内存复用。 | 默认值：0 |
   
**Qemu热替换**
表40enable_hotreplace参数说明 
| 参数                       | 描述                                                                                                                | 取值         |
|:---|:---|:---|
| **vm.enable_hotreplace** | 使能Qemu热替换能力，该功能支持在业务不中断的情况下快速升级Qemu版本，仅支持在HostOS系统热补丁升级场景使用，GuestOS场景不支持开启。 支持参数：0/1。 | 默认值：0（不使能） |
   
**释放主机缓存**
提供主动释放主机缓存的方法。slab allocation是一种内存管理机制， 专门用于缓存内核的数据对象，可以减少内存碎片提高系统性能。但随着进程的进行，slab可能会占用大量内存。启动drop_slabs释放缓存以达到增加主机可用内存的目的。
表41释放主机缓存参数说明 
| 参数                      | 描述                                                       | 取值                                                 |
|:---|:---|:---|
| **vm.drop_slabs**       | 若值为0表示未清理；若值为1表示启动清理流程。                                  | 取值范围：{0,1} 默认值：1       |
| **vm.drop_slabs_limit** | 表示优先级，值越大则表示更少比例的slabs缓存被清理。这是为了避免清理过多slabs而长时间占用CPU的情况。 | 取值范围：\[0, 12\]内的整数 默认值：7 |
   
**zram 内存压缩支持 cgroup 隔离**
本特性实现memcg与zram设备之间的绑定，支持指定memcg使用指定zram设备，并且zram设备使用的内存从该组的容器的内存中获取。
表42特性开关 
| 参数                           | 描述                                                                                                                                | 取值                                               |
|:---|:---|:---|
| **vm.memcg_swap_qos_enable** | 可读可写接口，默认为0关闭特性，向该接口输入1时将所有memcg的memory.swapfile设置为all，向该接口输入2时会将所有memcg的memory.swapfile设置为none。 当接口值为1或2时，若要修改接口的值，需要先将接口置0后再操作。 | 取值范围：{0，1，2} 默认值：0 |
   
**支持关闭全局 swap，强制匿名页不换出**
社区内核的全局swappiness配置为0时，并不代表一定不会换出匿名页。现提供swap_extension开关，用于关闭全局swap，强制匿名页不换出。
表43vm.swap_extension参数说明 
| 参数                    | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 取值                                                  |
|:---|:---|:---|
| **vm.swap_extension** | 用于关闭全局swap，强制匿名页不换出。 - swap_extension设置为1：关闭全局匿名页回收。全局匿名页默认不会被换出，除非进程主动调用madvise使用swap空间。cgroup内的进程匿名页交换不受影响。  - swap_extension设置为2：会在swap空间用完时清空swapcache，此功能与本特性无关。  - swap_extension设置为3：会同时使能功能1和功能2。   | 取值范围：{0，1，2，3} 默认值：0 |
   
**内核水线参数**
表44vm.lowmem_reserve_dma_ratio参数说明 
| 参数                              | 描述                                                                                                                                                                                                                                                                                                             | 取值    |
|:---|:---|:---|
| **vm.lowmem_reserve_dma_ratio** | 如果没有通过GFP标志位做出内存分配的强制匹配限定（如GFP_DMA等），那么当ZONE_HIGHMEM中内存不足时，可从更低位的ZONE_NORMAL中分配，ZONE_NORMAL中内存不足时，可从更低位的ZONE_DMA32中分配。这里的"低位"是指zone的物理内存的地址更小。这里所谓的"不足"就是当前zone的空余内存低于了本次内存分配的请求大小。除了最高位的ZONE_HIGHMEM，其他zones都会为比它更高位的zone单独划分出一片内存作为预留，这部分内存被称作"lowmem reserve"。当前默认值为"DMA/normal/HighMem: 256 320" ，单位是page。 | 默认值：0 |
   
**oom事件管理**
在某些情况下，我们希望oom在发生的时候不要杀死进程，能够通知黑匣子上报事件，能够触发crash来定位问题。
表45vm.enable_oom_killer参数说明 
| 参数                                  | 描述                   | 取值    |
|:---|:---|:---|
| **vm.enable_oom_killer**（仅适用于ARM架构） | 值为1时开启该特性，值为0时关闭此特性。 | 默认值：0 |
   
**内存 UCE 故障采集上报**
使能内存UCE故障采集上报服务后，在内存UCE故障发生时，系统将会采集相关故障信息，将其作为告警事件发送给告警转发服务，之后订阅内存UCE故障事件的程序可接收到此告警进行自定义处理，从而提供内存UCE故障信息实时感知能力。
表46内核内存UCE故障上报能力开关 
| 参数                             | 描述                             | 取值    |
|:---|:---|:---|
| **vm.uce_handle_event_enable** | 是否使能内核内存UCE故障上报，0表示不使能，非0表示使能。 | 默认值：0 |
   
**僵尸memcg回收**
表47僵尸memcg回收参数说明 
| 参数                              | 描述                                                                  | 取值                                                           |
|:---|:---|:---|
| **vm.memcg_recycle_enable**     | 后台回收僵尸memcg功能开关，参数 值为1表示开启，值为0表示关闭。 | 默认值：1                                                        |
| **vm.memcg_recycle_threshold**  | 僵尸memcg阈值，当僵尸memcg数量超过阈值时，开始回收。                                     | 取值范围：\[200 - INTMAX\] 默认值：512 |
| **vm.memcg_recycle_pages_scan** | 控制每个周期内回收的页面数，该参数决定了回收速率，回收太快的话会造成CPU使用率升高。                         | 取值范围：\[0 - LONGMAX\] 默认值：32768  |
   
![](https://support.huaweicloud.com/usermanual-hce/public_sys-resources/note_3.0-zh-cn.png)
1. 开启后台回收僵尸memcg功能会有一定的CPU资源消耗，根据实际情况来调整开关、阈值和回收速度。
2. tmpfs等内存文件系统的page cache无法回收，因此无法回收对应的僵尸memcg。
 
#### mce参数
以下是所属文件在/proc/sys/mce目录下的参数：
**UCE机制增强**
表48mce_kernel_recover参数说明 
| 参数                                         | 描述                                                                                                                                                           | 取值    |
|:---|:---|:---|
| **mce.** **mce_kernel_recover**（仅适用于x86架构） | 内核UCE机制增强功能开关，值为1表示UCE机制增强功能处于使能状态。 可通过 ``` echo 0 > /proc/sys/mce/mce_kernel_recover ``` 关闭特性。 | 默认值：1 |
   
#### debug参数
以下是所属文件在/proc/sys/debug目录下的参数：
**系统异常通知**
当Linux内核发生Oops时，会先后进入到die流程及panic流程中，此时会调用其他模块注册到die通知链及panic通知链的回调函数，当回调函数中存在使得内核发生Oops的异常时，内核会再次进入Oops流程， 而后在Oops流程中再次调用该回调函数时，又产生Oops，这样便形成了嵌套的Oops，无法走出Oops流程，系统挂死。
为了增强系统可定位性，提高可靠性，引入系统异常通知链特性，在用户注册的 panic/die通知链中出现嵌套Oops异常时，打印错误日志并执行crash流程复位系统。
表49系统异常参数说明 
| 参数                           | 描述                   | 取值        |
|:---|:---|:---|
| **debug.nest_oops_enhance**  | panic通知链的嵌套Oops增强接口。 | 默认值：1（开启） |
| **debug.nest_panic_enhance** | die通知链的嵌套Oops增强接口。   | 默认值：1（开启） |
   
