68. Hotplug on multi-processes

Currently secondary process will only sync ethdev from primary process at init stage, but it will not be aware if device is attached/detached on primary process at runtime.

While there is the requirement from application that take primary-secondary process model. The primary process work as a resource management process, it will create/destroy virtual device at runtime, while the secondary process deal with the network stuff with these devices.

So the orignial intention is to fix this gap, but beyond that the patch set provide a more comprehesive solution to handle different hotplug cases in multi-process situation, it cover below scenario:

  • Attach a device from the primary
  • Detach a device from the primary
  • Attach a device from a secondary
  • Detach a device from a secondary

In primary-secondary process model, we assume ethernet devices are shared by default, that means attach or detach a device on any process will broadcast to all other processes through mp channel then device information will be synchronized on all processes.

Any failure during attaching process will cause inconsistent status between processes, so proper rollback action should be considered.

68.1. Test Case: Attach physical device from primary or secondary

Start sample code as primary then secondary:

./dpdk-hotplug_mp --proc-type=auto

Check primary and secondary processes don’t have any device:

example> list
list all etherdev

Bind one port to igb_uio or vfio

Attach the physical device from primary or secondary, check primary and secondary processes attach the share device successfully:

example> attach 0000:88:00.0
example> list
list all etherdev
0       0000:88:00.0

Quit primary and secondary processes

Re-bind port to kernel state

68.2. Test Case: Detach physical device from primary or secondary

Bind one port to igb_uio or vfio

Start sample code as primary then secondary:

./dpdk-hotplug_mp --proc-type=auto

Check primary and secondary processes have the device:

example> list
list all etherdev
0       0000:88:00.0

Detach the physical device from primary or secondary, check primary and secondary processes detach the share device successfully:

example> detach 0000:88:00.0
example> list
list all etherdev

Quit primary and secondary processes

Re-bind port to kernel state

68.3. Test Case: Attach virtual device from primary or secondary

Start sample code as primary then secondary:

./dpdk-hotplug_mp --proc-type=auto

Check primary and secondary processes don’t have any device:

example> list
list all etherdev

Attach a virtual device from primary or secondary, check primary and secondary processes attach the share device successfully:

example> attach net_af_packet,iface=ens803f1
example> list
list all etherdev
0       net_af_packet

Quit primary and secondary processes

68.4. Test Case: Detach virtual device from primary or secondary

Start sample code as primary then secondary:

./dpdk-hotplug_mp --proc-type=auto

Check primary and secondary processes don’t have any device:

example> list
list all etherdev

Attach a virtual device from primary or secondary, check primary and secondary processes attach the share device successfully:

example> attach net_af_packet,iface=ens803f1
example> list
list all etherdev
0       net_af_packet

Detach the physical device from primary or secondary, check primary and secondary processes detach the share device successfully:

example> detach net_af_packet
example> list
list all etherdev

Quit primary and secondary processes

68.5. Test Case: Repeat to attach/detach physical device from primary or secondary

Start sample code as primary then secondary:

./dpdk-hotplug_mp --proc-type=auto

Check primary and secondary processes don’t have any device:

example> list
list all etherdev

Bind one port to igb_uio or vfio

Attach the physical device from primary or secondary, check primary and secondary processes attach the share device successfully:

example> attach 0000:88:00.0
example> list
list all etherdev
0       0000:88:00.0

Attach the same physical device from primary or secondary, check primary and secondary processes fail to attach same device again

Detach the physical device from primary or secondary, check primary and secondary processes detach the share device successfully:

example> detach 0000:88:00.0
example> list
list all etherdev

Detach the same physical device from primary or secondary, check primary and secondary processes fail to detach same device again

Repeat above attach and detach for 2 times

Quit primary and secondary processes

Re-bind port to kernel state

68.6. Test Case: Repeat to attach/detach virtual device from primary or secondary

Start sample code as primary then secondary:

./dpdk-hotplug_mp --proc-type=auto

Check primary and secondary processes don’t have any device:

example> list
list all etherdev

Attach a virtual device from primary or secondary, check primary and secondary processes attach the share device successfully:

example> attach net_af_packet,iface=ens803f1
example> list
list all etherdev
0       net_af_packet

Attach the same virtual device from primary or secondary, check primary and secondary processes fail to attach same device again

Detach the virtual device from primary or secondary, check primary and secondary processes detach the share device successfully:

example> detach net_af_packet
example> list
list all etherdev

Detach the same virtual device from primary or secondary, check primary and secondary processes fail to detach same device again

Repeat above attach and detach for 2 times

Quit primary and secondary processes

68.7. Test Case: Repeat to attach/detach vhost-user from primary or secondary

Start sample code as primary then secondary:

./dpdk-hotplug_mp --proc-type=auto

Check primary and secondary processes don’t have any device:

example> list
list all etherdev

Attach a virtual device from primary or secondary, check primary and secondary processes attach the share device successfully:

example> attach net_vhost0,iface=vhost-net,queues=1,client=0
example> list
list all etherdev
0       net_vhost0

Attach the same virtual device from primary or secondary, check primary and secondary processes fail to attach same device again

Detach the virtual device from primary or secondary, check primary and secondary processes detach the share device successfully:

example> detach net_vhost0
example> list
list all etherdev

Detach the same virtual device from primary or secondary, check primary and secondary processes fail to detach same device again

Repeat above attach and detach for 2 times

Quit primary and secondary processes

68.8. Test Case: Repeat to attach/detach virtio-user from primary or secondary

Start sample code as primary then secondary:

./dpdk-hotplug_mp --proc-type=auto

Check primary and secondary processes don’t have any device:

example> list
list all etherdev

Attach a virtual device from primary or secondary, check primary and secondary processes attach the share device successfully:

example> attach net_virtio_user0,mac=00:01:02:03:04:05,path=/home/yinan/dpdk/vhost-net,packed_vq=1,mrg_rxbuf=1,in_order=0
example> list
list all etherdev
0       net_virtio_user0

Attach the same virtual device from primary or secondary, check primary and secondary processes fail to attach same device again

Detach the virtual device from primary or secondary, check primary and secondary processes detach the share device successfully:

example> detach net_virtio_user0
example> list
list all etherdev

Detach the same virtual device from primary or secondary, check primary and secondary processes fail to detach same device again

Repeat above attach and detach for 2 times

Quit primary and secondary processes