Tc
強制啟用 fq_pie
我對為 TCP 擁塞控制設置 fq_pie 隊列規則非常感興趣。如果我寫信
net.core.default_qdisc = fq_pie
,/etc/sysctl.d/90-override.conf
它應該在最新的核心上啟用 fq_pie。不過,它確實可以在我的桌面上執行。但在我的筆記型電腦上:
$ tc qdisc show qdisc noqueue 0: dev lo root refcnt 2 qdisc noqueue 0: dev wlp1s0 root refcnt 2 qdisc mq 0: dev wlp0s20f0u3 root qdisc fq_pie 0: dev wlp0s20f0u3 parent :4 limit 10240p flows 1024 target 15ms tupdate 16ms alpha 2 beta 20 quantum 1514b memory_limit 32Mb ecn_prob 10 qdisc fq_pie 0: dev wlp0s20f0u3 parent :3 limit 10240p flows 1024 target 15ms tupdate 16ms alpha 2 beta 20 quantum 1514b memory_limit 32Mb ecn_prob 10 qdisc fq_pie 0: dev wlp0s20f0u3 parent :2 limit 10240p flows 1024 target 15ms tupdate 16ms alpha 2 beta 20 quantum 1514b memory_limit 32Mb ecn_prob 10 qdisc fq_pie 0: dev wlp0s20f0u3 parent :1 limit 10240p flows 1024 target 15ms tupdate 16ms alpha 2 beta 20 quantum 1514b memory_limit 32Mb ecn_prob 10
可以看出我有 2 個 wifi 適配器。我的筆記型電腦內置了一個,即 Qualcomm Atheros (ath10k),fq_pie 無法在此啟動。
然而,fq_pie 可以在 TP Link (RTL8188EUS) 適配器上啟動。
我還嘗試了另外 2 台筆記型電腦(戴爾和惠普),集成的 wifi 適配器實際上並沒有執行 fq_pie。
有沒有辦法將 fq_pie 強制啟動到 Qualcomm Atheros 和其他 wifi 適配器?
系統詳情:
$ cat /proc/version Linux version 5.8.12-xanmod1-1 (makepkg@archlinux) (gcc (GCC) 10.2.0, GNU ld (GNU Binutils) 2.35) #1 SMP PREEMPT Wed, 30 Sep 2020 14:19:49 +0000 $ ip -V ip utility, iproute2-v5.7.0-77-gb687d1067169 $ tc -V tc utility, iproute2-v5.7.0-77-gb687d1067169
它似乎
net.core.default_qdisc
會在載入時影響介面驅動程序。如果核心模組是在更改之前載入net.core.default_qdisc
的,那麼以後不會影響它。一些介面已經改變了行為:多隊列介面將保留mq
,但它們的葉子繼承了這個預設值。lo或veth不會得到任何預設隊列。如果要確保在驅動程序之前更改 sysctl,您可以:
- 是否在 initramfs 腳本中進行了更改(可能需要進行一些調整),
- 從核心命令行載入它。此 Q/A告訴您,僅從您正在使用的核心 5.8 起,任何任意sysctl都是可能的。所以理論上你可以在啟動參數中添加一些東西(可能在 GRUB 的 GRUB_CMDLINE_LINUX 中)並忘記它:
sysctl.net.core.default_qdisc=fq_pie
但實際上這僅適用於內置驅動程序。
sch_fq_pie
內置編譯的可能性很小。
- 延遲載入驅動程序
wlp1s0
(我不知道在哪裡執行此操作)rmmod ath10k
所以modprobe ath10k
新的預設值適用。無論如何要立即更改介面的 qdisc,只需定義其 qdisc,這將覆蓋具有保留句柄的預設核心 qdisc
0:
。例如:tc qdisc add dev wlp1s0 handle 1: root fq_pie