/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 非零,失敗的拓撲更新將被放置在延遲佇列中,直到另一個事件到達清除錯誤,或者直到超時過期。值以毫秒為單位。