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

本章为系统管理员提供了 Red Hat Enterprise Linux 7.7 随附的内核中的显著变化摘要。这些更改包括添加或更新的 proc 条目、sysctlsysfs 默认值、引导参数、内核配置选项或任何明显的行为变化。

新内核参数

usbcore.quirks = [USB]

此参数提供用于添加内置 usb core quirk 列表的 quirk 条目列表。

条目用逗号分开。每个条目的格式为 VendorID:ProductID:Flags

ID 是 4 位十六进制数,标记 是一组字母。每个字母都会改变内置的 quirk ; 如果当前被清除,则设置它,如果当前是设置的,则清除它。字母的含义如下:

  • a = USB_QUIRK_STRING_FETCH_255 (字符串描述符不能使用 255 字节读取获得);
  • b = USB_QUIRK_RESET_RESUME (设备无法正确恢复,因此重置它);
  • c = USB_QUIRK_NO_SET_INTF (device cannot handle Set-Interface requests);
  • d = USB_QUIRK_CONFIG_INTF_STRINGS (设备无法处理其配置或接口字符串)
  • e = USB_QUIRK_RESET (设备无法重置(如 morph 设备),请勿使用重置);
  • f = USB_QUIRK_HONOR_BNUMINTERFACES (device 具有比 bNumInterfaces 数更多的接口描述,且无法处理与这些接口的通信 ;
  • g = USB_QUIRK_DELAY_INIT (在读取设备描述符后,设备在初始化过程中需要暂停)
  • h = USB_QUIRK_LINEAR_UFRAME_INTR_BINTERVAL (用于高速度和超级中断端点,USB 2.0 和 USB 3.0 spec 需要微帧(1 微框架 = 125 microseconds)的间隔,以 interval = 2 ^(bInterval-1))计算。具有此 quirk 的设备会因为计算结果而不是计算中使用的 exponent 变量报告其 bInterval
  • if = USB_QUIRK_DEVICE_QUALIFIER (设备无法处理 device_qualifier 描述符请求);
  • j = USB_QUIRK_IGNORE_REMOTE_WAKEUP (设备生成假的 wakeup, ignore remote wakeup 功能);
  • k = USB_QUIRK_NO_LPM (设备无法处理链路电源管理);
  • l = USB_QUIRK_LINEAR_FRAME_INTR_BINTERVAL (Device 将 bInterval 报告为线性帧而不是 USB 2.0 计算);
  • m = USB_QUIRK_DISCONNECT_SUSPEND (在挂起前需要断开连接,以防止错误的唤醒)
  • n = USB_QUIRK_DELAY_CTRL_MSG (Device should a pause after every control message);

    示例条目:

    quirks=0781:5580:bk,0a5c:5834:gij
ppc_tm = [PPC]

禁用硬件交易内存.

格式:{"off"}

cgroup.memory = [KNL]

将选项传递给 cgroup 内存控制器。

格式:<string>

nokmem IANA- 使用这个选项禁用内核内存核算。

mds = [X86,INTEL]

控制 Micro-architectural Data Sampling(MDS)漏洞的缓解方案。

某些 CPU 容易受到 CPU 内部缓冲区的攻击,在某些情况下可能会把信息转发到泄漏。

在存在安全漏洞的处理器中,缓存侧频道攻击可以利用预测的数据转发,访问到应该无法直接访问到的数据。

这些选项是:

  • full - 对存在安全漏洞的 CPU 启用 MDS 缓解方案。
  • full,nosmt - 在存在安全漏洞的 CPU 上启用 MDS 缓解并禁用 Simultaneous 多线程(SMT)。
  • off - 无条件禁用 MDS 缓解方案。

    不指定这个选项等同于 mds=full

mitigations = [X86,PPC,S390]

控制 CPU 漏洞的可选缓解方案。这是一组策展的、架构独立的选项,每个选项都是现有的特定架构选项的聚合。

这些选项是:

  • off - 禁用所有可选 CPU 缓解方案。这会提高系统性能,但可能会使用户暴露一些 CPU 漏洞。

    等同于:

    • nopti [X86,PPC]
    • nospectre_v1 [PPC]
    • nobp=0 [S390]
    • nospectre_v2 [X86,PPC,S390]
    • spec_store_bypass_disable=off [X86,PPC]
    • l1tf=off [X86]
    • mds=off [X86]
  • auto (默认)- 缓解所有 CPU 漏洞,但启用 Simultaneous 多线程(SMT),即使它存在安全漏洞。这适用于不希望在内核升级过程中禁用 SMT,或者有其他方法避免 SMT 攻击的用户。

    等同于:

    • (默认行为)
  • auto,nosmt - 缓解所有 CPU 漏洞,如果需要,禁用 Simultaneous 多线程(SMT)。这适用于需要实施所有缓解方案的用户,即使这意味着会丢失 SMT 的功能。

    等同于:

    • l1tf=flush,nosmt [X86]
    • mds=full,nosmt [X86]
watchdog_thresh = [KNL]

以秒为单位设置硬锁定检测器停滞持续时间阈值。

软锁定检测器阈值被设置为值的两倍。

值 0 可禁用两个锁定检测器。默认值为 10 秒。

novmcoredd [KNL,KDUMP]

禁用设备转储。设备转储允许驱动程序将转储数据附加到 vmcore,以便您可以收集驱动程序指定的调试信息。

驱动程序可以在没有任何限制的情况下附加数据,此数据存储在内存中,因此可能会产生大量内存压力。

禁用设备转储可帮助保存内存,但驱动程序调试数据将不再可用。

这个参数仅在设置了 CONFIG_PROC_VMCORE_DEVICE_DUMP 时可用。

更新的内核参数

resource_alignment

指定对齐和设备,以重新分配对应的内存资源。

格式:

  • [<order of align>@][<domain>:]<bus>:<slot>.<func>[; …​]
  • [<order of align>@]pci:<vendor>:<device>\[:<subvendor>:<subdevice>][; …​]

如果没有指定 <AGE of align >,PAGE_SIZE 将用作对齐。如果需要扩展资源窗口,可以指定 PCI-PCI 网桥。

irqaffinity = [SMP]

设置默认的 irq 关联性掩码。

格式:

  • <CPU number>,…​,<cpu number>
  • <cpu number>-<cpu number>
  • 驱动程序(必须为正范围,以升序表示)
  • mixture & lt;cpu number>,…​,<cpu number>-<cpu number>

    驱动程序将使用驱动程序的关联掩码进行默认的中断分配,而不是将它们全部放在 CPU0 上。

这些选项是:

  • auto (默认)- 缓解所有 CPU 漏洞,但启用 Simultaneous 多线程(SMT),即使它存在安全漏洞。这适用于不希望在内核升级过程中禁用 SMT,或者有其他方法避免 SMT 攻击的用户。

    等效于:(默认行为)

  • auto,nosmt - 缓解所有 CPU 漏洞,如果需要,禁用 Simultaneous 多线程(SMT)。这适用于需要实施所有缓解方案的用户,即使这意味着会丢失 SMT 的功能。

    等同于:

    • l1tf=flush,nosmt [X86]
    • mds=full,nosmt [X86]

新的 /proc/sys/net/core 参数

bpf_jit_kallsyms

如果启用了时间编译器中的 Berkeley Packet Filter Just,则编译的镜像对于内核来说未知的地址。这意味着它们既不会显示在 trace 中,也不会显示在 /proc/kallsyms 文件中。这启用了这些地址的导出,可用于调试/追踪。如果启用了 bpf_jit_harden 参数,则禁用此功能。

可能的值有:

0 - 禁用 Just in Time (JIT) kallsyms 导出(默认值)。

1 - 仅为特权用户启用 Just in Time (JIT) kallsyms 导出。

更新了 /proc/sys/fs 参数

dentry-state

dentry 是动态分配和取消分配的。

linux/include/linux/dcache.h 中:

struct dentry_stat_t dentry_stat {
        int nr_dentry;
        int nr_unused;
        int age_limit;         (age in seconds)
        int want_pages;        (pages requested by system)
        int nr_negative;       (# of unused negative dentries)
        int dummy;             (Reserved for future use)
};

nr_dentry 数显示分配的 dentry 的总数(活跃 + 未使用)。

nr_unused 数显示没有被主动使用的 dentry 数,但被保存到最近使用的(LRU)列表中,以便以后重复使用。

age_limit 号是当内存短时可以回收 dcache 条目的年龄(以秒为单位),在调用 shrink _dcache_pages () 函数且 dcache 尚未修剪时,可以重新声明 dcache 条目。

nr_negative number 显示未使用的 dentry 数,它们也是不映射到任何文件的负 dentry。相反,它们有助于加快拒绝用户提供的非现有文件。