The mergeable buffer feature is needed to support jumbo MTU in non-DPDK VM on a DPDK compute. It was introduced in contrail 3.2.8.0 and 4.0/4.1 releases. When upgrading to a contrail version with mergeable buffer turned on by default, you may notice a few types of VMs (i.e. VLC vMME VM, MetaSwitch Perimeta VOIP VM etc.) fail to do PXE boot up or rx/tx traffic to vRouter in DPDK mode.
This is occurs because these VMs do not have any features used for QEMU 2.5 to pass to the vRouter. When the vRouter restarts, they send 0x0 code to the vRouter, but vRouter is expecting anything other than 0x0.
If you see the following log entry in /var/log/contrail/contrail-vrouter-dpdk-stdout.log, it means VM connected to vRouter by tap3f826968-be might not able to tx/rx traffic to/from vRouter.
2018-01-29 09:31:10,769 UVHOST: Client _tap3f826968-be: handling message 2
2018-01-29 09:31:10,769 UVHOST: SET FEATURES: 0x0
This issue is tracked by LP 1746578, which has been fixed in 3.2.11.0, 4.0.3.0, 4.1.1.0 and 5.0. A workaround is possible if an upgrade to the aforementioned releases is not desirable.
A possible workaround is to disable merger buffer in dpdk-vrouter.ini file and restart vRouter to be backward compatible with the particular VNF you are using
-
Modify /etc/contrail/supervisord_vrouter_files/contrail-vrouter-dpdk.ini to include "--no-mrgbuf" switch in the command line:
From:
command=taskset 0xf taskset 0xf taskset 0xf /usr/bin/contrail-vrouter-dpdk --no-daemon --vdev "eth_bond_bond0,mode=4,xmit_policy=l34,socket_id=1,mac=14:02:ec:66:b8:dc,slave=0000:87:00.0,slave=0000:09:00.1" --vlan_tci "722" --vlan_fwd_intf_name "bond0" --socket-mem 1024,1024
To:
command=taskset 0xf taskset 0xf taskset 0xf /usr/bin/contrail-vrouter-dpdk --no-daemon --no-mrgbuf --vdev "eth_bond_bond0,mode=4,xmit_policy=l34,socket_id=1,mac=14:02:ec:66:b8:dc,slave=0000:87:00.0,slave=0000:09:00.1" --vlan_tci "722" --vlan_fwd_intf_name "bond0" --socket-mem 1024,1024
-
Restart supervisor-vrouter
root@bcomp80:service supervisor-vrouter restart
-
Verify that '--no-mrgbuf'
flag is effective
Without '--no-mrgbuf'
flag,
root@bcomp80:~# ps -eaf | grep dpdk
root 32470 32457 99 09:19 ? 04:36:28 /usr/bin/contrail-vrouter-dpdk --no-daemon --vdev eth_bond_bond1,mode=4,xmit_policy=l34,socket_id=0,mac=8c:dc:d4:b1:88:20,slave=0000:08:00.0,slave=0000:08:00.1 --vlan_tci 1423 --vlan_fwd_intf_name bond1 --socket-mem 1024 1024
root 37692 20464 0 09:54 pts/3 00:00:00 grep --color=auto /usr/bin/contrail-vrouter-dpdk
With '--no-mrgbuf'
flag,
root@bcomp80:~# ps -ef | grep dpdk root 34915 34902 99 14:51 ? 01:29:42 /usr/bin/contrail-vrouter-dpdk --no-daemon --no-mrgbuf --vdev eth_bond_bond1,mode=4,xmit_policy=l34,socket_id=0,mac=00:11:0a:68:a5:98,slave=0000:08:00.0,slave=0000:08:00.1 --vlan_tci 1423 --vlan_fwd_intf_name bond1 --socket-mem 1024 1024
root 39912 27920 0 15:03 pts/11 00:00:00 grep --color=auto dpdk
-
Restart VM that fails to communicate with vRouter.