[dpdk-dev] [PATCH v2 00/12] support to run vdev in the secondary process

Jianfeng Tan jianfeng.tan at intel.com
Thu Sep 28 15:55:47 CEST 2017


v2:
  - Address Gaetan's comment in patch 2.
  - Add RTE_LOGTYPE_BUS suggested by Gaetan.
  - Don't moving crypto vdev into drivers/bus/vdev, instead we use a
    new way (details in patch 3) which may break the ABI (the
    validate_abi.sh report a low warning of "Problems with Symbols").
  - Rename CONFIG_RTE_LIBRTE_VDEV to CONFIG_RTE_LIBRTE_VDEV_BUS.
  - Return error if there's an existing action for an action name.
  - Redefine rte_eal_primary_secondary_t as func pointer, and change
    the first parameter type to avoid explicit type casting.
  - Handle the case for vhost "primary - VM - secondary" sequence.
  - Fix a bug in recv multiple messages as one message.
  - Fix a bug of get vid of -1 in secondary process.
  - Remove the modification on helloworld example, instead we use
    symmetric_mp as the test case.
  - Address yuanhan's comment on code refactor on mp channel.

Patch 1~6: move vdev bus into drivers/bus.
Patch 7: add unix socket channel for primary/secondary communication.
Patch 8~9: make use of the channel to discover and probe virtual devices
         the primary process.
Patch 10~12: support to run vhost-pmd in the secondary process.

How to test:

Step 1: run symmetric_mp as the primary process.
  $ ./symmetric_mp -c 2 --proc-type=auto ... \
          --vdev 'net_vhost0,iface=/tmp/sock1,queues=2' \
	  --vdev 'net_vhost1,iface=/tmp/sock2,queues=2' \
	  -- -p 3 --num-procs=2 --proc-id=0

Step 2: run testpmd as the secondary process.
  $ ./symmetric_mp -c 4 --proc-type=auto -- -p 3 --num-procs=2 --proc-id=1

Step 3: start VM1.
  $ ./qemu-system-x86_64 ... -chardev socket,id=chr1,path=/tmp/sock1 \
          -netdev type=vhost-user,id=net1,chardev=chr1,vhostforce,queues=2 \
          -device virtio-net-pci,netdev=net1,mq=on,vectors=6 ...

Step 4: start VM2.
  $ ./qemu-system-x86_64 ... -chardev socket,id=chr1,path=/tmp/sock2 \
          -netdev type=vhost-user,id=net1,chardev=chr1,vhostforce,queues=2 \
          -device virtio-net-pci,netdev=net1,mq=on,vectors=6 ...

Step 5: enable multi queue in VM1 and VM2.
  $ ethtool -L ethX combined 2

Note in this test case, only queue 1, i.e., secondary process can process
packets. To use queue 1, basically, we can run command like:
  $ taskset -c 1 <commands>


Jianfeng Tan (12):
  cryptodev: remove crypto vdev init API
  eal: avoid calling rte_vdev_init()
  cryptodev: avoid dependency on rte_vdev.h
  bus/fslmc: introduce RTE_LOGTYPE_BUS for bus drivers
  bus/vdev: move to vdev bus to drivers/bus
  bus/vdev: normalize log type
  eal: add channel for primary/secondary communication
  bus/vdev: scan and probe vdev in secondary processes
  ethdev: support attach vdev in secondary process
  vhost: allocate virtio_net in memzone
  vhost: support to kick in secondary process
  net/vhost: support to run in the secondary process

 config/common_base                              |   5 +
 doc/guides/rel_notes/deprecation.rst            |   5 -
 drivers/bus/Makefile                            |   2 +
 drivers/bus/fslmc/fslmc_bus.c                   |   5 +-
 drivers/bus/fslmc/fslmc_logs.h                  |  42 +-
 drivers/bus/fslmc/fslmc_vfio.c                  |   4 +-
 drivers/bus/vdev/Makefile                       |  55 +++
 drivers/bus/vdev/rte_bus_vdev_version.map       |  10 +
 drivers/bus/vdev/rte_vdev.h                     | 153 ++++++++
 drivers/bus/vdev/vdev.c                         | 440 +++++++++++++++++++++
 drivers/bus/vdev/vdev_logs.h                    |  40 ++
 drivers/net/vhost/rte_eth_vhost.c               | 200 +++++++++-
 lib/librte_cryptodev/rte_cryptodev.c            |   6 -
 lib/librte_cryptodev/rte_cryptodev.h            |  18 -
 lib/librte_cryptodev/rte_cryptodev_pmd.c        |   9 +-
 lib/librte_cryptodev/rte_cryptodev_vdev.c       | 161 ++++++++
 lib/librte_cryptodev/rte_cryptodev_vdev.h       |   3 +-
 lib/librte_cryptodev/rte_cryptodev_version.map  |   1 -
 lib/librte_eal/bsdapp/eal/Makefile              |   1 -
 lib/librte_eal/bsdapp/eal/rte_eal_version.map   |   8 +
 lib/librte_eal/common/Makefile                  |   2 +-
 lib/librte_eal/common/eal_common_dev.c          |  21 +-
 lib/librte_eal/common/eal_common_log.c          |   1 +
 lib/librte_eal/common/eal_common_proc.c         | 498 ++++++++++++++++++++++++
 lib/librte_eal/common/eal_common_vdev.c         | 342 ----------------
 lib/librte_eal/common/eal_filesystem.h          |  18 +
 lib/librte_eal/common/eal_private.h             |  10 +
 lib/librte_eal/common/include/rte_dev.h         |  24 +-
 lib/librte_eal/common/include/rte_eal.h         |  68 ++++
 lib/librte_eal/common/include/rte_log.h         |   1 +
 lib/librte_eal/common/include/rte_vdev.h        | 131 -------
 lib/librte_eal/linuxapp/eal/Makefile            |   1 -
 lib/librte_eal/linuxapp/eal/eal.c               |   6 +
 lib/librte_eal/linuxapp/eal/rte_eal_version.map |   8 +
 lib/librte_ether/rte_ethdev_vdev.h              |  26 +-
 lib/librte_vhost/rte_vhost.h                    |   3 +
 lib/librte_vhost/rte_vhost_version.map          |   7 +
 lib/librte_vhost/socket.c                       |   2 +
 lib/librte_vhost/vhost.c                        |  71 +++-
 lib/librte_vhost/vhost.h                        |   7 +-
 lib/librte_vhost/vhost_user.c                   |  17 +-
 mk/rte.app.mk                                   |   1 +
 42 files changed, 1799 insertions(+), 634 deletions(-)
 create mode 100644 drivers/bus/vdev/Makefile
 create mode 100644 drivers/bus/vdev/rte_bus_vdev_version.map
 create mode 100644 drivers/bus/vdev/rte_vdev.h
 create mode 100644 drivers/bus/vdev/vdev.c
 create mode 100644 drivers/bus/vdev/vdev_logs.h
 create mode 100644 lib/librte_cryptodev/rte_cryptodev_vdev.c
 delete mode 100644 lib/librte_eal/common/eal_common_vdev.c
 delete mode 100644 lib/librte_eal/common/include/rte_vdev.h

-- 
2.7.4



More information about the dev mailing list