Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

2.3. 可以控制哪些可调项?

可调项按内核 sybsystem 划分为多个组。Red Hat Enterprise Linux 系统有以下类型的可调项:

表 2.1. sysctl 接口表

class子系统

abi

执行域和个人

crypto

加密接口

debug

内核调试接口

dev

设备特定信息

fs

全局和特定文件系统可调项

kernel

全局内核 tunables

net

网络 tunables

sunrpc

Sun 远程过程调用(NFS)

user

用户命名空间限制

vm

调整和管理内存、缓冲区和缓存

2.3.1. 网络接口可调项

系统管理员能够通过网络可调项调整正在运行的系统上的网络配置。

网络可调项包含在 /proc/sys/net 目录中,其中包含用于各种网络主题的多个子目录。若要调整网络配置,系统管理员需要修改这些子目录中的文件。

最常用的目录有:

  1. /proc/sys/net/core/
  2. /proc/sys/net/ipv4/

/proc/sys/net/core/ 目录包含各种设置,这些设置控制内核和网络层之间的交互。通过调整其中一些可调项,您可以提高系统的性能,例如通过增加接收队列的大小、增大接收队列的最大连接数或专用于网络接口的内存。请注意,系统性能取决于每个问题的不同方面。

/proc/sys/net/ipv4/ 目录包含额外的网络设置,这些设置在防止系统上的攻击或使用系统作为路由器时非常有用。目录同时包含 IP 和 TCP 变量。有关这些变量的详细解释,请参阅 /usr/share/doc/kernel-doc-<version>/Documentation/networking/ip-sysctl.txt

/proc/sys/net/ipv4/ 目录中的其他目录涵盖了网络堆栈的不同方面:

  1. /proc/sys/net/ipv4/conf/ - 允许您以不同的方式配置每个系统接口,包括对未配置的设备和设置使用默认设置来覆盖所有特殊配置
  2. /proc/sys/net/ipv4/neigh/ - 包含与直接连接到系统的主机通信的设置,还包含多个步骤的不同系统设置
  3. /proc/sys/net/ipv4/route/ - 包含适用于系统上任何接口路由的规格

这个网络可调项列表与 IPv4 接口相关,并可通过 /proc/sys/net/ipv4/{all,<interface_name>}/ 目录访问。

以下参数的描述已从内核文档站点采用。[1]

log_martians

在内核日志中记录地址无法记录的数据包。

类型Default(默认)

布尔值

0

如果一个或多个 conf/{all,interface}/log_martians 设置为 TRUE,则启用

更多资源

accept_redirects

接受 ICMP 重定向消息。

类型Default(默认)

布尔值

1

该接口的 accept_redirects 在以下情况下启用:

  • Both conf/{all,interface}/accept_redirects 是 TRUE(启用接口转发时)
  • 至少有一个 conf/{all,interface}/accept_redirects 是 TRUE(接口转发已被禁用)

如需更多信息,请参阅如何启用或禁用 ICMP 重定向

转发

在接口上启用 IP 转发。

类型Default(默认)

布尔值

0

更多资源

mc_forwarding

进行多播路由。

类型Default(默认)

布尔值

0

  • 只读值
  • 需要多播路由守护进程。
  • conf/all/mc_forwarding 还必须设置为 TRUE,以便为接口启用多播路由

更多资源

medium_id

用于根据所附加介质区分设备的任意值。

类型Default(默认)

整数

0

备注

  • 当广播数据包只在其中一个上接收时,同一介质中的两个设备可能具有不同的 ID 值。
  • 默认值为 0,表示该设备是其介质的唯一接口
  • -1 的值表示介质未知。
  • 目前,它被用来更改 proxy_arp 行为:
  • proxy_arp 功能针对在附加到不同介质的两个设备之间转发的数据包启用。

其他资源 - 例如,请参阅在 Linux 2.2 和 2.4 中使用"medium_id"功能

proxy_arp

代理 arp.

类型Default(默认)

布尔值

0

如果至少有一个 conf/{all,interface}/proxy_arp 设置为 TRUE,则 接口的 proxy _arp 会被启用

proxy_arp_pvlan

专用 VLAN 代理 arp.

类型Default(默认)

布尔值

0

允许代理 arp 回复同一接口,以支持 RFC 3069等功能

shared_media

send(router)或接受(主机)RFC1620 共享介质重定向.

类型Default(默认)

布尔值

1

备注

  • 覆盖 secure_redirects.
  • 如果至少有一个 conf/{all,interface}/shared_media 设置为 TRUE,接口的 shared _media 会被启用
secure_redirects

仅接受 ICMP 重定向消息到接口的当前网关列表中列出的网关。

类型Default(默认)

布尔值

1

备注

  • 即使禁用,仍然应用 RFC1122 重定向规则。
  • 被 shared_media 覆盖。
  • 如果至少有一个 conf/{all,interface}/secure_redirects 设置为 TRUE,则接口的 secure_redirects 会被启用
send_redirects

发送重定向(如果路由器)。

类型Default(默认)

布尔值

1

如果至少有一个 conf/{all,interface}/send_redirects 设置为 TRUE,则会启用接口的
send_redirects

bootp_relay

接受源地址为 0.b.c.d 的数据包,其目的地为本地主机。

类型Default(默认)

布尔值

0

备注

  • 必须启用 BOOTP 守护进程来管理这些数据包
  • 还必须将 conf/all/bootp_relay 设置为 TRUE,以便为接口启用 BOOTP 转发
  • 未实施,请参阅 Red Hat Enterprise Linux 网络指南中的 DHCP 转发代理
accept_source_route

通过 SRR 选项接受数据包。

类型Default(默认)

布尔值

1

备注

  • 还必须将 conf/all/accept_source_route 设置为 TRUE,以接受接口上的 SRR 选项的数据包
accept_local

接受具有本地源地址的数据包.

类型Default(默认)

布尔值

0

备注

  • 结合合适的路由,这可用于通过线路在两个本地接口之间定向数据包,并让它们正确接受。
  • rp_filter 必须设置为非零值,以便 accept_local 生效。
route_localnet

在路由时,请勿将环回地址视为 martian 源或目的地。

类型Default(默认)

布尔值

0

备注

  • 这允许将 127/8 用于本地路由。
rp_filter

启用源验证

类型Default(默认)

整数

0

效果

0

没有源验证。

1

RFC3704 Strict Reverse Path 中定义的严格模式

2

松散模式,如 RFC3704 Loose Reverse Path 中定义的

备注

  • RFC3704 中的当前推荐做法是启用严格的模式,以防止 IP 欺骗 DDos 攻击。
  • 如果使用非对称路由或其他复杂的路由,则建议使用松散模式。
  • 在 { interface} 上进行源验证时,使用来自conf/{all,interface}/rp_filter 的最高值。
arp_filter
类型Default(默认)

布尔值

0

效果

0

(默认)内核可使用来自其他接口的地址响应 arp 请求。这通常会有意义,因为它会增加成功通信的机率。

1

允许在同一子网上具有多个网络接口,并且每个接口的 ARP 应答取决于内核是否将 ARP 的 IP 中的数据包路由出该接口(因此,您必须使用基于源的路由才能使此接口正常工作)。换句话说,它允许控制响应 arp 请求的卡片(通常是 1)。

备注

  • IP 地址归 Linux 上的完整主机所有,而不是由特定接口所有。只有对于更复杂的设置(如负载平衡),这个行为才会造成问题。
  • 如果至少有一个 conf/{all,interface}/arp_filter 设置为 TRUE,则 接口的 arp _filter 会被启用
arp_announce

在接口上发送的 ARP 请求中从 IP 数据包发布本地源 IP 地址时定义不同的限制级别

类型Default(默认)

整数

0

效果

0

(默认)使用任何本地地址,在任何接口上配置

1

尝试避免此接口不在目标子网中的本地地址。当通过此接口访问的目标主机需要 ARP 请求中的源 IP 地址作为其接收接口上配置的逻辑网络的一部分时,此模式很有用。在生成请求时,我们将检查我们包括目标 IP 的所有子网,并在源地址来自此类子网时保留源地址。如果没有这样的子网,则根据级别 2 的规则选择源地址。

2

始终为此目标使用最佳的本地地址。在此模式下,我们忽略 IP 数据包中的源地址,并尝试选择我们喜欢与目标主机通信的本地地址。通过在包含目标 IP 地址的传出接口上在所有子网上查找主 IP 地址来选择此类本地地址。如果没有找到合适的本地地址,我们将选择我们在传出接口上或所有其他接口上具有的第一个本地地址,我们希望我们收到回复,即使我们宣布的源 IP 地址是什么。

备注

  • 使用来自 conf/{all,interface}/arp_announce 的最大值。
  • 提高限制级别,为从已解析的目标处收到答案,同时降低级别宣布更有效的发送者的信息提供了更多机会。
arp_ignore

定义不同的发送回复模式,以响应解析本地目标 IP 地址的接收 ARP 请求

类型Default(默认)

整数

0

效果

0

(默认):回复任何本地目标 IP 地址,在任何接口上配置

1

仅当目标 IP 地址是传入接口上配置的本地地址时才回复

2

仅当目标 IP 地址是传入接口上配置的本地地址并且发件人 IP 地址是此接口上同一子网中的一部分时才回复

3

不要回复通过范围主机配置的本地地址,只回复全局地址和链接地址的解决方案

4-7

保留

8

在 {interface} 上收到 ARP 请求时,请勿回复来自 conf/{all,interface}/arp_ignore 的最大值。

备注

arp_notify

定义用于地址和设备更改通知模式。

类型Default(默认)

布尔值

0

效果

0

不做任何操作

1

在设备启动或硬件地址更改时生成无饱和的 arp 请求。

备注

arp_accept

定义 ARP 表中尚不存在的粒度 ARP 帧的行为

类型Default(默认)

布尔值

0

效果

0

不要在 ARP 表中创建新条目

1

在 ARP 表中创建新条目。

注意
如果此设置开启,回复和请求类型的粒度 arp 都会触发要更新的 ARP 表。如果 ARP 表已包含粒度 arp 帧的 IP 地址,则会更新 arp 表,不论此设置是开启还是关闭。

app_solicit

在退回到多播探测前通过网络链接发送到用户空间 ARP 守护进程的最大探测数(请参见 mcast_solicit)。

类型Default(默认)

整数

0

备注
请参阅 mcast_solicit

disable_policy

禁用此接口的 IPSEC 策略(SPD)

类型Default(默认)

布尔值

0

needinfo

disable_xfrm

禁用这个接口上的 IPSEC 加密,无论策略是什么

类型Default(默认)

布尔值

0

needinfo

igmpv2_unsolicited_report_interval

下一个主动 IGMPv1 或 IGMPv2 报告重新传输的间隔以毫秒为单位。

类型Default(默认)

整数

10000

备注
Milliseconds

igmpv3_unsolicited_report_interval

下次非请求 IGMPv3 报告重新传输的间隔以毫秒为单位。

类型Default(默认)

整数

1000

备注
Milliseconds

tag

允许您编写一个数字,根据需要使用。

类型Default(默认)

整数

0

xfrm4_gc_thresh

为 IPv4 目标缓存条目开始收集垃圾回收的阈值。

类型Default(默认)

整数

1

注意
在这个值上两次,系统会拒绝新分配。

2.3.2. 全局内核 tunables

系统管理员能够通过全局内核可调项配置和监控正在运行的系统上的常规设置。

全局内核可调项包含在 /proc/sys/kernel/ 目录中,可直接作为指定控制文件或分组到其他子目录中,以用于各种配置主题。要调整全局内核可调项,系统管理员需要修改控制文件。

以下参数的描述已在内核文档站点中使用。[2]

dmesg_restrict

指明是否禁止非特权用户使用 dmesg 命令查看来自内核日志缓冲器的消息。

如需更多信息,请参阅内核 sysctl 文档

core_pattern

指定核心转储文件模式名称。

最大长度Default(默认)

128 个字符

"核心"

如需更多信息,请参阅内核 sysctl 文档

hardlockup_panic

当检测到硬锁定时,控制内核 panic。

类型效果

整数

0

内核在硬锁定时不会 panic

整数

1

硬锁定中的内核 panic

为了 panic,系统需要首先检测硬锁定。检测由 nmi_watchdog 参数控制。

更多资源

softlockup_panic

当检测到软锁定时,控制内核 panic。

类型效果

整数

0

内核在软锁定时不 panic

整数

1

软锁定中的内核 panics

默认情况下,在 RHEL7 上,这个值为 0。

有关 softlockup_panic 的更多信息,请参阅 kernel_parameters

kptr_restrict

指明是否对通过 /proc 和其他接口公开内核地址施加限制。

类型Default(默认)

整数

0

效果

0

在打印前对内核地址进行哈希处理

1

在某些情况下,将打印的内核指针替换为 0 的指针

2

无条件地替换打印的内核指针

如需更多信息,请参阅 Kernel sysctl 文档

nmi_watchdog

控制 x86 系统上的硬锁定检测器。

类型Default(默认)

整数

0

效果

0

禁用锁定检测器

1

启用锁定检测器

硬锁定检测器会监控每个 CPU 是否有响应中断的能力。

如需了解更多详细信息,请参阅 Kernel sysctl 文档

watchdog_thresh

控制 watchdog hrtimer、NMI 事件和软/硬锁定阈值的频率。

默认阈值软锁定阈值

10 秒

2 * watchdog_thresh

将此可调项设置为零可完全禁用锁定检测。

如需更多信息,请参阅内核 sysctl 文档

panic, panic_on_oops, panic_on_stackoverflow, panic_on_unrecovered_nmi, panic_on_warn, panic_on_rcu_stall, hung_task_panic

这些可调项在哪些情况下指定内核应 panic。

要查看有关一组 panic 参数的详情,请参阅 Kernel sysctl 文档

printk, printk_delay, printk_ratelimit, printk_ratelimit_burst, printk_devkmsg

这些可调项控制记录或打印内核错误消息。

有关 printk 参数组的详情,请参阅 Kernel sysctl 文档

shmall, shmmax, shm_rmid_forced

这些可调项对共享内存的控制限制。

有关 shm 参数组的详情,请参考 Kernel sysctl 文档

threads-max

控制 fork() 系统调用所创建的线程的最大数量。

Min 值最大值

20

由 FUTEX_TID_MASK(0x3fffff)提供.

按照可用的 RAM 页面检查 threads -max 值。如果线程结构占用了太多可用 RAM 页面,readm -max 会相应地减少。

如需了解更多详细信息,请参阅 Kernel sysctl 文档

pid_max

PID 分配总结值.

要查看更多信息,请参阅 Kernel sysctl 文档

numa_balancing

此参数启用或禁用自动 NUMA 内存均衡。在 NUMA 计算机上,如果 CPU 访问远程内存,则性能会受到影响。

如需了解更多详细信息,请参阅 Kernel sysctl 文档

numa_balancing_scan_period_min_ms, numa_balancing_scan_delay_ms, numa_balancing_scan_period_max_ms, numa_balancing_scan_size_mb

这些可调项可检测页面是否正确放置到运行任务的本地内存节点。

有关 numa_balancing_scan 参数组的详情,请参阅 Kernel sysctl 文档