现在,我正在用tc prio qdisc挣扎几个小时。 我已经阅读了lartc文档,示例和HowTos,但是这整个事情对我来说还是有点新奇的,有点令人困惑:)
所以这是我的情况:几个文件服务器提供大量的HTTP和FTPstream量。 我需要优先考虑mysqlstream量,因为通常当链接已满时,sqlstream量变得缓慢和/或乱码,导致连接错误,超时等等。
这是我迄今为止:
# tc qdisc add dev eth0 root handle 1: prio # tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip dport 22 0xffff flowid 1:1 # tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip dport 3306 0xffff flowid 1:1 # tc filter add dev eth0 parent 1: prio 3 protocol all u32 match u32 0 0 flowid 1:3 # tc -s qdisc ls dev eth0 qdisc prio 1: root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 Sent 125836067 bytes 87549 pkt (dropped 0, overlimits 0 requeues 347) backlog 0b 0p requeues 347
如果我没有被lartc docs弄错,这应该把ssh和mysql的stream量放到prio band 1,其他所有放到prio band 3,根据文档,prio qdisc默认有3个band,低级band应该有更高的优先级
任何人都可以证实或否认这一点,或者你有其他想法吗? 我不想在生产系统上testing这个,我可以绝对肯定它会工作。 由于他们没有明显的stream量分离,我被统计推翻了
编辑:我只是做了一些更多的testing这个configuration,做一个ping在服务器上,加载链接,ping从40ms到170ms。 这样做:
# tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip protocol 1 0xff flowid 1:1
平下降到40毫秒,所以这可能实际上已经工作:)
编辑2:经过一些更多的testing,我想出了以下内容:
tc qdisc add dev eth0 root handle 1: prio tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip dport 22 0xffff flowid 1:1 tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip dport 3306 0xffff flowid 1:1 tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip protocol 1 0xff flowid 1:1
用于匹配可能使用的“任何其他stream量”
tc filter add dev eth0 protocol ip parent 1: prio 2 u32 match ip src 0/0 flowid 1:2
要么
tc filter add dev eth0 parent 1: prio 2 protocol all u32 match u32 0 0 flowid 1:2
但是我发现没有指定一个“全部捕捉”filter也没有工作,似乎默认的prio乐队已经很低。
总之,这里有一个简单的解决scheme,可以根据任何参数获得优先stream量,而不会影响带宽
tc qdisc add dev eth0 root handle 1: prio tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip dport 22 0xffff flowid 1:1 tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip dport 3306 0xffff flowid 1:1 tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip protocol 1 0xff flowid 1:1
阐释:
你可以有“u32匹配src”或指定一项运动或任何协议
默认的pfifo_fast qdisc应该已经可以通过服从ToS位来做你正在做的事情了。 所以,另一个解决scheme,根本不用搞tc,只需要configuration你的ssh和MySql守护进程来设置它们的stream量上的ToS位。