summaryrefslogtreecommitdiffstats
path: root/src/vnet/devices/virtio/vhost_user.c
AgeCommit message (Collapse)AuthorFilesLines
2019-02-21vhost: VPP stalls with vhost performing control plane actionsSteven Luong1-211/+248
Symptom ------- With NDR traffic blasting at VPP, bringing up a new VM with vhost connection to VPP causes packet drops. I am able to recreate this problem easily using a simple setup like this. TREX-------------- switch ---- VPP |---------------| |-------| Cause ----- The reason for the packet drops is due to vhost holding onto the worker barrier lock for too long in vhost_user_socket_read(). There are quite a few of system calls inside the routine. At the end of the routine, it unconditionally calls vhost_user_update_iface_state() for all message types. vhost_user_update_iface_state() also unconditionally calls vhost_user_rx_thread_placement() and vhost_user_tx_thread_placement(). vhost_user_rx_thread_placement scraps out all existing cpu/queue mappings for the interface and creates brand new cpu/queue mappings for the interface. This process is very disruptive and very expensive. In my opinion, this area of code needs a makeover. Fixes ----- * vhost_user_socket_read() is rewritten that it should not hold onto the worker barrier lock for system calls, or at least minimize the need for doing it. * Remove the call to vhost_user_update_iface_state as a default route at the end of vhost_user_socket_read(). There is only a couple of message types which really need to call vhost_user_update_iface_state(). We put the call to those message types which need it. * Remove vhost_user_rx_thread_placement() and vhost_user_tx_thread_placement from vhost_user_update_iface_state(). There is no need to repetatively change the cpu/queue mappings. * vhost_user_rx_thread_placement() is actually quite expensive. It should be called only once per queue for the interface. There is no need to scrap the existing cpu/queue mappings and create new cpu/queue mappings when the additional queues becomes active/enable. * Change to create the cpu/queue mappings for the first RX when the interface is created. Dont remove the cpu/queue mapping when the interface is disconnected. Remove the cpu/queue mapping only when the interface is deleted. The create vhost user interface CLI also has some very expensive system calls if the command is entered with the optional keyword "server" As a bonus, This patch makes the create vhost user interface binary-api and CLI thread safe. Do the protection for the small amount of code which is thread unsafe. Change-Id: I4a19cbf7e9cc37ea01286169882e5603e6d7eb77 Signed-off-by: Steven Luong <sluong@cisco.com>
2018-11-14Remove c-11 memcpy checks from perf-critical codeDave Barach1-3/+3
Change-Id: Id4f37f5d4a03160572954a416efa1ef9b3d79ad1 Signed-off-by: Dave Barach <dave@barachs.net>
2018-10-23c11 safe string handling supportDave Barach1-4/+4
Change-Id: Ied34720ca5a6e6e717eea4e86003e854031b6eab Signed-off-by: Dave Barach <dave@barachs.net>
2018-10-02vhost-user: add support for vlib_log APIJerome Tollet1-155/+99
Change-Id: I0af68f6b41d0024aa64b93a8b18e2d179bf939b0 Signed-off-by: Jerome Tollet <jtollet@cisco.com> Signed-off-by: Damjan Marion <damarion@cisco.com>
2018-10-02vhost-user: Interface state updatesJuraj Sloboda1-11/+12
Fix inconsistencies between admin and link interface states Admin down should imply link down: link_up = admin_up && link_ready Change-Id: I4d668d82d035b5d2ae508727f34f1722a0c3e677 Signed-off-by: Juraj Sloboda <jsloboda@cisco.com>
2018-10-02vhost_user: Fix setting MTU using uninitialized variableJuraj Sloboda1-2/+1
Change-Id: I0caa5fd584e3785f237d08f3d3be23e9bfee7605 Signed-off-by: Juraj Sloboda <jsloboda@cisco.com>
2018-09-20vhost: show vhost may display garbage after the interface nameSteven1-2/+3
DBGvpp# show vhost-user Virtio vhost-user interfaces Global: coalesce frames 32 time 1e-3 number of rx virtqueues in interrupt mode: 0 Interface: VirtualEthernet0/0/0�?x�D (ifindex 3) The fix is to use format_vnet_hw_if_index_name rather than hi->name. The former format the name with %v rather than %s Change-Id: If4d275e1eb249cf87b2d6b796b42f24769f9e3e3 Signed-off-by: Steven <sluong@cisco.com>
2018-09-12vhost: Fix VPP crash when reloading VM with mixed-type ports [VPP-1406]Yichen Wang1-1/+11
When VM is having mixed type of vhost-user and SRIOV ports, QEMU (RedHat v2.10) will not send disconnect signal to VPP, and just gives the new memory region directly. VPP is not able to handle new memory region mapping without disconnect signal first, which will result in a SEGV. The fix will handle the VM reboot scenario without explict disconnect signal from QEMU. The fix is to invalidate the avail, desc, and used pointers in the txvq when the new memory regions are received. This is because these pointers are not valid anymore with the new memory regions. In the input node, check to make sure the avail pointer is valid and punt if not. Change-Id: Ieb8b427b202f4442a58907dab1661d63a03650de Signed-off-by: Yichen Wang <yicwang@cisco.com>
2018-07-08vhost: Add multi-versioning supportMohsin Kazmi1-0/+2242
It also refactors the vhost code which was in one big file vhost-user.c. Receive side code is in vhost_user_input.c and Transmit side code is in vhost_user_output.c Change-Id: I1b539b5008685889723e228265786a2a3e9f3a78 Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>