在 macvlan 上使用 tc-netem 進行流量整形

在 macvlan 上使用 tc-netem 進行流量整形

我正在使用 macvlans 設定虛擬網絡,並且已將流量控制 tc 連接到每個網路。我將每個延遲設定為 90 毫秒。但在 ping 上我得到的時間是 0.02 秒。為什麼 tc 不能在 macvlan 上工作?

我正在使用以下命令:

tc qdisc add dev m1 root netem delay 90ms
tc qdisc add dev m2 root netem delay 90ms

然後從m1的ip ping到m2的ip。 m1 和 m2 是 macvlan。

答案1

您的問題與路由的完成方式有關,而不是與TC,內特姆或者麥克夫蘭

當從屬於主機的 IP 位址到達屬於主機的其他 IP 位址時,路由會lo透過查詢本機路由表(隱藏,嘗試ip route show table local)使用(環回)接口,並且從不使用 IP 位址所在的實際介面分配給。

您可以透過詢問內核它將選擇的路由來驗證這一點。例如,如果地址米1平方米分別是 192.0.2.2/24 和 192.0.2.3/24:

# ip route get from 192.0.2.2 to 192.0.2.3
local 192.0.2.3 from 192.0.2.2 dev lo table local uid 0 
    cache <local> 

如果您需要使用這些介面進行測試,那麼您需要一個具有自己的路由堆疊的其他系統來測試它們。該系統可以是真實的主機、虛擬機器、容器,或只是使用一個(或多個)附加網路命名空間,就像您可能開始做的那樣。

在我上面假設的情況下,如果 192.0.2.1 位於米1的 LAN(以及平方米介面被關閉以避免可能的不相關的 ARP 問題),ping 192.0.2.1會顯示延遲,因為米1將使用:

# ip route get from 192.0.2.2 192.0.2.1
192.0.2.1 from 192.0.2.2 dev m1 uid 0 
    cache 

第一次 ping 通常會造成兩倍的延遲損失,因為之前還完成了 ARP 請求來解析 IP 鏈接,這也會延遲。

相關內容