刚开始着手要弄这个的时候,上网看了一下,就几个命令,以为很简单,没想到后面也是一波三折,如今凭记忆一点一点记录。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