设计云时到底要不要用vxlan,如果用vxlan到底要不要购买比较贵的smart nic做offload,采用软件vxlan还是硬件交换机vxlan,很难决策,这儿简单测试一下,给个参考,资源终究是有限的,成本还是有考虑的,了解清楚云上业务再做决策。
把网络比作一条水管,虹吸原理把水从一个池塘A抽到另一个池塘B,当然是水管越粗越好,水管粗细就是不同能力的网卡,一秒钟能从水管流出多少水就是吞吐,假如从水管入口滴一滴墨水,那墨水从入口到出口的时间就是单向时延,水管壁粗糙弯曲不直,水流就慢,时延就大,水在水管里流得越快单位时间从水管口流出来的水就越多,时延影响吞吐。水流速度主要取决于池塘A和池塘B的水位差,假如一个人甲向池塘A加水,另一个人乙从池塘B取水,甲乙动作快慢影响水位差,池塘大小就是buffer,池塘越大,甲乙动作对水位差影响越小,而水位差类似于链路层反压和TCP流量控制,甲乙就是TCP和系统调用。而真实的网络情况是很多水管很多池塘串连,水管有粗有细,池塘有大有小,很多甲乙,有胖有瘦有老有幼,瓶颈到底在哪里很难说清楚。
物理机物理口的MTU是1500,vxlan0,ovs internal口和虚拟机的网口MTU都是1450,host物理口打开多队列,虚拟机8核16G,vhost=on,网口无多队列。
最普通的环境,不做其它特殊优化,就看最通用的环境表现是怎样的。
两台物理机不同路径对打流量。
红色的是physical流量测试路径,两个物理机直接流量测试。
ip link add vxlan0 type vxlan id 1111 dstport 5799 remote 10.145.69.49 local 10.145.69.26 dev eth4
ip link set vxlan0 up
ip addr add dev vxlan0 192.168.111.1/24
ip link add vxlan0 type vxlan id 1111 dstport 5799 remote 10.145.69.26 local 10.145.69.49 dev eth4
ip link set vxlan0 up
ip addr add dev vxlan0 192.168.111.2/24
蓝色的是kernel vxlan流量测试路径,做上面的命令创建vxlan device,做vxlan encap/decap。
红色的是namespace vxlan流量测试路径,借用了neutron创建的namespace,br-int上连接的是internal类型的口,也做vxlan encpa/decap。
两个物理机上的两台虚拟机对打流量。
红色的是vm vlan流量测试路径,流量不做vxlan encap/decap。
绿色的是vm vxlan流量测试路径,流量做vxlan encap/decap。
5种测试都要经过host或者guest kernel tcp/ip stack,区别就是有没有kvm介入,有没有vxlan encap/decap。
没有硬件测试仪,用一些小软件模拟业务真实场景测试。
#用ping测试时延 ip netns exec qdhcp-5cc14009-86bb-4610-91a7-ae7627e8a5b5 ping 192.168.200.2 -c 100 #背景pps高 ,再用ping测试时延 iperf3 -c 192.168.200.2 -p 8099 -t 180 -l 1 -u #背景bps高,再用用ping测试时延 iperf3 -c 192.168.200.2 -p 8099 -t 180
#netperf测试TCP时延 netperf -H 192.168.111.2 -p 8077 -t TCP_RR -- -o mean_latency #netperf测试UDP时延 netperf -H 192.168.111.2 -p 8077 -t UDP_RR -- -o mean_latency
ping和iperf3测试结果,时延单位是ms。
netperf测试时延结果,时延单位是us。
测试时延工具用的是ping和netperf,ping和netperf用默认发包频率,ping是一秒一个包,netperf是连续发包,ping和netperf的值比较没意义。