Tc

強制啟用 fq_pie

  • October 19, 2020

我對為 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,但它們的葉子繼承了這個預設值。loveth不會得到任何預設隊列。

如果要確保在驅動程序之前更改 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

引用自:https://unix.stackexchange.com/questions/615174