/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 Feng <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 中断上可以处理的最大数据包数量,这是一个 Per-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)。不要使用需要设置类和带宽的排队规则,例如分层令牌桶 (Hierarchical Token Bucket) 或赤字循环 (Deficit Round Robin)。请注意,物理多队列接口仍使用 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¶
poll 和 select 的低延迟忙轮询超时。(需要 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¶
允许进程接收与原始数据包内容一起循环的传输时间戳。如果禁用,来自非特权进程的传输时间戳请求将被丢弃,除非设置了套接字选项 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 poll) 中从所有接口获取的最大数据包数量。在一个轮询周期中,注册到轮询的接口以轮询方式探测。此外,即使 netdev_budget 尚未耗尽,一个轮询周期也不能超过 netdev_budget_usecs 微秒。
netdev_budget_usecs¶
一个 NAPI 轮询周期中的最大微秒数。当轮询周期内 netdev_budget_usecs 已过去或已处理的数据包数量达到 netdev_budget 时,轮询将退出。
netdev_max_backlog¶
当接口接收数据包的速度快于内核处理速度时,在 INPUT 侧排队的最大数据包数量。
netdev_rss_key¶
启用 RSS (Receive Side Scaling) 的驱动程序使用随机生成的 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,RX 数据包时间戳可以在 RPS 处理之后,当目标 CPU 处理数据包时采样。这可能会导致时间戳有一些延迟,但允许将负载分布到多个 CPU 上。
如果设置为 1(默认值),时间戳会在排队前尽快采样。
netdev_unregister_timeout_secs¶
注销网络设备超时时间(以秒为单位)。此选项控制在设备注销期间等待网络设备引用计数降至 0 时发出警告所使用的超时时间(以秒为单位)。较低的值在二分查找期间可能有助于更快地检测到泄漏的引用。较大的值可能有助于防止在慢速/负载系统上出现误报警告。默认值为 10,最小值为 1,最大值为 3600。
skb_defer_max¶
由分配它们的 CPU 释放的每 CPU skbs 列表的最大大小(以 skbs 为单位)。目前由 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) 值 = 0;当模块加载到每个网络命名空间时,相应的回退隧道都会被创建(向后兼容行为)。(b) 值 = 1;[kcmd value: initns] 相应的回退隧道仅在 init 网络命名空间中创建,其他网络命名空间将不会有它们。(c) 值 = 2;[kcmd value: 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 设置都将被强制继承创建此新网络命名空间的网络命名空间中的当前设置。
默认值: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¶
/proc/sys/net/appletalk 目录在加载 Appletalk 时保存 Appletalk 配置数据。可配置参数包括
aarp-expiry-time¶
在 ARP 条目过期之前保留的时间量。用于老化旧主机。
aarp-resolve-time¶
我们将花费尝试解析 Appletalk 地址的时间量。
aarp-retransmit-limit¶
在放弃之前重新传输查询的次数。
aarp-tick-time¶
控制检查过期条目的速率。
目录 /proc/net/appletalk 保存机器上活动 Appletalk 套接字的列表。
字段指示 DDP 类型、本地地址(以 network:node 格式)、远程地址、传输待处理队列的大小、接收队列的大小(等待应用程序读取的字节数)、状态以及拥有套接字的 uid。
/proc/net/atalk_iface 列出所有为 Appletalk 配置的接口。它显示接口名称、其 Appletalk 地址、该地址上的网络范围(或用于阶段 1 网络的网络号)以及接口状态。
/proc/net/atalk_route 列出每个已知的网络路由。它列出路由通向的目标(网络)、路由器(可能是直接连接的)、路由标志以及路由正在使用的设备。
5. TIPC¶
tipc_rmem¶
TIPC 协议现在有一个可调谐的接收内存参数,类似于 tcp_rmem —— 即一个包含 3 个整数的向量:(min, default, max)
# cat /proc/sys/net/tipc/tipc_rmem
4252725 34021800 68043600
#
最大值设置为 CONN_OVERLOAD_LIMIT,默认值和最小值是该相同值的缩放(偏移)版本。请注意,最小值目前没有以任何有意义的方式使用,但保留了三元组以与 tcp_rmem 等保持一致。
named_timeout¶
TIPC 名称表更新在集群中异步分发,不进行任何形式的事务处理。这意味着可能出现不同的竞争场景。例如,一个节点发出的名称撤销并被另一个节点接收,可能会在第二个重叠的名称发布已经被第三个节点接受之后才到达,尽管冲突的更新最初可能以正确的顺序发出。如果 named_timeout 非零,失败的拓扑更新将被放置在延迟队列中,直到另一个事件到达清除错误,或者直到超时过期。值以毫秒为单位。