关于 /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_64aarch64)。

auto_msgmni

此变量无效,可能会在未来的内核版本中删除。读取它始终返回 0。在 Linux 3.17 之前,它启用/禁用在内存添加/删除或 IPC 命名空间创建/删除时自动重新计算 msgmni。将“1”回显到此文件中启用 msgmni 自动重新计算。回显“0”将其关闭。默认值为 1。

bootloader_type(仅限 x86)

这给出了引导加载程序指示的引导加载程序类型编号,左移 4 位,并与引导加载程序版本的低 4 位进行或运算。此编码的原因是,这曾经与内核头文件中的 type_of_loader 字段匹配;为了向后兼容,保留了该编码。也就是说,如果完整的引导加载程序类型编号为 0x15 且完整版本号为 0x234,则此文件将包含值 340 = 0x154。

有关其他信息,请参阅Linux/x86 引导协议中的 type_of_loaderext_loader_type 字段。

bootloader_version(仅限 x86)

完整的引导加载程序版本号。在上面的示例中,此文件将包含值 564 = 0x234。

有关其他信息,请参阅Linux/x86 引导协议中的 type_of_loaderext_loader_ver 字段。

bpf_stats_enabled

控制内核是否应收集 BPF 程序的统计信息(运行的总时间、运行次数...)。启用统计信息会导致每次程序运行时性能略有下降。可以使用 bpftool 查看统计信息。

0

不收集统计信息(默认)。

1

收集统计信息。

cad_pid

这是重启时(尤其是通过 Ctrl-Alt-Delete)将发送信号的进程 ID。向此文件写入不对应于正在运行的进程的值将导致 -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 将附加到文件名。

  • 核心名称格式说明符

    %<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

    %<其他>

    两者都被丢弃

  • 如果模式的第一个字符是 “|”,内核会将模式的其余部分视为要运行的命令。核心转储将写入该程序的标准输入,而不是写入文件。

core_pipe_limit

仅当 core_pattern 配置为将核心文件通过管道传输到用户空间助手时(当 core_pattern 的第一个字符是 “|” 时,请参见上文),此 sysctl 才适用。当通过管道将核心转储收集到应用程序时,收集应用程序偶尔会从其 /proc/pid 目录中收集有关崩溃进程的数据。为了安全地执行此操作,内核必须等待收集进程退出,以便不会过早地删除崩溃进程的 proc 文件。反过来,这会导致行为不当的用户空间收集进程可以通过永不退出而阻止崩溃进程的回收。此 sysctl 可以防止这种情况发生。它定义了可以并行通过管道传输到用户空间应用程序的并发崩溃进程的数量。如果超过此值,则通过内核日志记录超过该值的那些崩溃进程,并且会跳过其核心转储。0 是一个特殊值,表示可以并行捕获无限数量的进程,但不会发生任何等待(即,不保证收集进程可以访问 /proc/<crashing pid>/)。此值默认为 0。

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

这些文件可用于以与命令 domainname 和 hostname 完全相同的方式设置您的盒子的 NIS/YP 域名和主机名,即:

# 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(或内核 panic)上调用 ftrace_dump()。这会将 ftrace 缓冲区的内容输出到控制台。这对于捕获导致崩溃的跟踪并将其输出到串行控制台非常有用。

0

已禁用(默认)。

1

转储所有 CPU 的缓冲区。

2(orig_cpu)

转储触发 oops 的 CPU 的缓冲区。

<实例>

转储所有 CPU 上特定实例的缓冲区。

<实例>=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;目前为 arcpariscloongarch),控制是否记录所有未对齐的陷阱。

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

一个切换开关,指示是否已禁用系统调用 kexec_loadkexec_file_load。此值默认为 0(false:启用 kexec_*load),但可以设置为 1(true:禁用 kexec_*load)。一旦设置为 true,则无法再使用 kexec,并且无法将切换开关设置回 false。这允许在禁用系统调用之前加载 kexec 映像,从而允许系统设置(并稍后使用)映像,而无需对其进行更改。通常与 modules_disabled sysctl 一起使用。

kexec_load_limit_panic

此参数指定可以使用崩溃映像调用系统调用 kexec_loadkexec_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,否则使用 %pK 格式说明符打印的内核指针将被替换为 0。这是因为 %pK 检查是在 read() 时而不是 open() 时完成的,因此如果在 open() 和 read() 之间(例如通过 setuid 二进制文件)提升了权限,则 %pK 不会将内核指针泄露给非特权用户。请注意,这只是一个临时解决方案。正确的长期解决方案是在 open() 时进行权限检查。考虑从使用 %pK 的文件中删除世界读取权限,如果担心将内核指针值泄露给非特权用户,请使用 dmesg_restrict 来防止在 dmesg(8) 中使用 %pK。

kptr_restrict 设置为 2 时,无论权限如何,使用 %pK 打印的内核指针都将被替换为 0。

modprobe

用于自动加载内核模块的用户模式帮助器的完整路径,默认为 CONFIG_MODPROBE_PATH,后者又默认为“/sbin/modprobe”。当内核请求模块时,将执行此二进制文件。例如,如果用户空间将未知的 文件系统类型传递给 mount(),则内核将通过执行此用户模式帮助器自动请求相应的文件系统模块。此用户模式帮助器应将所需的模块插入内核。

此 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 设置为空字符串,则完全禁用模块自动加载。内核将根本不会尝试执行用户模式帮助器,也不会调用 kernel_module_request LSM 钩子。

如果在内核配置中设置了 CONFIG_STATIC_USERMODEHELPER=y,则配置的静态用户模式帮助器将覆盖此 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}。

注释
  1. 内核不保证新对象具有所需的 ID。因此,如何处理具有“错误” ID 的对象取决于用户空间。

  2. 具有非默认值的切换开关将在成功分配 IPC 对象后由内核设置回 -1。如果 IPC 对象分配系统调用失败,则不确定该值保持不变还是重置为 -1。

ngroups_max

辅助组的最大数量,_即_ setgroups 将接受的最大大小。从内核导出 NGROUPS_MAX

nmi_watchdog

此参数可用于控制 x86 系统上的 NMI 监视程序(即硬锁定检测器)。

0

禁用硬锁定检测器。

1

启用硬锁定检测器。

硬锁定检测器会监控每个 CPU 对定时器中断的响应能力。该机制利用 CPU 性能计数器寄存器,这些寄存器被编程为在 CPU 繁忙时定期生成不可屏蔽中断 (NMI)。因此,也称为“NMI 监视器”。

如果内核作为 KVM 虚拟机中的访客运行,则默认情况下禁用 NMI 监视器。可以通过添加以下内容来覆盖此默认设置:

nmi_watchdog=1

到访客内核命令行(请参阅内核的命令行参数)。

nmi_wd_lpm_factor(仅限 PPC)

应用于 NMI 监视器超时的系数(仅当 nmi_watchdog 设置为 1 时)。此系数表示在 LPM 期间计算 NMI 监视器超时时添加到 watchdog_thresh 的百分比。软锁定超时不受影响。

值为 0 表示不更改。默认值为 200,表示 NMI 监视器设置为 30 秒(基于 watchdog_thresh 等于 10)。

numa_balancing

启用/禁用并配置基于页面错误的自动 NUMA 内存平衡。内存会自动移动到经常访问它的节点。要设置的值可以是以下值的或运算结果:

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/s)将被限制为不超过设置的值。

经验法则是将其设置为小于 PMEM 节点写入带宽的 1/10。

oops_all_cpu_backtrace

如果设置了此选项,则当发生 oops 事件时,内核将向所有 CPU 发送 NMI 以转储其回溯。在无法触发 panic(例如,为了保护正在运行的虚拟机)或无法收集 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

文件 osreleaseostype 应该足够清楚。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

Linux 在内存或未知 NMI 上的默认行为是继续操作。对于许多环境(例如科学计算),最好将该框取出并处理错误,而不是传播未经纠正的奇偶校验/ECC 错误。

少数系统确实会出于奇怪的随机原因(例如电源管理)生成 NMI,因此默认情况下是关闭的。该 sysctl 的工作方式与该目录中已有的 panic 控制类似。

panic_on_warn

当设置为 1 时,在 WARN() 路径中调用 panic()。这对于尝试在 WARN() 的位置进行 kdump 时避免内核重建很有用。

0

仅 WARN(),默认行为。

1

在打印出 WARN() 位置后调用 panic()

panic_print

发生 panic 时打印系统信息的位掩码。用户可以选择以下位的组合

位 0

打印所有任务信息

位 1

打印系统内存信息

位 2

打印定时器信息

位 3

如果 CONFIG_LOCKDEP 开启,则打印锁信息

位 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 停顿(默认行为)时,不要 panic()

1

在打印 RCU 停顿消息后 panic()

max_rcu_stall_to_panic

panic_on_rcu_stall 设置为 1 时,此值确定在调用 panic() 之前 RCU 可以停顿的次数。

panic_on_rcu_stall 设置为 0 时,此值不起作用。

perf_cpu_time_max_percent

向内核提示它应允许使用多少 CPU 时间来处理 perf 采样事件。如果 perf 子系统被告知其采样超过此限制,它将降低其采样频率以尝试减少其 CPU 使用率。

某些 perf 采样发生在 NMI 中。如果这些采样意外地花费太长时间才能执行,则 NMI 可能会彼此堆积,以至于不允许执行其他任何操作。

0

禁用该机制。无论 perf 采样花费多少 CPU 时间,都不要监视或纠正其采样率。

1-100

尝试将 perf 的采样率限制为此 CPU 百分比。注意:内核会计算每个采样事件的“预期”长度。这里的 100 表示该预期长度的 100%。即使将其设置为 100,如果超过此长度,你仍然可能会看到采样受到限制。如果确实不关心消耗多少 CPU,请设置为 0。

perf_event_paranoid

控制未授权用户(没有 CAP_PERFMON)对性能事件系统的使用。默认值为 2。

出于向后兼容性的原因,仍然允许 CAP_SYS_ADMIN 特权进程访问系统性能监视和可观测性,但不建议将 CAP_SYS_ADMIN 用于安全系统性能监视和可观测性操作,而应使用 CAP_PERFMON 用例。

-1

允许所有用户使用(几乎)所有事件。

在没有 CAP_IPC_LOCK 的情况下,在 perf_event_mlock_kb 后忽略 mlock 限制。

>=0

禁止没有 CAP_PERFMON 的用户使用 ftrace 函数跟踪点。

禁止没有 CAP_PERFMON 的用户访问原始跟踪点。

>=1

禁止没有 CAP_PERFMON 的用户访问 CPU 事件。

>=2

禁止没有 CAP_PERFMON 的用户进行内核分析。

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_logleveldefault_message_loglevelminimum_console_logleveldefault_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

请参见 The Devpts Filesystem

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 链接的二进制文件,代码开始的位置是随机的。如果启用了 CONFIG_COMPAT_BRK 选项,则这是默认设置。

2

此外,启用堆随机化。如果禁用了 CONFIG_COMPAT_BRK,则这是默认设置。

有一些遗留应用程序(例如 1996 年的 libc.so.5 的一些旧版本)假定 brk 区域在代码 + bss 结束后立即开始。当 brk 区域的起始位置随机化时,这些应用程序会中断。但是,没有已知会以这种方式中断的非遗留应用程序,因此对于大多数系统来说,选择完全随机化是安全的。

具有旧版和/或损坏的二进制文件的系统应配置为启用 CONFIG_COMPAT_BRK,这将使堆不参与进程地址空间随机化。

real-root-dev

请参见 Using the initial RAM disk (initrd)

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

请参阅Seccomp BPF(带过滤器的安全计算)

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 命名空间,将此参数设置为所需的值,并禁止在当前用户命名空间中创建新的 ipc 命名空间,或者可以使用 cgroups。

shmmax

此值可用于查询和设置可以创建的最大共享内存段大小的运行时限制。内核现在支持高达 1Gb 的共享内存段。此值默认为 SHMMAX

shmmni

此值确定共享内存段的最大数量。默认为 4096 (SHMMNI)。

shm_rmid_forced

Linux 允许您通过 setrlimit(2) 设置资源限制,包括一个进程可以消耗多少内存。不幸的是,共享内存段允许在不与任何进程关联的情况下存在,因此可能不会计入任何资源限制。如果启用,共享内存段将在分离或进程终止后其附加计数变为零时自动销毁。它还将销毁已创建但从未附加到进程的段。 IPC_RMID 剩下的唯一用途是立即销毁未附加的段。当然,这会破坏事物的定义方式,因此某些应用程序可能会停止工作。请注意,除非您还配置了资源限制(特别是 RLIMIT_ASRLIMIT_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 可能会恢复一些应用程序性能,但也会增加系统遭受来自拆分锁定用户的拒绝服务攻击的风险。

0

禁用缓解模式 - 只是在内核日志中警告拆分锁定,并使系统暴露于来自拆分锁定者的拒绝服务。

1

启用缓解模式(这是默认设置)- 通过有意降低性能来惩罚拆分锁定者。

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

请参阅Linux Magic 系统请求键 Hack

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)

加载了暂存驱动程序

2048

(I)

应用了平台固件中 bug 的解决方法

4096

(O)

加载了外部构建的(“树外”)模块

8192

(E)

加载了未签名的模块

16384

(L)

发生了软锁定

32768

(K)

内核已进行实时修补

65536

(X)

辅助污染,由发行版定义和使用

131072

(T)

内核是使用结构随机化插件构建的

有关更多信息,请参阅受污染的内核

注意

如果内核启动时使用了命令行选项 panic_on_taint=<位掩码>,nousertaint,并且写入到 tainted 的任何 ORed 值与在 panic_on_taint 上声明的位掩码匹配,则写入此 sysctl 接口将失败并返回 EINVAL。有关该特定内核命令行选项及其可选的 nousertaint 开关的更多详细信息,请参阅 内核的命令行参数

threads-max

此值控制可以使用 fork() 创建的最大线程数。

在初始化期间,内核设置此值,即使创建了最大线程数,线程结构也仅占用可用 RAM 页面的部分 (1/8)。

可以写入 threads-max 的最小值是 1。

可以写入 threads-max 的最大值由常量 FUTEX_TID_MASK (0x3fffffff) 给出。

如果写入 threads-max 的值超出此范围,则会发生 EINVAL 错误。

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;目前,arcpariscloongarch),控制是否捕获并模拟未对齐的陷阱(而不是失败)。

0

不模拟未对齐的访问。

1

模拟未对齐的访问。这是默认设置。

另请参阅 ignore-unaligned-usertrap

unknown_nmi_panic

此文件中的值会影响处理 NMI 的行为。当该值为非零值时,会捕获未知的 NMI,然后发生 panic。此时,内核调试信息会显示在控制台上。

例如,大多数 IA32 服务器都具有的 NMI 开关会触发未知的 NMI。如果系统挂起,请尝试按 NMI 开关。

unprivileged_bpf_disabled

将 1 写入此条目将禁用对 bpf() 的非特权调用;一旦禁用,在没有 CAP_SYS_ADMINCAP_BPF 的情况下调用 bpf() 将返回 -EPERM。一旦设置为 1,就无法再从运行的内核中清除此设置。

将 2 写入此条目也将禁用对 bpf() 的非特权调用,但是,如果需要,管理员仍然可以通过向此条目写入 0 或 1 来稍后更改此设置。

如果在内核配置中启用了 BPF_UNPRIV_DEFAULT_OFF,则此条目将默认设置为 2 而不是 0。

0

启用了对 bpf() 的非特权调用

1

禁用对 bpf() 的非特权调用,无法恢复

2

禁用对 bpf() 的非特权调用

warn_limit

当未设置 panic_on_warn 时,内核应在发出多少次内核警告后 panic。将此值设置为 0 将禁用警告计数检查。将此值设置为 1 的效果与设置 panic_on_warn=1 相同。默认值为 0。

watchdog

此参数可用于同时禁用或启用软锁检测器 NMI 看门狗(即硬锁检测器)。

0

禁用两个锁检测器。

1

启用两个锁检测器。

软锁检测器和 NMI 看门狗也可以使用 soft_watchdognmi_watchdog 参数单独禁用或启用。如果读取 watchdog 参数,例如通过执行

cat /proc/sys/kernel/watchdog

此命令的输出(0 或 1)显示 soft_watchdognmi_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 秒。

软锁阈值为 (2 * watchdog_thresh)。将此可调参数设置为零将完全禁用锁检测。