第 5 章 对外部内核参数的重要更改

本章为系统管理员提供了与 Red Hat Enterprise Linux 9.2 一起发布的内核中的显著变化的总结。这些更改包括添加或更新的 proc 条目、sysctlsysfs 默认值、引导参数、内核配置选项或者任何可见的行为更改。

新内核参数

nomodeset

使用这个内核参数,您可以禁用内核模式设置。DRM 驱动程序将不执行显示模式更改或加速渲染。如果这是通过固件或引导装载程序进行了设置,则只有系统帧缓冲才可用。

nomodeset 可用作回退,或测试和调试。

printk.console_no_auto_verbose

使用这个内核参数,您可以禁用对 oops、panic 或 lockdep-detected 问题的控制台日志级别(仅在 lock debug 是 on 时)。除了在串行控制台上设置低波特率的例外,将此参数设为 0 以提供更多调试信息。

  • 格式:<bool>
  • 默认为 0 (auto_verbose 被启用)
rcupdate.rcu_exp_cpu_stall_timeout=[KNL]

使用这个内核参数,您可以为加速的 RCU CPU 失速警告信息设置超时。该值以毫秒为单位,允许的最大值为 21000 毫秒。

请注意,这个值被调整为拱形计时器刻度分辨率。把它设为零会导致使用 rcupdate.rcu_cpu_stall_timeout 的值(在从秒转换为毫秒后)。

rcupdate.rcu_task_stall_info=[KNL]

使用这个参数,您可以为 RCU 任务停滞信息性消息设置初始超时(以jiffies为单位),对于那些没有足够耐心等待 10 分钟的情况,它会给出一些问题的指示。信息性消息仅在给定宽限期的失速警告消息前打印。使用值小于或等于零的值禁用。

  • 默认值为 10 秒。
  • 值的更改不会生效,直到下一个宽限期开始。
rcupdate.rcu_task_stall_info_mult=[KNL]

这个参数是给定 RCU 任务宽限期内连续的 RCU 任务停滞信息之间时间间隔的倍数。这个值被限制在 1 到 10(包括1 和 10)。

它默认值为 3 ,因此第一条信息性消息在进入宽限期10 秒后打印,第二条消息在 40 秒时打印,第三条消息在 160 秒时打印,然后 600 秒时的停滞警告将防止 640 秒时的第四条消息。

smp.csd_lock_timeout=[KNL]

使用这个参数,您可以指定 smp_call_function() 和 friends 将等待 CPU 释放 CSD 锁的时间周期(以毫秒为单位)。这在诊断涉及 CPU 长时间禁用中断的 bug 时很有用。

  • 默认值为 5,000 毫秒。
  • 设置 0 代表禁用此功能。
  • 使用 csdlock_debug- 内核参数可以更有效地禁用这个功能。
srcutree.big_cpu_lim=[KNL]

使用这个参数,您可以指定构成大型系统的 CPU 数量,以便 srcu_struct 结构应该立即分配一个 srcu_node 数组。

  • 默认值为 128
  • 仅在低顺序四位 srcutree.convert_to_big 等于 3 (在引导时决定)时生效。
srcutree.convert_to_big=[KNL]

使用这个参数,您可以指定在什么情况下 SRCU 树 srcu_struct 结构将转换为大的形式,即具有 rcu_node 树:

  • 0: Never。
  • 1:在 init_srcu_struct() 时间。
  • 2:当 rcutorture 决定时。
  • 3:在引导时(默认)决定。
  • 0x1X: 如果竞争激烈,则加上以上。

    任何一种情况,srcu_node 树都将根据实际的 CPU 数量(nr_cpu_ids),而不是编译时间 CONFIG_NR_CPUS 来决定。

srcutree.srcu_max_nodelay=[KNL]
使用这个参数,您可以指定每个 jiffy 的无延迟实例数量,SRCU 宽限期 worker 线程将使用零延迟重新调度。除了这个限制外,worker 线程将使用睡眠延迟为一个 jiffy 重新调度。
srcutree.srcu_max_nodelay_phase=[KNL]
使用这个参数,您可以指定每个宽限期阶段,读取器的非休眠轮询的数量。除这个限制外,对于宽限期阶段,在读取器的每个重新扫描之间,宽限期 worker 线程将使用一个 jiffy 的睡眠延迟重新调度。
srcutree.srcu_retry_check_delay=[KNL]
使用这个参数,您可以指定每个读取器的非休眠轮询之间非睡眠延迟的毫秒数。
srcutree.small_contention_lim=[KNL]

使用这个参数,您可以在启动 srcu_struct 结构到大格式的转换前容许每个 jiffy 的更新侧争用事件的数量。

注意

srcutree.convert_to_big 的值必须设置 0x10 位,以便发生基于竞争的转换。

更新的内核参数

crashkernel=size[KMG][@offset[KMG]]

[KNL] 使用 kexec,Linux 可以在 panic 时切换到崩溃内核。此参数为那个内核镜像保留物理内存区域 [offset, offset + size]。如果省略 @offset,则会自动选择合适的偏移量。

[KNL, X86-64, ARM64] 首先选择 4G 下的区域,并在未指定 @offset 时回退到 4G 以上的保留区域。

如需了解更多详细信息,请参阅 Documentation/admin-guide/kdump/kdump.rst

crashkernel=size[KMG],low
  • [KNL, X86-64, ARM64] 使用此参数,您可以为第二个内核指定 4G 以下的低范围。当 crashkernel=X,high 被传递时,这需要一些低内存,例如 swiotlb 需要至少 64M+32K 低内存,还需要足够的额外低内存以确保 32 位设备的 DMA 缓冲区不会耗尽。内核会尝试自动分配 4G 以下的默认内存大小。默认大小取决于平台。

    • x86: max(swiotlb_size_or_default() + 8MiB, 256MiB)
    • arm64: 128MiB

      0 :禁用低分配。

      crashkernel=X,high 未使用或保留的内存低于 4G 时,将忽略此参数。

  • [KNL, ARM64] 使用此参数,您可以为崩溃转储内核指定 DMA 区域中的低范围。

    当不使用 crashkernel=X,high 时,将忽略此参数。

deferred_probe_timeout=[KNL]

使用这个参数,您可以设置延迟探测的超时时间(以秒为单位),以放弃等待依赖项探测。只有已选择的特定依赖项(子系统或驱动程序)才会被忽略。

超时为 0 将在 initcall 结束时超时。如果超时没有过期,则选项将被每个成功的驱动程序注册重启。这个选项还会在重试后转储仍然在延迟探测列表中的设备。

driver_async_probe=[KNL]

使用这个参数,您可以列出异步探测到的驱动程序名称。*(星号)与所有驱动程序名称匹配。

  • 如果指定了 *,则列出的驱动程序名称的其余部分是那些不匹配 * 的名称。

    格式:<driver_name1>,<driver_name2>…​

hugetlb_cma=[HW,CMA]

使用这个参数,您可以指定用于分配 gigantic 巨页的 CMA 区域的大小。或使用节点格式,每个节点的 CMA 区域的大小。

格式:nn[KMGTPE] 或(节点格式)<node>:nn[KMGTPE][,<node>:nn[KMGTPE]]

保留给定大小的 CMA 区域,并使用 CMA 分配器分配 gigantic 巨页。如果启用了,则会跳过 gigantic 巨页的引导时分配。

hugepages=[HW]

使用这个参数,您可以指定要在启动时分配的 HugeTLB 页数。

  • 如果这跟在 hugepagesz 后面,则它指定要分配的 hugepagesz 的页数。
  • 如果这是命令行中的第一个 HugeTLB 参数,它会指定要为默认的巨页大小分配的页数。
  • 如果使用节点格式,可以指定每个节点要分配的页数。

    另请参阅 Documentation/admin-guide/mm/hugetlbpage.rst

    格式:<integer> 或(节点格式)<node>:<integer>[,<node>:<integer>]

hugetlb_free_vmemmap=[KNL]

此参数需要启用 CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP。允许大量 hugetlb 用户释放更多内存(每个 2MB hugetlb 页 7 * PAGE_SIZE)。

  • 格式:{ [oO][Nn]/Y/y/1 | [oO][Ff]/N/n/0 (default) }
  • [OO][Nn]/Y/y/1: 启用该功能
  • [OO][Ff]/N/n/0: 禁用该功能

    使用 CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON=y 构建,

    默认为 on

    注意

    这个参数与 memory_hotplug.memmap_on_memory 不兼容。如果启用了这两个参数,则 hugetlb_free_vmemmap 优先于 memory_hotplug.memmap_on_memory

ivrs_ioapic=[HW,X86-64]

此参数提供对 IVRS ACPI 表中提供的 IOAPIC-ID <-> DEVICE-ID 映射的覆盖。

默认情况下,PCI 段为 0, 可以省略。例如,

  • 要将 IOAPIC-ID 十进制 10 映射到 PCI 设备 00:14.0,请将参数写为:

    ivrs_ioapic[10]=00:14.0
  • 要将 IOAPIC-ID 十进制 10 映射到 PCI 段 0x1 和 PCI 设备 00:14.0,请将参数写为:

    ivrs_ioapic[10]=0001:00:14.0
ivrs_hpet=[HW,X86-64]

此参数提供对 IVRS ACPI 表中提供的 HPET-ID <-> DEVICE-ID 映射的覆盖。

默认情况下,PCI 段为 0, 可以省略。例如:

  • 要将 HPET-ID 十进制 0 映射到 PCI 设备 00:14.0,请将参数写为:

    ivrs_hpet[0]=00:14.0
  • 要将 HPET-ID 十进制 10 映射到 PCI 段 0x1 和 PCI 设备 00:14.0,请将参数写为:

    ivrs_ioapic[10]=0001:00:14.0
ivrs_acpihid=[HW,X86-64]

此参数提供对 IVRS ACPI 表中提供的 ACPI-HID:UID <-> DEVICE-ID 映射的覆盖。

例如,要将 UART-HID:UID AMD0020:0 映射到 PCI 段 0x1 和 PCI 设备 ID 00:14.5,请将参数写为:

ivrs_acpihid[0001:00:14.5]=AMD0020:0

默认情况下,PCI 段为 0, 可以省略。例如,对于 PCI 设备 00:14.5,将参数写为:

ivrs_acpihid[00:14.5]=AMD0020:0
kvm.eager_page_split=[KVM,X86]

使用这个参数,您可以控制 KVM 是否尝试在脏日志记录期间主动分割所有巨页。

eager 页分割通过消除写保护错误和 MMU 锁争用来减少对 vCPU 执行的中断,否则需要延迟分割巨页。很少执行写或只写入虚拟机内存小区域的虚拟机工作负载可能会受益于禁用 eager 页分割,从而使巨页仍被用于读。

eager 页分割的行为取决于是否启用或禁用了 KVM_DIRTY_LOG_INITIALLY_SET

  • 如果禁用了,则 memslot 中的所有巨页在对那个 memslot 启用了脏日志记录时被急切地分割。
  • 如果启用了,则在 KVM_CLEAR_DIRTY ioctl 期间将执行 eager 页分割,并且仅对正在清除的页执行 eager 页分割。

    只有 kvm.tdp_mmu=Y 才支持 eager 页分割。

    默认为 Y (on)。

kvm-arm.mode=[KVM,ARM]

使用这个参数,您可以选择 KVM/arm64 操作模式之一。

  • none :强制禁用 KVM。
  • nvhe:基于 nVHE 的标准模式,不支持受保护的客户机。
  • protected :基于 nVHE 的模式,对主机保持私有状态的客户机。

    默认为基于硬件支持的 VHE/nVHE

nosmep=[X86,PPC64s]

使用这个参数,您可以禁用 SMEP (Supervisor Mode Execution Prevention),即使处理器支持它。

格式:pci=option[,option…​] [PCI] various_PCI_subsystem_options

此处的某些选项针对特定的设备或一组设备(<pci_dev>)而操作。它们使用以下格式之一指定:

[<domain>:]<bus>:<dev>.<func>[/<dev>.<func>]*
pci:<vendor>:<device>[:<subvendor>:<subdevice>]
注意
  • 第一个格式指定 PCI 总线/设备/函数地址,如果插入了新硬件,如果主板固件更改了,或者因为其他内核参数导致的更改,该地址可能会改变。如果未指定域,它将被视为零。(可选),在基础地址(这对于重新编号问题有弹性)后,可以指定通过多个设备和函数地址的设备的路径。
  • 第二种格式使用配置空间中的 ID 选择设备,这可能与系统中的多个设备匹配。
  • earlydump:在内核更改任何内容之前转储 PCI 配置空间
  • off: [X86] 不探测 PCI 总线
  • bios: [X86-32] 强制使用 PCI BIOS,不直接访问硬件。如果您的机器有一个非标准 PCI 主机网桥,则使用此选项。
  • nobios: [X86-32] 不允许使用 PCI BIOS,只允许直接硬件访问方法。如果您在引导时遇到崩溃,并且怀疑是由 BIOS 引起的,请使用此选项。
  • conf1: [X86] Force use PCI Configuration Access Mechanism 1 (IO 端口 0xCF8 中的配置地址,IO 端口 0xCFC 中的数据,两者都是 32 位)。
  • conf2: [X86] 强制使用 PCI 配置访问机制 2 (IO 端口 0xCF8 是函数的一个 8 位端口,IO 端口 0xCFA,也是 8 位,设置总线号)。然后,通过端口 0xC000-0xCFFF 访问配置空间。

  • noaer: [PCIE] 如果启用了 PCIEAER 内核配置参数,则可以使用这个内核引导选项来禁用 PCIE 高级错误报告的使用。
  • nodomains: [PCI] 禁用对多个 PCI root 域的支持(也就是 ACPI-speak 中的 PCI 段)。
  • nommconf: [X86] 禁用对 PCI 配置使用 MMCONFIG
  • check_enable_amd_mmconf [X86]: 检查并启用对 AMD 系列 10h CPU 上 PCI 配置空间的正确配置的 MMIO 访问
  • nomsi: [MSI] 如果启用了 PCI_MSI 内核配置参数,则可以使用这个内核引导选项来禁用系统范围内 MSI 中断的使用。
  • noioapicquirk: [APIC] 禁用所有引导中断怪癖。保持引导 IRQ 启用的安全选项。这不一定是必需的。
  • ioapicreroute: [APIC] 将引导 IRQs 重新路由到无法禁用引导 IRQs 的桥接的主 IO-APIC。当系统屏蔽 IRQ 时,这修复了伪 IRQ 的源。
  • noioapicreroute [APIC] 禁用临时解决方案,该方案使用连接到无法禁用引导 IRQs 的芯片的 IRQ 的等效的 IRQ。与 ioapicreroute 相反。
  • biosirq: [X86-32] 使用 PCI BIOS 调用来获取中断路由表。众所周知,这些调用在一些机器上是有 bug 的,在使用时它们会挂起机器,但在其他计算机上,它是获取中断路由表的唯一方法。如果内核无法在主板上分配 IRQ 或发现辅助的 PCI 总线,请尝试这个选项。
  • ROM:[X86]将地址空间分配给扩展 ROM。请小心使用,因为某些设备在 ROM 和其他资源之间共享地址解码器。
  • norom: [X86] 不会将地址空间分配给没有 BIOS 分配地址范围的 ROM。
  • nobar: [X86] 不会将地址空间分配给未由 BIOS 分配的 BAR。
  • irqmask=0xMMMM: [X86] 设置允许自动分配给 PCI 设备的 IRQ 的位掩码。您可以以这种方式使内核排除 ISA 卡的 IRQ。
  • pirqaddr=0xAAAAA: [X86] 指定 PIRQ 表的物理地址(通常由 BIOS 生成)如果它在 F0000h-100000h 范围之外。
  • lastbus=N: [X86] 扫描到 bus #N 的所有总线:如果内核无法找到二级总线,并且您想要明确告知它们是什么,则这很有用。
  • assign-busses: [X86]总是自己分配所有的 PCI 总线号,覆盖固件可能已经完成的任何事情。
  • usepirqmask: [X86] 尊重存储在 BIOS $PIR 表中的可能的 IRQ 掩码。这在某些带有有问题的 BIOS 的系统上是需要的,特别是一些 HP Pavilion N5400 和 Omnibook XE3 笔记本。如果启用了 ACPI IRQ 路由,则这将无效。
  • noacpi: [X86]对 IRQ 路由或 PCI 扫描不使用 ACPI。
  • use_crs: [X86] 使用 ACPI 中的 PCI 主机网桥窗口信息。在 2008 或更高版本的 BIOS 上,这默认启用。如果您需要使用它,请报告一个 bug。
  • nocrs: [X86]忽略来自 ACPI 的 PCI 主机网桥窗口。如果您需要使用它,请报告一个 bug。
  • use_e820: [X86] 使用 E820 保留来排除 PCI 主机网桥窗口的部分。这是主机网桥 _CRS 方法中 BIOS 缺陷的一个临时解决方案。如果您需要使用它,请向 linux-pci@vger.kernel.org 报告一个 bug。
  • no_e820: [X86]忽略 PCI 主机网桥窗口的 E820 保留。这是现代硬件上的默认设置。如果您需要使用它,请向 linux-pci@vger.kernel.org 报告一个 bug。
  • routeirq :为所有 PCI 设备执行 IRQ 路由。这通常在 pci_enable_device() 中完成,因此此选项对于不调用它的有问题的驱动程序是一个临时解决方案。
  • skip_isa_align: [X86] 不对齐 io 起始地址,因此可以处理更多 pci 卡
  • 注意:[X86] 不做任何早期类型 1 扫描。当读取某些设备的配置空间时,这可能会帮助机器检查某些坏掉的板子。但是,各种临时解决方案被禁用,一些 IOMMU 驱动程序将无法正常工作。
  • bfsort:将 PCI 设备按广度优先顺序排序。完成这个排序以获得与旧(⇐ 2.4)内核兼容的设备顺序。
  • nobfsort:不要将 PCI 设备按广度优先顺序排序。
  • pcie_bus_tune_off :禁用 PCIe MPS (Max Payload Size)调整,并使用 BIOS 配置的 MPS 默认值。
  • pcie_bus_safe :将每个设备的 MPS 设置为根复合体以下所有设备支持的最大值。
  • pcie_bus_perf:将设备 MPS 设置为基于其父总线的最大允许的 MPS。另外,将 MRRS (最大读请求大小)设置为最大支持的值(不大于设备或总线支持的 MPS)以获得最佳性能。
  • pcie_bus_peer2peer :将每个设备的 MPS 设置为 128B,保证每个设备都支持。此配置允许在任意对设备间点对点的 DMA,可能会以降低性能为代价。这也保证热添加的设备可以正常工作。
  • cbiosize=nn[KMG]:为 CardBus 网桥的 IO 窗口保留的固定总线空间的固定量。默认值为 256 字节
  • cbmemsize=nn[KMG]:为 CardBus 网桥的内存窗口保留的总线空间的固定量。默认值为 64MB
  • resource_alignment=

    • 格式:[<order of align>@]<pci_dev>[; …​]
    • 指定对齐和设备,以重新分配对应的内存资源。上面描述了如何指定设备。如果没有指定 <order of align> ,则 PAGE_SIZE 将用作对齐。如果需要扩展资源窗口,则可以指定 PCI-PCI 网桥。要指定设备的多个实例的对齐,可以指定 PCI 供应商、设备、子供应商和子设备,例如 12@pci:8086:9c22:103c:198f 用于 4096 字节对齐。
  • ecrc=:启用/禁用 PCIe ECRC (事务层端到端 CRC 检查)。

    • bios:使用 BIOS/固件设置。这是默认值。
    • off :关闭 ECRC
    • on: 打开 ECRC。
  • hpiosize=nn[KMG]:为热插拔网桥的 IO 窗口保留的总线空间的固定量。默认大小为 256 字节
  • hpmmiosize=nn[KMG]:为热插拔网桥的 MMIO 窗口保留的总线空间的固定量。默认大小为 2 MB
  • hpmmioprefsize=nn[KMG]:为热插拔网桥的 MMIO_PREF 窗口保留的总线空间的固定量。默认大小为 2 MB
  • hpmemsize=nn[KMG]:为热插拔网桥的 MMIO 和 MMIO_PREF 窗口保留的总线空间的固定量。默认大小为 2 MB
  • hpbussize=nn :为热插拔网桥下总线保留的额外总线号的最小数。默认值为 1
  • realloc=:如果 BIOS 所做的分配太小,无法容纳所有子设备所需的资源,则启用/禁用重新分配 PCI 网桥资源。

    • off :关掉 realloc
    • on: 打开 realloc
  • realloc: 与 realloc=on 相同
  • noari :不要使用 PCIe ARI。
  • noats: [PCIE, Intel-IOMMU, AMD-IOMMU] 不使用 PCIe ATS (和 IOMMU 设备 IOTLB)。
  • pcie_scan_all :扫描所有可能的 PCIe 设备。否则,我们只查找 PCIe 下游端口下的一个设备。
  • big_root_window :尝试向 AMD CPU 上的 PCIe 根联合体添加一个大型 64 位内存窗口。有些 GFX 硬件可以调整 BAR 的大小,以允许访问所有 VRAM。添加窗口有一点风险(可能与未报告的设备冲突),因此这会影响内核。
  • disable_acs_redir=<pci_dev>[; …​]: 指定一个或多个以分号分割的 PCI 设备(按上面指定的格式)。指定的每个设备都将强制关闭 PCI ACS 重定向功能,它允许通过网桥在设备之间进行 P2P 通信,而无需强制上游。注:这会删除设备间的隔离,并可能会将更多设备放在 IOMMU 组中。
  • force_floating: [S390] 强制使用浮动中断。
  • nomio: [S390] 不使用 MIO 指令。
  • norid: [S390] 忽略 RID 字段,并强制每个 PCI 功能使用一个 PCI 域
rcupdate.rcu_cpu_stall_timeout=[KNL]
为 RCU CPU stall 失速警告信息设置超时。该值以秒为单位,允许的最大值为 300 秒。
rcupdate.rcu_task_stall_timeout=[KNL]

使用这个参数,您可以为 RCU 任务失速警告信息设置超时(以 jiffies 为单位)。使用值小于或等于零的值禁用。

默认值为 10 分钟。

值的更改不会生效,直到下一个宽限期开始。

retbleed=[X86]

有了这个参数,您可以控制 RETBleed (使用返回说明)漏洞的的缓解(具有 Return 指令的任意规格代码执行)。

仅使用基于 AMD 的 UNRET 和 IBPB 缓解不会同级线程影响其他同级线程的预测。因此,STIBP 用于支持它的处理器,并缓解不支持它的处理器上的 SMT。

  • off - 不缓解
  • auto - 自动选择一个缓解
  • auto,nosmt - 自动选择一个缓解,如果需要整个缓解则禁用 SMT(只在 Zen1 和没有 STIBP 的旧 Zen1 上)。
  • IBPB - 在 AMD 上,也缓解基本块边界上的短投机窗口。安全、最高的 perf 影响。它还启用 STIBP (如果存在的话)。不适用于 Intel。
  • IBPB,nosmt - 上面的 ibpb 类似,但将在 STIBP 不可用时禁用 SMT。这是没有 STIBP 的系统的替代选择。
  • unret - 强制启用未经训练的返回 thunks,仅对基于 AMD f15h-f17h 的系统有效。
  • unret,nosmt - 与 unret 类似,但将在 STIBP 不可用时禁用 SMT。这是没有 STIBP 的系统的替代选择。

    根据 CPU,选择 auto 将在运行时选择缓解方法。

    不指定这个选项等同于 retbleed=auto

swiotlb=[ARM,IA-64,PPC,MIPS,X86]

格式:{ <int> [,<int>] | force | noforce }

  • <int> - I/O TLB slabs 数
  • <int> - 逗号后的第二个整数。自身带有锁的 swiotlb 区域号。将向上舍入为 2 的幂。
  • force - 强制使用 bounce 缓冲区,即使它们没有被内核自动使用
  • noforce - 永不使用 bounce 缓冲(用于调试)

新的 sysctl 参数

kernel.nmi_wd_lpm_factor (只适用于 PPC)

这个因素代表了在 LPM 过程中计算 NMI watchdog 超时时添加到 watchdog_thresh 的百分比。软锁定超时不会受到影响。使用此因素应用到 NMI watchdog 超时(仅在 nmi_watchdog 设为 1 时)。

  • 0 表示没有更改。
  • 默认值为 200,这意味着 NMI watchdog 被设为 30s (根据 watchdog_thresh 等于 10)。
net.core.txrehash

使用这个参数,当 SO_TXREHASH 选项设为 SOCK_TXREHASH_DEFAULT 时,您可以控制侦听套接字的默认哈希 rethink 行为(这没有被 setsockopt覆盖)。

  • 如果设为 1 (默认),则在侦听套接字上执行哈希 rethink。
  • 如果设为 0, 则不会执行哈希 rethink。
net.sctp.reconf_enable - BOOLEAN

借助此扩展,您可以启用或禁用 RFC6525 中指定的流重新配置功能的扩展。此扩展提供了"reset"流的功能,并包括 Outgoing/Incoming SSN ResetSSN/TSN ResetAdd Outgoing Streams 的参数。

  • 1:启用扩展。
  • 0:禁用扩展。
  • 默认为 0。
net.sctp.intl_enable - BOOLEAN

有了这个扩展,您可以启用或禁用 RFC8260 中指定的用户消息交错功能的扩展。此扩展允许在不同流上发送的用户消息的交错。启用此功能后,I-DATA 块将替换 DATA 块,以便在对等点也支持时携带用户消息。请注意,要使用这个功能,必须将这个选项设为 1,并将套接字选项 SCTP_FRAGMENT_INTERLEAVE 设为 2,将 SCTP_INTERLEAVING_SUPPORTED 设为 1

  • 1:启用扩展。
  • 0:禁用扩展。
  • 默认为 0。
net.sctp.ecn_enable - BOOLEAN

借助此扩展,您可以通过 SCTP 控制显式协调通知(ECN)的使用。与 TCP 一样,只有在 SCTP 连接的两端表示支持它时,才会使用 ECN。该功能在允许支持路由器在必须丢弃数据包之前发出拥塞信号,来避免由于拥塞而造成的损失方面很有用。

  • 1:启用 ecn。
  • 0: 禁用 ecn。
  • 默认为 1
vm.hugetlb_optimize_vmemmap

当配置 memory_hotplug.memmap_on_memory 内核参数或 struct 页( include/linux/mm_types.h 中定义的一个结构)的大小不是 2 的幂(不寻常的系统配置可能会导致这种情况)时,这个 knob 不可用。

您可以启用(设为 1)或禁用(设为 0)优化与每个 HugeTLB 页关联的 vmemmap 页的功能。

  • 如果启用了,则后续从 buddy 分配器分配的 HugeTLB 页的 vmemmap 页会被优化(每个 2MB HugeTLB 页 7 个页,每个 1GB HugeTLB 页 4095个页),而已经分配的 HugeTLB 页面不会被优化。当这些优化的 HugeTLB 页面从 HugeTLB 池中释放到伙伴分配器时,表示那个范围的 vmemmap 页需要再次重新映射,之前丢弃的 vmemmap 页需要再次重新定位。
  • 如果您的用例是 HugeTLB 页面被分配 imbangu (例如,不要使用 nr_hugepages 明确分配 HugeTLB 页面,但只设置 nr_overcommit_hugepages,这些过度承诺的 HugeTLB 页面会被分配 impromptu)而不是从 HugeTLB 池中拉取,您应该权衡节省内存的好处和在 HugeTLB 池和伙伴分配器之间分配或释放 HugeTLB 页的更多开销(比以前慢了约 2 倍)。请注意的另一个行为是,如果系统面临内存压力很大,则可能会阻止用户将 HugeTLB 页从 HugeTLB 池释放到伙伴分配器,因为 vmemmap 页的分配可能会失败,如果系统遇到这种情况,您不得不稍后重试。
  • 如果禁用了,则后续来自伙伴分配器的 HugeTLB 页分配的 vmemmap 页不会被优化,这意味着来自 buddy 分配器分配时间的额外开销会消失,而已优化的 HugeTLB 页不受影响。如果要确保没有优化的 HugeTLB 页,您可以首先将 nr_hugepages 设为 0 ,然后禁用它。请注意,将 0 写到 nr_hugepages 将使任何 在使用的 HugeTLB 页变为多余页。因此,这些多余页仍然会被优化,直到它们不再使用。在系统中没有优化的页之前,您需要等待这些多余页面被释放。
net.core.rps_default_mask
新创建的网络设备上使用的默认 RPS CPU 掩码。空掩码表示默认禁用 RPS。

更改了 sysctl 参数

kernel.numa_balancing

使用这个参数,您可以启用、禁用和配置基于 NUMA 内存平衡的自动页错误。内存自动移到经常访问它的节点。设置的值可以是 ORing 的结果:

= =================================
0 NUMA_BALANCING_DISABLED
1 NUMA_BALANCING_NORMAL
2 NUMA_BALANCING_MEMORY_TIERING
= =================================

NUMA_BALANCING_ ,以在不同 NUMA 节点间优化页放置,以减少远程访问。在 NUMA 机器上,如果远程内存被 CPU 访问,则存在性能损失。当启用此功能时,内核通过定期取消映射页并稍后捕获页错误来采样哪个任务线程正在访问内存。在页错误时,它会确定正在被访问的数据是否应迁移到本地内存节点。

NUMA_BALANCING_MEMORY_TIERING,以优化不同类型的内存(代表不同的 NUMA 节点)之间的页放置,以便将热页放在快速内存中。这也是根据未映射和页错误来实现的。

net.ipv6.route.max_size
现在,这已被 ipv6 弃用,因为垃圾回收管理缓存的路由条目。
net.sctp.sctp_wmem

之前,这个调整已被记录为没有任何效果。现在,只使用第一个值(min),默认值max 被忽略。

  • min :可被 SCTP 套接字使用的最小发送缓冲区大小。即使面临内存压力,也保证每个 SCTP 套接字(但不关联)。
  • 默认值为 4K