第 3 章 对外部内核参数的重要更改
本章为系统管理员提供了 Red Hat Enterprise Linux 7.7 随附的内核中的显著变化摘要。这些更改包括添加或更新的 proc
条目、sysctl
和 sysfs
默认值、引导参数、内核配置选项或任何明显的行为变化。
新内核参数
- 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
-
a =
- 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
() 函数且 dcachedcache
条目。nr_negative
number 显示未使用的 dentry 数,它们也是不映射到任何文件的负 dentry。相反,它们有助于加快拒绝用户提供的非现有文件。