剛開始着手要弄這個的時候,上網看了一下,就幾個命令,以爲很簡單,沒想到後面也是一波三折,如今憑記憶一點一點記錄。linux
Netem 與 TC 簡要說明bash
Netem 是 Linux 2.6 及以上內核版本提供的一個網絡模擬功能模塊。該功能模塊能夠用來在性能良好的局域網中,模擬出複雜的互聯網傳輸性能。例如:低帶寬、傳輸延遲、丟包等等狀況。使用 Linux 2.6 (或以上) 版本內核的不少 Linux 發行版都默認開啓了該內核模塊,好比:Fedora、Ubuntu、Redhat、OpenSuse、CentOS、Debian 等等。網絡
TC 是 Linux 系統中的一個用戶態工具,全名爲 Traffic Control (流量控制)。TC 能夠用來控制 Netem 模塊的工做模式,也就是說若是想使用 Netem 須要至少兩個條件,一是內核中的 Netem 模塊被啓用,另外一個是要有對應的用戶態工具 TC 。工具
首先看了一下目前使用的虛擬機linux版本,Fedora 9,Linux 2.6。性能
直接終端輸入:tc qdisc show,顯示段錯誤。ui
查看內核配置,make menuconfigspa
Networking --> Networking Options --> QoS and/or fair queuing --> Network emulator
make install沒有成功,後面還專門去官網下載了LINUX 3.2的版本嘗試,老是各類問題。
後來決定下載最新的fedora 29,一切從頭開始。(省略中間不少步......)
Fedora 29配置完成以後,試了一下tc qdisc show,顯示正常。
輸入延遲或者丟包的命令,就會報錯誤:RTNETLINK answers: No such file or directory (中間的各類嘗試其實都報這個錯誤,只是一直沒找到解決辦法,換了最新版以後仍是這個問題)
後來看到文章說:To properly use qdiscs, install thekernel-modules-extra
package。就是說內核中沒有集成包,須要手動安裝。
kernel-modules-extra
輸入:yum install kernel-modules-extra 進行安裝,中間可能因爲網絡緣由出現安裝不成功,後來再次安裝就行了。
安裝完畢再次輸入命令,RTNETLINK answers: No such file or directory
的錯誤就沒有了,覺得後面就沒問題了。
$:tc qdisc show (打印正常)
$tc qdisc add dev ens33 root netem delay 100ms 報錯:Error:Exclusivity flag on, cannot modify
雖然看懂了大概意思,可是實在不知道是什麼緣由,網上也基本上找不到相關的解決辦法。
偶然間輸入命令
$:tc qdisc change dev ens33 root netem delay 100ms 成功
$:tc qdisc change dev ens33 root netem loss 50% 成功
kernel-modules-extra
ping主機網絡確實有丟包,當時想一想實在不行就用change命令吧,也好使,繼續查資料看到:add
表示爲指定網卡添加 Netem 配置,change
表示修改已經存在的 Netem 配置到新的值,replace
表示替換已經存在的 Netem 配置的值。
若是要刪除網卡上的 Netem 配置可使用del:$ tc qdisc del dev enp0s5 root
看到這裏大概明白了,netem配置已經存在,因此使用add會報錯,只能用change。
懷着忐忑的心情把netem配置刪除(實在是小白,懼怕刪除配置又會出別的問題)
再次輸入add命令:$tc qdisc add dev ens33 root netem delay 100ms
成功。目前第一步算是完成了,描述可能比較混亂,只是但願本身作個記錄或者給遇到一樣問題的朋友一點點幫助。kernel-modules-extra
kernel-modules-extraRTNETLINK answers: No such file or directorytc qdisc change dev ens33 root netem loss 50% 成功
ping主機網絡確實有丟包,當時想一想實在不行就用change命令吧,也好使,繼續查資料看到:add
表示爲指定網卡添加 Netem 配置,change
表示修改已經存在的 Netem 配置到新的值,replace
表示替換已經存在的 Netem 配置的值。
若是要刪除網卡上的 Netem 配置可使用del:$ tc qdisc del dev enp0s5 root
addchangereplacedel:$ tc qdisc del dev enp0s5 root
看到這裏大概明白了,netem配置已經存在,因此使用add會報錯,只能用change。
懷着忐忑的心情把netem配置刪除(實在是小白,懼怕刪除配置又會出別的問題)
再次輸入add命令:$tc qdisc add dev ens33 root netem delay 100ms
成功。目前第一步算是完成了,描述可能比較混亂,只是但願本身作個記錄或者給遇到一樣問題的朋友一點點幫助。
看到這裏大概明白了,netem配置已經存在,因此使用add會報錯,只能用change。
懷着忐忑的心情把netem配置刪除(實在是小白,懼怕刪除配置又會出別的問題)
再次輸入add命令:$tc qdisc add dev ens33 root netem delay 100ms
成功。目前第一步算是完成了,描述可能比較混亂,只是但願本身作個記錄或者給遇到一樣問題的朋友一點點幫助。$tc qdisc add dev ens33 root netem delay 100ms