关于 /proc/sys/kernel/ 的文档¶
版权所有 (c) 1998, 1999, Rik van Riel <riel@nl.linux.org>
版权所有 (c) 2009, Shen Feng<shen@cn.fujitsu.com>
有关常规信息和法律声明,请参阅 关于 /proc/sys 的文档。
此文件包含 /proc/sys/kernel/
中 sysctl 文件的文档。
此目录中的文件可用于调整和监视 Linux 内核操作中的杂项和常规事项。由于某些文件可能用于破坏您的系统,因此建议在实际进行调整之前阅读文档和源代码。
目前,这些文件可能(取决于您的配置)显示在 /proc/sys/kernel
中
acct¶
highwater lowwater frequency
如果启用了 BSD 样式的进程记帐,这些值将控制其行为。如果日志所在的文件系统上的可用空间低于 lowwater
%,则记帐暂停。如果可用空间高于 highwater
%,则记帐恢复。frequency
确定我们检查可用空间量的频率(值以秒为单位)。默认值
4 2 30
也就是说,如果可用空间降至 2% 以下,则暂停记帐;如果增加到至少 4%,则恢复记帐;将关于可用空间量的信息视为有效 30 秒。
acpi_video_flags¶
请参阅 S3 恢复中的视频问题。这允许设置视频恢复模式,方式与 acpi_sleep
内核参数类似,通过组合以下值
1 |
s3_bios |
2 |
s3_mode |
4 |
s3_beep |
arch¶
机器硬件名称,与 uname -m
的输出相同(例如 x86_64
或 aarch64
)。
auto_msgmni¶
此变量无效,可能会在未来的内核版本中删除。读取它总是返回 0。直到 Linux 3.17,它才启用/禁用 msgmni 在添加/删除内存或创建/删除 IPC 命名空间时的自动重新计算。将“1”回显到此文件中启用 msgmni 自动重新计算。将“0”回显到此文件中禁用它。默认值为 1。
bootloader_type (仅 x86)¶
这给出了引导加载程序类型编号,如引导加载程序所示,左移 4 位,并与引导加载程序版本的低四位相或。这样编码的原因是,这过去与内核标头中的 type_of_loader
字段匹配;保留编码是为了向后兼容。也就是说,如果完整的引导加载程序类型编号为 0x15,并且完整的版本号为 0x234,则此文件将包含值 340 = 0x154。
有关其他信息,请参阅 Linux/x86 引导协议 中的 type_of_loader
和 ext_loader_type
字段。
bootloader_version (仅 x86)¶
完整的引导加载程序版本号。在上面的示例中,此文件将包含值 564 = 0x234。
有关其他信息,请参阅 Linux/x86 引导协议 中的 type_of_loader
和 ext_loader_ver
字段。
bpf_stats_enabled¶
控制内核是否应收集有关 BPF 程序的统计信息(运行总时间、运行次数...)。启用统计信息会导致每个程序运行时的性能略有下降。可以使用 bpftool
查看统计信息。
0 |
不收集统计信息(默认)。 |
1 |
收集统计信息。 |
cad_pid¶
这是在重新启动时将发出信号的 pid(特别是通过 Ctrl-Alt-Delete)。将不对应于正在运行的进程的值写入此文件将导致 -ESRCH
。
另请参阅 ctrl-alt-del。
cap_last_cap¶
正在运行的内核的最高有效能力。从内核导出 CAP_LAST_CAP
。
core_pattern¶
core_pattern
用于指定核心转储模式名称。
最大长度为 127 个字符;默认值为 “core”
core_pattern
用作输出文件名的模式模板;某些字符串模式(以“%”开头)将替换为其真实值。与
core_uses_pid
向后兼容如果
core_pattern
不包含 “%p”(默认不包含)并且设置了core_uses_pid
,则 .PID 将附加到文件名。corename 格式说明符
%<NUL>
“%” 被删除
%%
输出一个 “%”
%p
pid
%P
全局 pid(初始化 PID 命名空间)
%i
tid
%I
全局 tid(初始化 PID 命名空间)
%u
uid(在初始用户命名空间中)
%g
gid(在初始用户命名空间中)
%d
转储模式,匹配
PR_SET_DUMPABLE
和/proc/sys/fs/suid_dumpable
%s
信号编号
%t
转储的 UNIX 时间
%h
主机名
%e
可执行文件名(可能被缩短,可能被 prctl 等更改)
%f
可执行文件名
%E
可执行路径
%c
核心文件的最大大小,由资源限制 RLIMIT_CORE 决定
%C
任务在其上运行的 CPU
%<OTHER>
两者都被删除
如果模式的第一个字符是“|”,则内核会将模式的其余部分视为要运行的命令。核心转储将写入该程序的标准输入,而不是写入文件。
core_pipe_limit¶
此 sysctl 仅适用于 core_pattern 配置为将核心文件通过管道传递到用户空间助手时(当 core_pattern
的第一个字符为“|”时,请参见上文)。通过管道将核心收集到应用程序时,有时收集应用程序从其 /proc/pid
目录收集有关崩溃进程的数据很有用。为了安全地执行此操作,内核必须等待收集进程退出,以免过早地删除崩溃进程的 proc 文件。反过来,这会产生行为不当的用户空间收集进程可能仅通过永不退出来阻止崩溃进程的回收的可能性。此 sysctl 可以防止这种情况。它定义了可以并行通过管道传递到用户空间应用程序的并发崩溃进程的数量。如果超过此值,则通过内核日志记录超过该值的崩溃进程,并且跳过其核心。0 是一个特殊值,表示可以并行捕获无限数量的进程,但不会进行等待(即,不保证收集进程可以访问 /proc/<crashing pid>/
)。此值默认为 0。
core_sort_vma¶
默认情况下,核心转储按地址顺序写入 VMA。通过将 core_sort_vma
设置为 1,VMA 将从最小尺寸写入到最大尺寸。已知这至少会破坏 elfutils,但在处理包含更多有用调试细节的较小 VMA 的非常大(且被截断)的核心转储时,这可能很有用。
core_uses_pid¶
默认的核心转储文件名是“core”。通过将 core_uses_pid
设置为 1,核心转储文件名变为 core.PID。如果 core_pattern 不包含 “%p”(默认不包含)并且设置了 core_uses_pid
,则 .PID 将附加到文件名。
ctrl-alt-del¶
当此文件中的值为 0 时,ctrl-alt-del 被捕获并发送到 init(1)
程序以处理正常重启。但是,当该值 > 0 时,Linux 对 Vulcan Nerve Pinch (tm) 的反应将是立即重启,甚至不会同步其脏缓冲区。
- 注意
当程序(如 dosemu)的键盘处于“原始”模式时,ctrl-alt-del 会被程序拦截,然后才到达内核 tty 层,并且由程序决定如何处理它。
dmesg_restrict¶
此切换指示是否阻止非特权用户使用 dmesg(8)
查看来自内核日志缓冲区的消息。当 dmesg_restrict
设置为 0 时,没有限制。当 dmesg_restrict
设置为 1 时,用户必须具有 CAP_SYSLOG
才能使用 dmesg(8)
。
内核配置选项 CONFIG_SECURITY_DMESG_RESTRICT
设置 dmesg_restrict
的默认值。
domainname & hostname¶
这些文件可用于设置 NIS/YP 域名和您的计算机的主机名,方式与命令 domainname 和 hostname 完全相同,即:
# echo "darkstar" > /proc/sys/kernel/hostname
# echo "mydomain" > /proc/sys/kernel/domainname
与以下命令具有相同的效果
# hostname "darkstar"
# domainname "mydomain"
但是请注意,经典的 darkstar.frop.org 具有主机名 “darkstar” 和 DNS(Internet 域名服务器)域名 “frop.org”,不要与 NIS(网络信息服务)或 YP(黄页)域名混淆。这两个域名通常是不同的。有关详细讨论,请参见 hostname(1)
手册页。
firmware_config¶
请参阅 回退机制。
此目录中的条目允许控制固件加载程序助手回退
force_sysfs_fallback
,设置为 1 时,强制使用回退;ignore_sysfs_fallback
,设置为 1 时,忽略任何回退。
ftrace_dump_on_oops¶
确定是否应在 oops(或内核崩溃)上调用 ftrace_dump()
。这会将 ftrace 缓冲区的内容输出到控制台。这对于捕获导致崩溃的跟踪并将它们输出到串行控制台非常有用。
0 |
已禁用(默认)。 |
1 |
转储所有 CPU 的缓冲区。 |
2(orig_cpu) |
转储触发 oops 的 CPU 的缓冲区。 |
<instance> |
转储所有 CPU 上的特定实例缓冲区。 |
<instance>=2(orig_cpu) |
转储触发 oops 的 CPU 上的特定实例缓冲区。 |
还支持多个实例转储,实例之间用逗号分隔。如果还需要转储全局缓冲区,请首先为全局缓冲区指定转储模式(1/2/orig_cpu)。
因此,例如,要在所有 CPU 上转储 “foo” 和 “bar” 实例缓冲区,用户可以
echo "foo,bar" > /proc/sys/kernel/ftrace_dump_on_oops
要在所有 CPU 上转储全局缓冲区和 “foo” 实例缓冲区,以及在触发 oops 的 CPU 上转储 “bar” 实例缓冲区,用户可以
echo "1,foo,bar=2" > /proc/sys/kernel/ftrace_dump_on_oops
ftrace_enabled, stack_tracer_enabled¶
请参阅 ftrace - 函数跟踪器。
hardlockup_all_cpu_backtrace¶
此值控制硬锁死检测器在检测到硬锁死情况时是否收集更多调试信息的行为。如果启用,将启动特定于架构的所有 CPU 堆栈转储。
0 |
不执行任何操作。这是默认行为。 |
1 |
在检测到后,捕获更多调试信息。 |
hardlockup_panic¶
此参数可用于控制在检测到硬锁死时内核是否发生 panic。
0 |
在硬锁死时不发生 panic。 |
1 |
在硬锁死时发生 panic。 |
有关更多信息,请参见 软锁死检测器和硬锁死检测器(又名 nmi_watchdog)。也可以使用 nmi_watchdog 内核参数设置此项。
hotplug¶
热插拔策略代理的路径。默认值为 CONFIG_UEVENT_HELPER_PATH
,该值又默认为空字符串。
仅当启用 CONFIG_UEVENT_HELPER
时,此文件才存在。大多数现代系统仅依赖于基于 netlink 的 uevent 源,而不需要此项。
hung_task_all_cpu_backtrace¶
如果设置了此选项,则在检测到挂起的任务时,内核将向所有 CPU 发送 NMI 以转储其回溯。如果启用了 CONFIG_DETECT_HUNG_TASK 和 CONFIG_SMP,则会显示此文件。
0:检测到挂起的任务时,不会显示所有 CPU 的回溯。这是默认行为。
1:检测到挂起的任务时,将不可屏蔽地中断所有 CPU 并转储其回溯。
hung_task_panic¶
控制在检测到挂起的任务时内核的行为。如果启用了 CONFIG_DETECT_HUNG_TASK
,则会显示此文件。
0 |
继续操作。这是默认行为。 |
1 |
立即发生 panic。 |
hung_task_check_count¶
要检查的任务数的上限。如果启用了 CONFIG_DETECT_HUNG_TASK
,则会显示此文件。
hung_task_detect_count¶
指示自系统启动以来已检测为挂起的任务总数。
如果启用了 CONFIG_DETECT_HUNG_TASK
,则会显示此文件。
hung_task_timeout_secs¶
当处于 D 状态的任务未被调度超过此值时,报告警告。如果启用了 CONFIG_DETECT_HUNG_TASK
,则会显示此文件。
0 表示无限超时,不进行检查。
可以设置的值的范围为 {0:LONG_MAX
/HZ
}。
hung_task_check_interval_secs¶
挂起任务检查间隔。如果启用了挂起任务检查(请参见 hung_task_timeout_secs),则每 hung_task_check_interval_secs
秒执行一次检查。如果启用了 CONFIG_DETECT_HUNG_TASK
,则会显示此文件。
0(默认)表示使用 hung_task_timeout_secs
作为检查间隔。
可以设置的值的范围为 {0:LONG_MAX
/HZ
}。
hung_task_warnings¶
要报告的最大警告数。在检查间隔期间,如果检测到挂起的任务,则此值减 1。当此值达到 0 时,将不再报告警告。如果启用了 CONFIG_DETECT_HUNG_TASK
,则会显示此文件。
-1:报告无限数量的警告。
hyperv_record_panic_msg¶
控制是否应将 panic kmsg 数据报告给 Hyper-V。
0 |
不报告 panic kmsg 数据。 |
1 |
报告 panic kmsg 数据。这是默认行为。 |
ignore-unaligned-usertrap¶
在未对齐的访问导致陷阱的体系结构上,并且在支持此功能的体系结构上(CONFIG_SYSCTL_ARCH_UNALIGN_NO_WARN
;目前为 arc
、parisc
和 loongarch
),控制是否记录所有未对齐的陷阱。
0 |
记录所有未对齐的访问。 |
1 |
仅在进程首次陷入陷阱时发出警告。这是默认设置。 |
另请参见 unaligned-trap。
io_uring_disabled¶
阻止所有进程创建新的 io_uring 实例。启用此功能可缩小内核的攻击面。
0 |
所有进程都可以像往常一样创建 io_uring 实例。这是默认设置。 |
1 |
对于不在 io_uring_group 组中的非特权进程,禁用 io_uring 创建 (io_uring_setup() 将失败并显示 -EPERM)。仍然可以使用现有的 io_uring 实例。有关更多信息,请参见 io_uring_group 的文档。 |
2 |
禁用所有进程的 io_uring 创建。io_uring_setup() 始终失败并显示 -EPERM。仍然可以使用现有的 io_uring 实例。 |
io_uring_group¶
当 io_uring_disabled 设置为 1 时,进程必须具有特权 (CAP_SYS_ADMIN) 或属于 io_uring_group 组才能创建 io_uring 实例。如果 io_uring_group 设置为 -1(默认值),则只有具有 CAP_SYS_ADMIN 功能的进程才能创建 io_uring 实例。
kexec_load_disabled¶
一个切换值,指示 syscalls kexec_load
和 kexec_file_load
是否已被禁用。此值默认为 0(false:启用 kexec_*load
),但可以设置为 1(true:禁用 kexec_*load
)。一旦为 true,kexec 将不再可用,并且无法将切换设置回 false。这允许在禁用 syscall 之前加载 kexec 映像,从而允许系统设置(并在以后使用)一个映像而不被更改。通常与 modules_disabled sysctl 一起使用。
kexec_load_limit_panic¶
此参数指定使用崩溃映像调用 syscalls kexec_load
和 kexec_file_load
的次数限制。只能将其设置为比当前值更严格的值。
-1 |
对 kexec 的调用次数不受限制。这是默认设置。 |
N |
剩余的调用次数。 |
kexec_load_limit_reboot¶
与 kexec_load_limit_panic
类似的功能,但用于普通映像。
kptr_restrict¶
此切换指示是否通过 /proc
和其他接口限制公开内核地址。
当 kptr_restrict
设置为 0(默认值)时,地址在打印之前被哈希。(这等效于 %p。)
当 kptr_restrict
设置为 1 时,除非用户具有 CAP_SYSLOG
并且有效用户 ID 和组 ID 等于实际 ID,否则使用 %pK 格式说明符打印的内核指针将被替换为 0。这是因为 %pK 检查是在 read() 时而不是 open() 时完成的,因此如果在 open() 和 read() 之间提升了权限(例如,通过 setuid 二进制文件),则 %pK 不会将内核指针泄露给非特权用户。请注意,这只是一个临时解决方案。正确的长期解决方案是在 open() 时进行权限检查。如果将内核指针值泄露给非特权用户是一个问题,请考虑从使用 %pK 的文件中删除世界读取权限,并使用 dmesg_restrict 来防止在 dmesg(8)
中使用 %pK。
当 kptr_restrict
设置为 2 时,无论权限如何,使用 %pK 打印的内核指针都将被替换为 0。
modprobe¶
用于自动加载内核模块的 usermode 助手的完整路径,默认情况下为 CONFIG_MODPROBE_PATH
,该路径又默认为“/sbin/modprobe”。当内核请求模块时,将执行此二进制文件。例如,如果用户空间将未知的 文件系统类型传递给 mount(),则内核将通过执行此 usermode 助手自动请求相应的 文件系统模块。此 usermode 助手应将所需的模块插入内核中。
此 sysctl 仅影响模块自动加载。它对显式插入模块的能力没有影响。
此 sysctl 可用于调试模块加载请求
echo '#! /bin/sh' > /tmp/modprobe
echo 'echo "$@" >> /tmp/modprobe.log' >> /tmp/modprobe
echo 'exec /sbin/modprobe "$@"' >> /tmp/modprobe
chmod a+x /tmp/modprobe
echo /tmp/modprobe > /proc/sys/kernel/modprobe
或者,如果此 sysctl 设置为空字符串,则完全禁用模块自动加载。内核根本不会尝试执行 usermode 助手,也不会调用 kernel_module_request LSM 钩子。
如果在内核配置中设置了 CONFIG_STATIC_USERMODEHELPER=y,则配置的静态 usermode 助手将覆盖此 sysctl,但如上所述,空字符串仍然被接受以完全禁用模块自动加载。
modules_disabled¶
一个切换值,指示是否允许在其他模块化内核中加载模块。此切换默认为关闭 (0),但可以设置为 true (1)。一旦为 true,模块既不能加载也不能卸载,并且切换无法设置回 false。通常与 kexec_load_disabled 切换一起使用。
msgmax, msgmnb, and msgmni¶
msgmax
是 IPC 消息的最大大小(以字节为单位)。默认为 8192 (MSGMAX
)。
msgmnb
是 IPC 队列的最大大小(以字节为单位)。默认为 16384 (MSGMNB
)。
msgmni
是 IPC 队列的最大数量。默认为 32000 (MSGMNI
)。
所有这些参数都是按 ipc 命名空间设置的。POSIX 消息队列中的最大字节数受 RLIMIT_MSGQUEUE
限制。此限制在每个用户命名空间中按层次结构进行遵守。
msg_next_id, sem_next_id, and shm_next_id (System V IPC)¶
这三个切换允许为下一个分配的 IPC 对象指定所需的 ID:分别是消息、信号量或共享内存。
默认情况下,它们等于 -1,这意味着通用分配逻辑。可以设置的值的范围为 {0:INT_MAX
}。
- 注意
内核不保证新对象将具有所需的 ID。因此,如何处理具有“错误”ID 的对象取决于用户空间。
成功分配 IPC 对象后,具有非默认值的切换将被内核设置回 -1。如果 IPC 对象分配 syscall 失败,则该值是否保持未修改或重置为 -1 是未定义的。
ngroups_max¶
补充组的最大数量,_i.e._ setgroups
将接受的最大大小。从内核导出 NGROUPS_MAX
。
nmi_watchdog¶
此参数可用于控制 x86 系统上的 NMI 监视程序(即硬锁死检测器)。
0 |
禁用硬锁死检测器。 |
1 |
启用硬锁死检测器。 |
硬锁死检测器监视每个 CPU 是否能够响应定时器中断。该机制利用 CPU 性能计数器寄存器,这些寄存器被编程为在 CPU 繁忙时定期生成非屏蔽中断 (NMI)。因此,替代名称为“NMI 监视程序”。
如果内核作为 KVM 虚拟机中的访客运行,则默认情况下禁用 NMI 监视程序。可以通过添加以下内容来覆盖此默认值
nmi_watchdog=1
到访客内核命令行(请参见 内核的命令行参数)。
nmi_wd_lpm_factor (PPC only)¶
应用于 NMI 监视程序超时的因子(仅当 nmi_watchdog
设置为 1 时)。此因子表示在 LPM 期间计算 NMI 监视程序超时时添加到 watchdog_thresh
的百分比。软锁死超时不受影响。
值为 0 表示没有变化。默认值为 200,表示 NMI 监视程序设置为 30 秒(基于等于 10 的 watchdog_thresh
)。
numa_balancing¶
启用/禁用并配置基于自动页面错误的 NUMA 内存平衡。内存会自动移动到经常访问它的节点。要设置的值可以是 ORing 以下各项的结果
0 |
NUMA_BALANCING_DISABLED |
1 |
NUMA_BALANCING_NORMAL |
2 |
NUMA_BALANCING_MEMORY_TIERING |
或 NUMA_BALANCING_NORMAL 以优化不同 NUMA 节点之间的页面放置,以减少远程访问。在 NUMA 计算机上,如果 CPU 访问远程内存,则会产生性能损失。启用此功能后,内核会通过定期取消映射页面并在以后陷入页面错误来采样任务线程正在访问的内存。在发生页面错误时,将确定是否应将正在访问的数据迁移到本地内存节点。
页面的取消映射和陷入错误会产生额外的开销,理想情况下可以通过改进的内存局部性来抵消,但没有通用的保证。如果目标工作负载已绑定到 NUMA 节点,则应禁用此功能。
或 NUMA_BALANCING_MEMORY_TIERING 以优化不同类型内存(表示为不同的 NUMA 节点)之间的页面放置,以便将热页面放置在快速内存中。这也是基于取消映射和页面错误实现的。
numa_balancing_promote_rate_limit_MBps¶
不同内存类型之间过高的提升/降级吞吐量可能会损害应用程序延迟。这可用于限制提升吞吐量。每个节点的最大提升吞吐量(以 MB/秒为单位)将被限制为不超过设置的值。
一个经验法则是将其设置为小于 PMEM 节点写入带宽的 1/10。
oops_all_cpu_backtrace¶
如果设置了此选项,则当发生 oops 事件时,内核将向所有 CPU 发送 NMI 以转储其回溯。如果无法触发 panic(例如,为了保护正在运行的 VM)或者无法收集 kdump,则应将其用作最后的手段。如果启用了 CONFIG_SMP,则会显示此文件。
0:检测到 oops 时,不会显示所有 CPU 的回溯。这是默认行为。
1:检测到 oops 事件时,将不可屏蔽地中断所有 CPU 并转储其回溯。
oops_limit¶
在未设置 panic_on_oops
时,内核在发生多少次内核 oops 后应发生 panic。将其设置为 0 会禁用检查计数。将其设置为 1 的效果与设置 panic_on_oops=1
相同。默认值为 10000。
osrelease, ostype & version¶
# cat osrelease
2.1.88
# cat ostype
Linux
# cat version
#5 Wed Feb 25 21:49:24 MET 1998
文件 osrelease
和 ostype
应该足够清楚。version
需要更多的说明。 “#5”表示这是从该源代码库构建的第五个内核,其后面的日期表示内核构建的时间。调整这些值的唯一方法是重建内核 :-)
overflowgid & overflowuid¶
如果您的体系结构并非始终支持 32 位 UID(即 arm、i386、m68k、sh 和 sparc32),则如果实际 UID 或 GID 将超过 65535,则将向使用旧 16 位 UID/GID 系统调用的应用程序返回固定的 UID 和 GID。
这些 sysctl 允许您更改固定 UID 和 GID 的值。默认值为 65534。
panic¶
此文件中的值确定了内核在发生 panic 时的行为
如果为零,内核将永远循环;
如果为负数,内核将立即重新启动;
如果为正数,内核将在相应秒数后重新启动。
当您使用软件监视程序时,建议的设置为 60。
panic_on_io_nmi¶
控制 CPU 收到由 IO 错误引起的 NMI 时内核的行为。
0 |
尝试继续操作(默认)。 |
1 |
立即发生 panic。IO 错误触发了 NMI。这表明存在严重的系统状况,可能会导致 IO 数据损坏。与其继续,panic 可能是更好的选择。某些服务器在按下转储按钮时会发出这种 NMI,您可以使用此选项来获取崩溃转储。 |
panic_on_oops¶
控制在遇到 oops 或 BUG 时内核的行为。
0 |
尝试继续操作。 |
1 |
立即发生 panic。如果 panic sysctl 也为非零,则机器将重新启动。 |
panic_on_stackoverflow¶
控制在检测到内核、IRQ 和异常堆栈(用户堆栈除外)溢出时内核的行为。如果启用了 CONFIG_DEBUG_STACKOVERFLOW
,则会显示此文件。
0 |
尝试继续操作。 |
1 |
立即发生 panic。 |
panic_on_unrecovered_nmi¶
在内存或未知 NMI 上,默认的 Linux 行为是继续操作。对于许多环境(例如科学计算),最好将该框取出并处理错误,而不是传播未更正的奇偶校验/ECC 错误。
少数系统确实会由于奇怪的随机原因(例如电源管理)而生成 NMI,因此默认值为关闭。该 sysctl 的工作方式与该目录中已有的现有 panic 控制类似。
panic_on_warn¶
当设置为 1 时,在 WARN() 路径中调用 panic()
。这有助于避免在尝试在 WARN() 的位置进行 kdump 时重建内核。
0 |
仅 WARN(),默认行为。 |
1 |
打印 WARN() 位置后,调用 |
panic_print¶
在发生 panic 时打印系统信息的位掩码。用户可以选择以下位的组合
位 0 |
打印所有任务信息 |
位 1 |
打印系统内存信息 |
位 2 |
打印计时器信息 |
位 3 |
如果启用了 |
位 4 |
打印 ftrace 缓冲区 |
位 5 |
打印缓冲区中的所有 printk 消息 |
位 6 |
打印所有 CPU 回溯(如果架构中可用) |
位 7 |
仅打印处于不可中断(阻塞)状态的任务 |
因此,例如,要在发生 panic 时打印任务和内存信息,用户可以
echo 3 > /proc/sys/kernel/panic_print
panic_on_rcu_stall¶
当设置为 1 时,在 RCU 停顿检测消息之后调用 panic()
。这对于使用 vmcore 定义 RCU 停顿的根本原因很有用。
0 |
当发生 RCU 停顿时,不要 |
1 |
在打印 RCU 停顿消息后 |
max_rcu_stall_to_panic¶
当 panic_on_rcu_stall
设置为 1 时,此值确定 RCU 在调用 panic()
之前可以停顿的次数。
当 panic_on_rcu_stall
设置为 0 时,此值无效。
perf_cpu_time_max_percent¶
向内核提示允许使用多少 CPU 时间来处理 perf 采样事件。如果 perf 子系统被告知其样本超过此限制,它将降低其采样频率以尝试减少其 CPU 使用率。
一些 perf 采样发生在 NMI 中。如果这些样本出乎意料地花费太长时间执行,则 NMI 可能会彼此堆叠,以至于不允许执行任何其他操作。
0 |
禁用该机制。无论占用多少 CPU 时间,都不要监视或更正 perf 的采样率。 |
1-100 |
尝试将 perf 的采样率限制为此 CPU 百分比。注意:内核计算每个采样事件的“预期”长度。这里的 100 表示预期长度的 100%。即使将其设置为 100,如果超过此长度,您仍然可能会看到采样限制。如果您真的不在乎消耗多少 CPU,请设置为 0。 |
perf_event_paranoid¶
控制非特权用户(没有 CAP_PERFMON)对性能事件系统的使用。默认值为 2。
出于向后兼容的原因,对系统性能监控和可观察性的访问仍然对 CAP_SYS_ADMIN 特权进程开放,但不鼓励将 CAP_SYS_ADMIN 用于安全系统性能监控和可观察性操作,而应使用 CAP_PERFMON 用例。
-1 |
允许所有用户使用(几乎)所有事件。 在 perf_event_mlock_kb 之后忽略 mlock 限制,无需 |
>=0 |
禁止没有 禁止没有 |
>=1 |
禁止没有 |
>=2 |
禁止没有 |
perf_event_max_stack¶
控制为(attr.sample_type & PERF_SAMPLE_CALLCHAIN
)配置的事件复制的最大堆栈帧数,例如,当使用 'perf record -g
' 或 'perf trace --call-graph fp
'。
只有在没有启用调用链的事件在使用时才能执行此操作,否则写入此文件将返回 -EBUSY
。
默认值为 127。
perf_event_mlock_kb¶
控制每个 CPU 环形缓冲区的大小,该缓冲区不计入 mlock 限制。
默认值为 512 + 1 页
perf_event_max_contexts_per_stack¶
控制为(attr.sample_type & PERF_SAMPLE_CALLCHAIN
)配置的事件的最大堆栈帧上下文条目数,例如,当使用 'perf record -g
' 或 'perf trace --call-graph fp
'。
只有在没有启用调用链的事件在使用时才能执行此操作,否则写入此文件将返回 -EBUSY
。
默认值为 8。
perf_user_access (仅限 arm64 和 riscv)¶
控制用户空间访问以读取 perf 事件计数器。
arm64¶
默认值为 0(禁用访问)。
设置为 1 时,用户空间可以直接读取性能监视器计数器寄存器。
有关更多信息,请参见 Perf。
riscv¶
设置为 0 时,禁用用户空间访问。
默认值为 1,用户空间可以通过 perf 读取性能监视器计数器寄存器,任何没有 perf 干预的直接访问都将触发非法指令。
设置为 2 时,启用传统模式(用户空间只能直接访问 cycle 和 insret CSR)。请注意,此传统值已弃用,一旦所有用户空间应用程序都修复后将被删除。
请注意,时间 CSR 始终可以直接访问所有模式。
pid_max¶
PID 分配环绕值。当内核的下一个 PID 值达到此值时,它会环绕回最小 PID 值。不分配值大于或等于 pid_max
的 PID。
ns_last_pid¶
在当前(使用此 sysctl 的任务所在的)pid 命名空间中分配的最后一个 pid。在为 fork 上的下一个任务选择 pid 时,内核尝试从该数字开始分配。
powersave-nap (仅限 PPC)¶
如果设置,Linux-PPC 将使用省电的“nap”模式,否则将使用“doze”模式。
printk¶
printk 中的四个值表示:console_loglevel
、default_message_loglevel
、minimum_console_loglevel
和 default_console_loglevel
。
这些值在打印或记录错误消息时会影响 printk()
的行为。有关不同日志级别的更多信息,请参见 'man 2 syslog
'。
console_loglevel |
优先级高于此值的消息将被打印到控制台 |
default_message_loglevel |
没有明确优先级的消息将以该优先级打印 |
minimum_console_loglevel |
可以设置 console_loglevel 的最小值(最高值) |
default_console_loglevel |
console_loglevel 的默认值 |
printk_delay¶
以 printk_delay
毫秒为单位延迟每个 printk 消息
允许的值为 0 - 10000。
printk_ratelimit¶
一些警告消息受到速率限制。printk_ratelimit
指定这些消息之间的最短时间(以秒为单位)。默认值为 5 秒。
值为 0 将禁用速率限制。
printk_ratelimit_burst¶
虽然从长远来看,我们强制每 printk_ratelimit 秒一条消息,但我们允许一批消息通过。printk_ratelimit_burst
指定在速率限制启动之前我们可以发送的消息数。
默认值为 10 条消息。
printk_devkmsg¶
控制从用户空间到 /dev/kmsg
的日志记录
ratelimit |
默认,速率限制 |
on |
从用户空间到 /dev/kmsg 的无限日志记录 |
off |
禁用到 /dev/kmsg 的日志记录 |
内核命令行参数 printk.devkmsg=
覆盖此设置,并且是一次性设置,直到下次重新启动:一旦设置,就无法再通过此 sysctl 接口更改它。
pty¶
参见 Devpts 文件系统。
random¶
这是一个目录,包含以下条目
boot_id
:首次检索时生成的 UUID,此后保持不变;uuid
:每次检索时生成的 UUID(因此可用于随意生成 UUID);entropy_avail
:池的熵计数,以位为单位;poolsize
:熵池大小,以位为单位;urandom_min_reseed_secs
:已过时(用于确定 urandom 池重新播种之间的最小秒数)。此文件是可写的,出于兼容性目的,但写入它对任何 RNG 行为都没有影响;write_wakeup_threshold
:当熵计数降至此值以下时(以位数计),等待写入/dev/random
的进程将被唤醒。此文件是可写的,出于兼容性目的,但写入它对任何 RNG 行为都没有影响。
randomize_va_space¶
此选项可用于选择系统中使用的进程地址空间随机化的类型,适用于支持此功能的体系结构。
0 |
关闭进程地址空间随机化。对于无论如何都不支持此功能的体系结构以及使用“norandmaps”参数引导的内核,这是默认设置。 |
1 |
使 mmap 基址、堆栈和 VDSO 页面的地址随机化。除其他事项外,这意味着共享库将被加载到随机地址。此外,对于 PIE 链接的二进制文件,代码开始的位置是随机的。如果启用了 |
2 |
此外,启用堆随机化。如果禁用了 有一些旧的应用程序(例如 1996 年的一些旧版本的 libc.so.5)假定 brk 区域紧接在 code+bss 之后开始。当 brk 区域的开始是随机的时,这些应用程序会中断。但是,没有已知的非旧应用程序会以这种方式中断,因此对于大多数系统,选择完全随机化是安全的。 具有旧的和/或损坏的二进制文件的系统应配置为启用 |
real-root-dev¶
reboot-cmd (仅限 SPARC)¶
??? 这似乎是一种向 Sparc ROM/Flash 引导加载程序提供参数的方法。也许是告诉它重新启动后该怎么做。 ???
sched_energy_aware¶
启用/禁用能量感知调度 (EAS)。EAS 在可以运行的平台上自动启动(即,具有不对称 CPU 拓扑并具有可用能量模型的平台)。如果您的平台碰巧满足 EAS 的要求,但您不想使用它,请将此值更改为 0。在非 EAS 平台上,写入操作失败,读取不返回任何内容。
task_delayacct¶
启用/禁用任务延迟记帐(参见 延迟记帐。启用此功能会在调度程序中产生少量开销,但对于调试和性能调整很有用。某些工具(如 iotop)需要它。
sched_schedstats¶
启用/禁用调度程序统计信息。启用此功能会在调度程序中产生少量开销,但对于调试和性能调整很有用。
sched_util_clamp_min¶
允许的最大 *最小* 利用率。
默认值为 1024,这是最大可能值。
这意味着任何请求的 uclamp.min 值都不能大于 sched_util_clamp_min,即,它被限制在 [0:sched_util_clamp_min] 范围内。
sched_util_clamp_max¶
允许的最大 *最大* 利用率。
默认值为 1024,这是最大可能值。
这意味着任何请求的 uclamp.max 值都不能大于 sched_util_clamp_max,即,它被限制在 [0:sched_util_clamp_max] 范围内。
sched_util_clamp_min_rt_default¶
默认情况下,Linux 针对性能进行了调整。这意味着 RT 任务始终以最高频率和最强大的(最高容量)CPU 运行(在异构系统中)。
Uclamp 通过默认将所有 RT 任务的请求 uclamp.min 设置为 1024 来实现这一点,这有效地提升了任务以最高频率运行,并将它们偏向于在最大的 CPU 上运行。
此旋钮允许管理员在使用 uclamp 时更改默认行为。特别是在电池供电设备中,以最大容量和频率运行会增加能耗并缩短电池寿命。
此旋钮仅对用户尚未通过 sched_setattr() 系统调用修改其请求的 uclamp.min 值的 RT 任务有效。
此旋钮不会超出 sched_util_clamp_min 施加的范围约束(如上所述)。
例如,如果
sched_util_clamp_min_rt_default = 800 sched_util_clamp_min = 600
那么提升将被限制为 600,因为 800 超出了 [0:600] 的允许范围。例如,如果省电模式将通过修改 sched_util_clamp_min 暂时限制所有提升,则可能会发生这种情况。一旦取消此限制,请求的 sched_util_clamp_min_rt_default 将生效。
seccomp¶
sg-big-buff¶
此文件显示通用 SCSI (sg) 缓冲区的大小。您还不能对其进行调整,但您可以通过编辑 include/scsi/sg.h
并更改 SG_BIG_BUFF
的值,在编译时对其进行更改。
没有任何理由更改此值。如果您可以提出一个理由,您可能无论如何都知道自己在做什么:)
shmall¶
此参数设置可在 ipc 命名空间内使用的共享内存页面的总数。共享内存页面的计数分别针对每个 ipc 命名空间进行,并且不继承。因此,shmall
应该始终至少为 ceil(shmmax/PAGE_SIZE)
。
如果您不确定 Linux 系统上的默认 PAGE_SIZE
是多少,则可以运行以下命令
# getconf PAGE_SIZE
要减少或禁用分配共享内存的能力,您必须创建一个新的 ipc 命名空间,将此参数设置为所需的值,并禁止在当前用户命名空间或 cgroup 中创建新的 ipc 命名空间。
shmmax¶
此值可用于查询和设置可以创建的最大共享内存段大小的运行时限制。内核现在支持最大 1Gb 的共享内存段。此值的默认值为 SHMMAX
。
shmmni¶
此值确定共享内存段的最大数量。默认为 4096 (SHMMNI
)。
shm_rmid_forced¶
Linux 允许您设置资源限制,包括一个进程可以通过 setrlimit(2)
消耗多少内存。不幸的是,允许共享内存段存在而不与任何进程关联,因此可能不会计入任何资源限制。如果启用,共享内存段会在分离或进程终止后其附加计数变为零时自动销毁。它还将销毁已创建但从未附加到进程的段,并在进程退出时销毁。 IPC_RMID
留下的唯一用途是立即销毁一个未附加的段。当然,这会破坏事物的定义方式,因此某些应用程序可能会停止工作。请注意,除非您还配置了资源限制(特别是 RLIMIT_AS
和 RLIMIT_NPROC
),否则此功能对您没有任何好处。大多数系统不需要此功能。
请注意,如果您将此值从 0 更改为 1,则已经创建的没有用户且具有已终止的原始进程的段将被销毁。
sysctl_writes_strict¶
控制文件位置如何影响通过 /proc/sys
接口更新 sysctl 值的行为
-1
传统的每次写入 sysctl 值处理,没有 printk 警告。每个写入系统调用必须完全包含要写入的 sysctl 值,并且对同一 sysctl 文件描述符的多次写入将重写 sysctl 值,而与文件位置无关。
0
与上述行为相同,但当文件位置不是 0 时,会警告对 sysctl 文件描述符执行写入的进程。
1
(默认)在写入 sysctl 字符串时,尊重文件位置。多次写入将附加到 sysctl 值缓冲区。超过 sysctl 值缓冲区的最大长度的任何内容都将被忽略。对数字 sysctl 条目的写入必须始终位于文件位置 0,并且该值必须完全包含在写入系统调用中发送的缓冲区中。
softlockup_all_cpu_backtrace¶
此值控制软件锁死检测器线程在检测到软件锁死情况时是否收集更多调试信息的行为。如果启用,则将向每个 cpu 发出 NMI,并指示其捕获堆栈跟踪。
此功能仅适用于支持 NMI 的体系结构。
0 |
不执行任何操作。这是默认行为。 |
1 |
在检测到后,捕获更多调试信息。 |
softlockup_panic¶
此参数可用于控制内核在检测到软件锁死时是否 panic。
0 |
在软件锁死时不 panic。 |
1 |
在软件锁死时 panic。 |
也可以使用 softlockup_panic 内核参数设置此选项。
soft_watchdog¶
此参数可用于控制软件锁死检测器。
0 |
禁用软件锁死检测器。 |
1 |
启用软件锁死检测器。 |
软件锁死检测器监视 CPU,以查找占用 CPU 而不自愿重新调度的线程,从而阻止“migration/N”线程运行,导致看门狗工作无法执行。该机制取决于 CPU 响应计时器中断的能力,计时器中断是看门狗计时器函数将看门狗工作排队所必需的,否则 NMI 看门狗(如果启用)可以检测到硬件锁死情况。
split_lock_mitigate (仅限 x86)¶
在 x86 上,每个“分割锁”都会给整个系统带来性能损失。在较大的系统中,来自非特权用户的大量分割锁可能会导致对行为良好且可能更重要的用户的拒绝服务。
内核通过检测分割锁并施加惩罚来缓解这些不良用户:强制他们等待,并且一次只允许一个核心执行分割锁。
这些缓解措施可能会使那些糟糕的应用程序变得难以忍受的慢。设置 split_lock_mitigate=0 可能会恢复一些应用程序的性能,但也会增加系统受到来自 split lock 用户的拒绝服务攻击的风险。
0 |
禁用缓解模式 - 仅在内核日志中警告 split lock,并将系统暴露于来自 split lock 用户的拒绝服务攻击。 |
1 |
启用缓解模式(这是默认设置) - 通过有意的性能下降来惩罚 split lock 用户。 |
stack_erasing¶
此参数可用于控制在使用 CONFIG_GCC_PLUGIN_STACKLEAK
构建的内核中,系统调用结束时的内核栈擦除。
该擦除减少了内核栈泄漏错误可能泄露的信息,并阻止了一些未初始化的栈变量攻击。权衡之处在于性能影响:在单 CPU 系统上,内核编译速度会减慢 1%,其他系统和工作负载可能会有所不同。
0 |
内核栈擦除已禁用,STACKLEAK_METRICS 不会更新。 |
1 |
内核栈擦除已启用(默认),它在系统调用结束时返回到用户空间之前执行。 |
stop-a (仅限 SPARC)¶
控制 Stop-A
0 |
Stop-A 无效。 |
1 |
Stop-A 中断到 PROM(默认)。 |
Stop-A 在 panic 时始终启用,以便用户可以返回到启动 PROM。
sysrq¶
tainted¶
如果内核已被污染,则为非零值。数值可以进行 OR 运算。这些字母在 Oops 报告的“Tainted”行中可见。
1 |
(P) |
加载了专有模块 |
2 |
(F) |
模块被强制加载 |
4 |
(S) |
内核在超出规格的系统上运行 |
8 |
(R) |
模块被强制卸载 |
16 |
(M) |
处理器报告了机器检查异常 (MCE) |
32 |
(B) |
引用了错误的页面或某些意外的页面标志 |
64 |
(U) |
用户空间应用程序请求的污染 |
128 |
(D) |
内核最近崩溃,即发生了 OOPS 或 BUG |
256 |
(A) |
ACPI 表被用户覆盖 |
512 |
(W) |
内核发出警告 |
1024 |
(C) |
加载了 staging 驱动程序 |
2048 |
(I) |
应用了平台固件中的错误解决方法 |
4096 |
(O) |
加载了外部构建的(“树外”)模块 |
8192 |
(E) |
加载了未签名的模块 |
16384 |
(L) |
发生了软锁死 |
32768 |
(K) |
内核已被实时修补 |
65536 |
(X) |
辅助污染,由发行版定义和使用 |
131072 |
(T) |
内核是使用 struct randomization 插件构建的 |
有关更多信息,请参阅 受污染的内核。
- 注意
如果内核使用命令行选项
panic_on_taint=<bitmask>,nousertaint
启动,并且写入tainted
的任何 OR 运算后的值与 panic_on_taint 上声明的位掩码匹配,则对此 sysctl 接口的写入将失败并显示EINVAL
。 有关该特定内核命令行选项及其可选的nousertaint
开关的更多详细信息,请参阅 内核的命令行参数。
threads-max¶
此值控制可以使用 fork()
创建的最大线程数。
在初始化期间,内核设置此值,即使创建了最大数量的线程,线程结构也仅占用可用 RAM 页面的 一部分 (1/8)。
可以写入 threads-max
的最小值是 1。
可以写入 threads-max
的最大值由常量 FUTEX_TID_MASK
(0x3fffffff) 给出。
如果写入 threads-max
的值超出此范围,则会发生 EINVAL
错误。
timer_migration¶
当设置为非零值时,尝试将计时器从空闲 CPU 迁移出去,以允许它们在低功耗状态下停留更长时间。
默认设置为 (1)。
traceoff_on_warning¶
设置后,当命中 WARN()
时,禁用跟踪(请参阅 ftrace - 函数跟踪器)。
tracepoint_printk¶
当跟踪点被发送到 printk()
(由 tp_printk
引导参数启用)时,此条目提供运行时控制
echo 0 > /proc/sys/kernel/tracepoint_printk
将停止将跟踪点发送到 printk()
,并且
echo 1 > /proc/sys/kernel/tracepoint_printk
将再次将它们发送到 printk()
。
这仅在内核以启用 tp_printk
启动时才有效。
unaligned-trap¶
在未对齐访问导致陷阱的架构上,并且支持此功能(CONFIG_SYSCTL_ARCH_UNALIGN_ALLOW
;目前,arc
、parisc
和 loongarch
),控制是否捕获并模拟未对齐陷阱(而不是失败)。
0 |
不模拟未对齐的访问。 |
1 |
模拟未对齐的访问。 这是默认设置。 |
unknown_nmi_panic¶
此文件中的值会影响处理 NMI 的行为。 当该值为非零时,未知 NMI 会被捕获,然后发生 panic。 此时,内核调试信息会显示在控制台上。
大多数 IA32 服务器都有的 NMI 开关会触发未知的 NMI。 如果系统挂起,请尝试按下 NMI 开关。
unprivileged_bpf_disabled¶
将 1 写入此条目将禁用对 bpf()
的非特权调用; 禁用后,在没有 CAP_SYS_ADMIN
或 CAP_BPF
的情况下调用 bpf()
将返回 -EPERM
。 一旦设置为 1,就无法再从正在运行的内核中清除它。
将 2 写入此条目也会禁用对 bpf()
的非特权调用,但是,如果需要,管理员仍然可以通过将 0 或 1 写入此条目来稍后更改此设置。
如果内核配置中启用了 BPF_UNPRIV_DEFAULT_OFF
,则此条目将默认设置为 2 而不是 0。
0 |
已启用对 |
1 |
已禁用对 |
2 |
已禁用对 |
warn_limit¶
当未设置 panic_on_warn
时,内核应在多少次内核警告后 panic。 将此值设置为 0 会禁用检查警告计数。 将此值设置为 1 与设置 panic_on_warn=1
具有相同的效果。 默认值为 0。
watchdog¶
此参数可用于同时禁用或启用软锁死检测器和 NMI 监视程序(即硬锁死检测器)。
0 |
禁用两个锁死检测器。 |
1 |
启用两个锁死检测器。 |
也可以使用 soft_watchdog
和 nmi_watchdog
参数单独禁用或启用软锁死检测器和 NMI 监视程序。 如果读取了 watchdog
参数,例如通过执行
cat /proc/sys/kernel/watchdog
此命令的输出(0 或 1)显示 soft_watchdog
和 nmi_watchdog
的逻辑 OR。
watchdog_cpumask¶
此值可用于控制监视程序可以在哪些 CPU 上运行。 默认 cpumask 是所有可能的内核,但是如果在内核配置中启用了 NO_HZ_FULL
,并且使用 nohz_full=
引导参数指定了内核,则默认情况下会排除这些内核。 离线内核可以包含在此掩码中,如果该内核稍后上线,则将根据掩码值启动监视程序。
通常,只有在 nohz_full
情况下才会接触此值,以重新启用默认情况下未运行监视程序的内核,如果在这些内核上怀疑内核锁死。
参数值是 cpumask 的标准 cpulist 格式,因此例如要在内核 0、2、3 和 4 上启用监视程序,您可以说
echo 0,2-4 > /proc/sys/kernel/watchdog_cpumask
watchdog_thresh¶
此值可用于控制 hrtimer 和 NMI 事件的频率以及软锁死和硬锁死阈值。 默认阈值为 10 秒。
softlockup 阈值是 (2 * watchdog_thresh
)。 将此可调参数设置为零将完全禁用锁死检测。