/proc/sys/net/ 文档¶
版权
版权 (c) 1999
Terrehon Bowden <terrehon@pacbell.net>
Bodo Bauer <bb@ricochet.net>
版权 (c) 2000
Jorge Nerin <comandante@zaralinux.com>
版权 (c) 2009
沈峰 <shen@cn.fujitsu.com>
有关一般信息和法律声明,请查看 /proc/sys 文档。
此文件包含 /proc/sys/net 中 sysctl 文件的文档
内核网络部分的接口位于 /proc/sys/net 中。下表显示了所有可能的子目录。您可能只看到其中的一部分,具体取决于内核的配置。
表格:/proc/sys/net 中的子目录
目录
内容
目录
内容
802
E802 协议
mptcp
多路径 TCP
appletalk
Appletalk 协议
netfilter
网络过滤器
ax25
AX25
netrom
NET/ROM
bridge
桥接
rose
X.25 PLP 层
core
通用参数
tipc
TIPC
ethernet
以太网协议
unix
Unix 域套接字
ipv4
IP 版本 4
x25
X.25 协议
ipv6
IP 版本 6
1. /proc/sys/net/core - 网络核心选项¶
bpf_jit_enable¶
这会启用 BPF 即时 (JIT) 编译器。BPF 是一种灵活高效的基础设施,允许在各种挂钩点执行字节码。它在许多 Linux 内核子系统中使用,例如网络(例如 XDP、tc)、跟踪(例如 kprobes、uprobes、tracepoints)和安全(例如 seccomp)。LLVM 有一个 BPF 后端,可以将受限的 C 代码编译为一系列 BPF 指令。通过 bpf(2) 加载程序并在内核中通过验证器后,JIT 会将这些 BPF 小程序转换为本机 CPU 指令。JIT 有两种风格,较新的 eBPF JIT 当前支持
x86_64
x86_32
arm64
arm32
ppc64
ppc32
sparc64
mips64
s390x
riscv64
riscv32
loongarch64
arc
以及以下架构支持的旧 cBPF JIT
mips
sparc
eBPF JIT 是 cBPF JIT 的超集,这意味着内核会将 cBPF 指令迁移到 eBPF 指令,然后透明地进行 JIT 编译。旧的 cBPF JIT 只能翻译 tcpdump 过滤器、seccomp 规则等,但不能翻译通过 bpf(2) 加载的 eBPF 程序。
值
0 - 禁用 JIT(默认值)
1 - 启用 JIT
2 - 启用 JIT 并要求编译器在内核日志上发出跟踪。
bpf_jit_harden¶
这会启用 BPF JIT 编译器的硬化。支持 eBPF JIT 后端。启用硬化会降低性能,但可以缓解 JIT 喷射。
值
0 - 禁用 JIT 硬化(默认值)
1 - 仅为非特权用户启用 JIT 硬化
2 - 为所有用户启用 JIT 硬化
其中此处的“特权用户”是指在根用户命名空间中具有 CAP_BPF 或 CAP_SYS_ADMIN 的进程。
bpf_jit_kallsyms¶
当启用 BPF JIT 编译器时,编译后的镜像对于内核而言是未知地址,这意味着它们既不会显示在跟踪中,也不会显示在 /proc/kallsyms 中。这会启用这些地址的导出,可用于调试/跟踪。如果启用了 bpf_jit_harden,则此功能将被禁用。
值
0 - 禁用 JIT kallsyms 导出(默认值)
1 - 仅为特权用户启用 JIT kallsyms 导出
bpf_jit_limit¶
这会强制执行 BPF JIT 编译器内存分配的全局限制,以便在超出此限制后拒绝非特权 JIT 请求。bpf_jit_limit 包含全局限制的值(以字节为单位)。
dev_weight¶
内核在 NAPI 中断上可以处理的最大数据包数,它是每个 CPU 的变量。对于支持 LRO 或 GRO_HW 的驱动程序,在此上下文中,硬件聚合数据包算作一个数据包。
默认值:64
dev_weight_rx_bias¶
RPS(例如 RFS、aRFS)处理与驱动程序的注册 NAPI 轮询函数竞争每个软中断周期的 netdev_budget。此参数会影响在 RX 软中断周期内用于基于 RPS 的数据包处理的已配置 netdev_budget 的比例。它还旨在使当前的 dev_weight 适用于网络堆栈 RX/TX 侧的不对称 CPU 需求。(请参阅 dev_weight_tx_bias)它在每个 CPU 的基础上有效。确定基于 dev_weight 并以乘法方式计算 (dev_weight * dev_weight_rx_bias)。
默认值:1
dev_weight_tx_bias¶
缩放在 TX 软中断周期内可以处理的最大数据包数。在每个 CPU 的基础上有效。允许缩放当前 dev_weight 以满足不对称的网络堆栈处理需求。请注意避免使 TX 软中断处理成为 CPU 占用资源的大户。
计算基于 dev_weight (dev_weight * dev_weight_tx_bias)。
默认值:1
default_qdisc¶
用于网络设备的默认排队规则。这允许使用替代方案覆盖 pfifo_fast 的默认值。由于默认排队规则是在没有其他参数的情况下创建的,因此最适合在没有配置的情况下也能正常工作的排队规则,例如随机公平队列 (sfq)、CoDel (codel) 或公平队列 CoDel (fq_codel)。不要使用需要设置类和带宽的排队规则,例如分层令牌桶或赤字循环。请注意,物理多队列接口仍然使用 mq 作为根 qdisc,而 mq 又将其默认值用于其叶子。虚拟设备(例如 lo 或 veth)会忽略此设置,而是默认为 noqueue。
默认值:pfifo_fast
busy_read¶
用于套接字读取的低延迟忙轮询超时。(需要 CONFIG_NET_RX_BUSY_POLL)忙轮询等待设备队列上的数据包的近似时间(以微秒为单位)。这会设置 SO_BUSY_POLL 套接字选项的默认值。可以通过设置套接字选项 SO_BUSY_POLL 来按套接字设置或覆盖此值,这是首选的启用方法。如果您需要通过 sysctl 全局启用该功能,建议值为 50。
会增加功耗。
默认值:0(关闭)
busy_poll¶
用于轮询和选择的低延迟忙轮询超时。(需要 CONFIG_NET_RX_BUSY_POLL)忙轮询等待事件的近似时间(以微秒为单位)。建议值取决于您轮询的套接字数。对于几个套接字,值为 50,对于几百个套接字,值为 100。对于更多套接字,您可能需要使用 epoll。请注意,只有设置了 SO_BUSY_POLL 的套接字才会进行忙轮询,因此您需要选择性地在这些套接字上设置 SO_BUSY_POLL,或者全局设置 sysctl.net.busy_read。
会增加功耗。
默认值:0(关闭)
mem_pcpu_rsv¶
每个 CPU 保留的预分配缓存大小,以页为单位。默认为每个 CPU 1MB。
rmem_default¶
套接字接收缓冲区大小的默认设置,以字节为单位。
rmem_max¶
最大接收套接字缓冲区大小,以字节为单位。
rps_default_mask¶
在新创建的网络设备上使用的默认 RPS CPU 掩码。空掩码表示默认禁用 RPS。
tstamp_allow_data¶
允许进程接收与原始数据包内容一起循环的 tx 时间戳。如果禁用,则会丢弃来自非特权进程的传输时间戳请求,除非设置了套接字选项 SOF_TIMESTAMPING_OPT_TSONLY。
默认值:1 (启用)
wmem_default¶
套接字发送缓冲区的默认设置(以字节为单位)。
wmem_max¶
最大发送套接字缓冲区大小,以字节为单位。
message_burst 和 message_cost¶
这些参数用于限制从网络代码写入内核日志的警告消息。它们强制执行速率限制,以避免拒绝服务攻击。较高的 message_cost 因子将导致写入的消息更少。Message_burst 控制何时丢弃消息。默认设置将警告消息限制为每五秒一条。
warnings¶
此 sysctl 现在未使用。
它曾经用于控制来自网络堆栈的控制台消息,这些消息是由于网络上的问题(如重复的地址或错误的校验和)引起的。
这些消息现在以 KERN_DEBUG 发出,并且通常可以通过 dynamic_debug 功能启用和控制。
netdev_budget¶
在一次轮询周期(NAPI 轮询)中从所有接口获取的最大数据包数。在一个轮询周期中,以循环方式探测注册到轮询的接口。此外,即使 netdev_budget 没有耗尽,轮询周期也不能超过 netdev_budget_usecs 微秒。
netdev_budget_usecs¶
一个 NAPI 轮询周期中的最大微秒数。当轮询周期中经过的 netdev_budget_usecs 时间或处理的数据包数量达到 netdev_budget 时,轮询将退出。
netdev_max_backlog¶
当接口接收数据包的速度快于内核处理它们的速度时,在 INPUT 端排队的最大数据包数。
netdev_rss_key¶
启用 RSS(接收端缩放)的驱动程序使用一个随机生成的 40 字节主机密钥。即使驱动程序尚未提供 ethtool -x 支持,一些用户空间可能也需要收集其内容。
myhost:~# cat /proc/sys/net/core/netdev_rss_key
84:50:f4:00:a8:15:d1:a7:e9:7f:1d:60:35:c7:47:25:42:97:74:ca:56:bb:b6:a1:d8: ... (52 bytes total)
如果没有任何驱动程序调用过 netdev_rss_key_fill() 函数,则文件包含空字节。
- 注意
/proc/sys/net/core/netdev_rss_key 包含 52 字节的密钥,但大多数驱动程序仅使用其中的 40 字节。
myhost:~# ethtool -x eth0
RX flow hash indirection table for eth0 with 8 RX ring(s):
0: 0 1 2 3 4 5 6 7
RSS hash key:
84:50:f4:00:a8:15:d1:a7:e9:7f:1d:60:35:c7:47:25:42:97:74:ca:56:bb:b6:a1:d8:43:e3:c9:0c:fd:17:55:c2:3a:4d:69:ed:f1:42:89
netdev_tstamp_prequeue¶
如果设置为 0,则可以在 RPS 处理之后,当目标 CPU 处理数据包时,对 RX 数据包时间戳进行采样。这可能会导致时间戳出现一些延迟,但允许将负载分配到多个 CPU 上。
如果设置为 1(默认值),则会在排队之前尽快对时间戳进行采样。
netdev_unregister_timeout_secs¶
取消注册网络设备超时时间,以秒为单位。此选项控制在设备取消注册期间等待网络设备引用计数降至 0 时发出警告的超时时间(以秒为单位)。较低的值可能在对分过程中用于更快地检测到泄漏的引用。较大的值可能有助于防止在缓慢/负载重的系统上出现错误警告。默认值为 10,最小值为 1,最大值为 3600。
skb_defer_max¶
每个 CPU 正在释放的 skb 列表的最大大小(以 skb 为单位),该 CPU 分配了这些 skb。目前由 TCP 堆栈使用。
默认值:64
optmem_max¶
每个套接字允许的最大辅助缓冲区大小。辅助数据是带有附加数据的 struct cmsghdr 结构序列。TCP tx 零拷贝还将 optmem_max 用作其内部结构的限制。
默认值:128 KB
fb_tunnels_only_for_init_net¶
控制是否自动创建回退隧道(如 tunl0、gre0、gretap0、erspan0、sit0、ip6tnl0、ip6gre0)。有 3 种可能性:(a)value = 0;当模块在每个网络命名空间中加载时,创建相应的回退隧道(向后兼容行为)。(b)value = 1;[kcmd 值:initns] 相应的回退隧道仅在 init 网络命名空间中创建,其他每个网络命名空间都不会有它们。(c)value = 2;[kcmd 值:none] 当模块在任何网络命名空间中加载时,不会创建回退隧道。如果在启动后这些模块是内置的,则将值设置为“2”毫无意义,因此有一个内核命令行选项可以更改此默认值。有关更多详细信息,请参阅内核的命令行参数。
不创建回退隧道允许用户空间控制仅创建所需的内容,并避免创建冗余设备。
默认值:0(出于兼容性原因)
devconf_inherit_init_net¶
控制新的网络命名空间是否应继承 /proc/sys/net/{ipv4,ipv6}/conf/{all,default}/ 下的所有当前设置。默认情况下,我们保持当前行为:对于 IPv4,我们从 init_net 继承所有当前设置,对于 IPv6,我们将所有设置重置为默认值。
如果设置为 1,则强制 IPv4 和 IPv6 设置都从 init_net 中的当前设置继承。如果设置为 2,则强制 IPv4 和 IPv6 设置都重置为其默认值。如果设置为 3,则强制 IPv4 和 IPv6 设置都从创建此新 netns 的 netns 中的当前设置继承。
默认值:0(出于兼容性原因)
txrehash¶
当 SO_TXREHASH 选项设置为 SOCK_TXREHASH_DEFAULT(即未被 setsockopt 覆盖)时,控制套接字上的默认哈希重新思考行为。
如果设置为 1(默认值),则在监听套接字上执行哈希重新思考。如果设置为 0,则不执行哈希重新思考。
gro_normal_batch¶
在 GRO 输出时批处理的最大段数。当数据包以合并的超帧或 GRO 已决定不合并的原始数据包形式退出 GRO 时,它会被放置在每个 NAPI 列表中。当段数达到 gro_normal_batch 限制时,此列表将传递给堆栈。
high_order_alloc_disable¶
默认情况下,页片段分配器尝试使用高阶页面(x86 上的 order-3)。虽然默认行为在大多数情况下都提供了良好的结果,但某些用户可能会在页面分配/释放中遇到争用。在较旧的内核(< 5.14)上尤其如此,当时高阶页面未存储在每个 CPU 列表中。这允许选择 order-0 分配,但现在主要具有历史意义。
默认值:0
2. /proc/sys/net/unix - Unix 域套接字的参数¶
此目录中只有一个文件。unix_dgram_qlen 限制了 Unix 域套接字缓冲区中排队的最大数据报数。除非指定了 PF_UNIX 标志,否则它不会生效。
3. /proc/sys/net/ipv4 - IPV4 设置¶
请参阅:IP Sysctl 和 /proc/sys/net/ 的文档,以了解这些条目的说明。
4. Appletalk¶
加载 Appletalk 时,/proc/sys/net/appletalk 目录保存 Appletalk 配置数据。可配置的参数是
aarp-expiry-time¶
在 ARP 条目过期之前保留它的时间量。用于淘汰旧主机。
aarp-resolve-time¶
我们将花费多少时间尝试解析 Appletalk 地址。
aarp-retransmit-limit¶
在放弃之前,我们将重新传输查询的次数。
aarp-tick-time¶
控制检查过期的速率。
/proc/net/appletalk 目录保存机器上活动 Appletalk 套接字的列表。
这些字段指示 DDP 类型、本地地址(网络:节点格式)、远程地址、传输挂起队列的大小、接收队列的大小(等待应用程序读取的字节数)、状态和拥有该套接字的 uid。
/proc/net/atalk_iface 列出为 appletalk 配置的所有接口。它显示接口的名称、其 Appletalk 地址、该地址上的网络范围(或第 1 阶段网络的网络号)以及接口的状态。
/proc/net/atalk_route 列出每个已知的网络路由。它列出路由指向的目标(网络)、路由器(可能直接连接)、路由标志和路由正在使用的设备。
5. TIPC¶
tipc_rmem¶
TIPC 协议现在具有接收内存的可调参数,类似于 tcp_rmem - 即 3 个 INTEGER 的向量:(最小、默认、最大)
# cat /proc/sys/net/tipc/tipc_rmem
4252725 34021800 68043600
#
最大值设置为 CONN_OVERLOAD_LIMIT,默认值和最小值是该相同值的缩放(移位)版本。请注意,此时最小值不以任何有意义的方式使用,但为了与 tcp_rmem 等保持一致,保留了三元组。
named_timeout¶
TIPC 名称表更新在集群中异步分发,没有任何形式的事务处理。这意味着可能出现不同的竞争场景。其中一种是,一个节点发送并由另一个节点接收的名称撤回可能在已经接受来自第三个节点的第二个重叠名称发布之后到达,尽管冲突的更新最初可能已按正确的顺序发出。如果 named_timeout 非零,则失败的拓扑更新将放置在延迟队列中,直到另一个事件到达清除错误或直到超时过期。值以毫秒为单位。