DPDK Summit North America presentations are online!
Skip to main content
Category

Blog

DPDK blog posts

First release of a DPDK stable branch

By Blog

Originally posted by Yuanhan Liu yuanhan.liu at linux.intel.com on the dpdk-stable mailing list


Hi all,

Please join me in announcing the first DPDK stable release:
	http://fast.dpdk.org/rel/dpdk-16.07.1.tar.xz

It includes most bug fixing patches before v16.11-rc1. Few
are missed in this release window and will be carried in
the next stable release.

Thanks.

	--yliu

---
 app/test-pmd/cmdline.c                             |   2 +-
 app/test-pmd/testpmd.c                             |  10 +-
 app/test/test_cryptodev.c                          |  14 +--
 buildtools/pmdinfogen/pmdinfogen.c                 |   2 +-
 doc/guides/rel_notes/release_16_07.rst             |  50 +++++++++
 drivers/crypto/kasumi/rte_kasumi_pmd.c             |   8 +-
 drivers/crypto/null/null_crypto_pmd_ops.c          |   2 +-
 drivers/crypto/qat/qat_adf/icp_qat_fw.h            |   2 +-
 drivers/crypto/snow3g/rte_snow3g_pmd.c             |   8 +-
 drivers/net/e1000/igb_rxtx.c                       |   2 +-
 drivers/net/enic/base/vnic_dev.c                   |  36 ++++---
 drivers/net/enic/enic_rxtx.c                       |   5 +-
 drivers/net/fm10k/fm10k_ethdev.c                   |   5 +
 drivers/net/i40e/base/i40e_common.c                |   2 +-
 drivers/net/i40e/i40e_ethdev.c                     |  37 ++++---
 drivers/net/i40e/i40e_rxtx.c                       |  15 ++-
 drivers/net/i40e/i40e_rxtx_vec.c                   |  16 ++-
 drivers/net/ixgbe/base/ixgbe_common.c              | 113 ++++++++++++---------
 drivers/net/ixgbe/base/ixgbe_common.h              |   1 +
 drivers/net/ixgbe/base/ixgbe_vf.c                  |  13 +--
 drivers/net/ixgbe/base/ixgbe_x550.c                |  57 +++--------
 drivers/net/ixgbe/base/ixgbe_x550.h                |   2 -
 drivers/net/ixgbe/ixgbe_ethdev.c                   |  12 ++-
 drivers/net/ixgbe/ixgbe_rxtx_vec_common.h          |  16 ++-
 drivers/net/mlx4/mlx4.c                            |   8 +-
 drivers/net/mlx5/mlx5.c                            |   8 +-
 drivers/net/mlx5/mlx5.h                            |   8 +-
 drivers/net/mlx5/mlx5_ethdev.c                     |   4 +-
 drivers/net/mlx5/mlx5_fdir.c                       |   8 +-
 drivers/net/mlx5/mlx5_mac.c                        |   8 +-
 drivers/net/mlx5/mlx5_mr.c                         |   8 +-
 drivers/net/mlx5/mlx5_prm.h                        |   4 +-
 drivers/net/mlx5/mlx5_rss.c                        |   8 +-
 drivers/net/mlx5/mlx5_rxmode.c                     |   8 +-
 drivers/net/mlx5/mlx5_rxq.c                        |   8 +-
 drivers/net/mlx5/mlx5_rxtx.c                       |   8 +-
 drivers/net/mlx5/mlx5_rxtx.h                       |   8 +-
 drivers/net/mlx5/mlx5_stats.c                      |   4 +-
 drivers/net/mlx5/mlx5_trigger.c                    |   4 +-
 drivers/net/mlx5/mlx5_txq.c                        |   8 +-
 drivers/net/mlx5/mlx5_vlan.c                       |   4 +-
 drivers/net/nfp/nfp_net.c                          |   4 +-
 drivers/net/pcap/rte_eth_pcap.c                    |   4 +-
 drivers/net/virtio/virtio_ethdev.c                 |   8 +-
 drivers/net/virtio/virtio_user/virtio_user_dev.c   | 112 ++++++++++++--------
 drivers/net/virtio/virtio_user_ethdev.c            |  42 +++++---
 examples/ip_pipeline/config/diagram-generator.py   |   2 +-
 .../ip_pipeline/config/pipeline-to-core-mapping.py |   2 +-
 examples/ip_pipeline/cpu_core_map.c                |   8 ++
 lib/librte_eal/bsdapp/contigmem/contigmem.c        |   8 +-
 lib/librte_eal/common/eal_common_pci.c             |   1 +
 lib/librte_eal/common/include/rte_version.h        |   2 +-
 lib/librte_eal/linuxapp/eal/eal_memory.c           |  13 +--
 lib/librte_hash/rte_cuckoo_hash.c                  |  12 ++-
 lib/librte_mbuf/rte_mbuf.c                         |   8 +-
 lib/librte_mempool/rte_mempool.c                   |   2 +-
 lib/librte_sched/rte_sched.c                       |  18 ++--
 lib/librte_table/rte_table_version.map             |   3 +
 lib/librte_timer/rte_timer.c                       |   2 +-
 pkg/dpdk.spec                                      |   2 +-
 tools/dpdk-devbind.py                              |  11 +-
 tools/dpdk-pmdinfo.py                              |   2 +-
 62 files changed, 495 insertions(+), 317 deletions(-)


Alejandro Lucero (1):
      net/nfp: fix copying MAC address

Aleksey Katargin (1):
      table: fix symbol exports

Alex Zelezniak (1):
      net/ixgbe: fix VF reset to apply to correct VF

Ali Volkan Atli (1):
      net/e1000: fix returned number of available Rx descriptors

Arek Kusztal (1):
      app/test: fix verification of digest for GCM

Beilei Xing (2):
      net/i40e: fix dropping packets with ethertype 0x88A8
      net/i40e: fix parsing QinQ packets type

Bruce Richardson (1):
      net/mlx: fix debug build with gcc 6.1

Christian Ehrhardt (1):
      examples/ip_pipeline: fix Python interpreter

Deepak Kumar Jain (2):
      crypto/null: fix key size increment value
      crypto/qat: fix FreeBSD build

Dror Birkman (1):
      net/pcap: fix memory leak in jumbo frames

Ferruh Yigit (2):
      app/testpmd: fix help of MTU set commmand
      pmdinfogen: fix clang build

Gary Mussar (1):
      tools: fix virtio interface name when binding

Gowrishankar Muthukrishnan (1):
      examples/ip_pipeline: fix lcore mapping for ppc64

Hiroyuki Mikita (1):
      sched: fix releasing enqueued packets

James Poole (1):
      app/testpmd: fix timeout in Rx queue flushing

Jianfeng Tan (3):
      net/virtio_user: fix first queue pair without multiqueue
      net/virtio_user: fix wrong sequence of messages
      net/virtio_user: fix error management during init

Jim Harris (1):
      contigmem: zero all pages during mmap

John Daley (1):
      net/enic: fix bad L4 checksum flag on ICMP packets

Karmarkar Suyash (1):
      timer: fix lag delay

Maciej Czekaj (1):
      mem: fix crash on hugepage mapping error

Nelson Escobar (1):
      net/enic: fix freeing memory for descriptor ring

Olivier Matz (4):
      app/testpmd: fix crash when mempool allocation fails
      tools: fix json output of pmdinfo
      mbuf: fix error handling on pool creation
      mem: fix build with -O1

Pablo de Lara (3):
      hash: fix ring size
      hash: fix false zero signature key hit lookup
      crypto: fix build with icc

Qi Zhang (1):
      net/i40e/base: fix UDP packet header

Rich Lane (1):
      net/i40e: fix null pointer dereferences when using VMDq+RSS

Weiliang Luo (1):
      mempool: fix corruption due to invalid handler

Xiao Wang (5):
      net/fm10k: fix MAC address removal from switch
      net/ixgbe/base: fix pointer check
      net/ixgbe/base: fix check for NACK
      net/ixgbe/base: fix possible corruption of shadow RAM
      net/ixgbe/base: fix skipping PHY config

Yangchao Zhou (1):
      pci: fix memory leak when detaching device

Yuanhan Liu (1):
      version: 16.07.1

Yury Kylulin (2):
      net/ixgbe: fix mbuf leak during Rx queue release
      net/i40e: fix mbuf leak during Rx queue release

Zhiyong Yang (1):
      net/virtio: fix xstats name

The TCP stack ANS works with Redis and NGINX ports

By Blog

Originally posted by zimeiw zimeiw at 163.com on the dpdk-dev mailing list


hi,


The tcp/ip stack is developed based on dpdk.
tcp/ip stack and APP deployment.
         |-------|       |-------|       |-------|
         |  APP  |       |  APP  |       |  APP  |
         |       |       |       |       |       |
         |       |       |       |       |       |
         |-------|       |-------|       |-------|
             |               |               |
--------------------------------------------------
netdpsock    |               |               |          
             fd              fd              fd
             |               |               |
--------------------------------------------------
netdp        |               |               |
         |-------|       |-------|       |-------|
         | TCP   |       |  TCP  |       | TCP   |
         |       |       |       |       |       |
         |       |       |       |       |       |
         |       |       |       |       |       |
         |---------------------------------------|       
         |               IP/ARP/ICMP             |
         |---------------------------------------|       
         |       |       |       |       |       |
         |LCORE0 |       |LCORE1 |       |LCORE2 |
         |-------|       |-------|       |-------|
             |               |               |
             ---------------RSS---------------
                             | 
         |---------------------------------------| 
         |                  NIC                  | 
         |---------------------------------------| 
NIC distribute packets to different lcore based on RSS, so same TCP flow are handled in the same lcore.
Each lcore has own TCP stack. so no share data between lcores, free lock.
IP/ARP/ICMP are shared between lcores.
APP process runs as a tcp server, only listens on one lcore and accept tcp connections from the lcore, so the APP process number shall large than the lcore number. The APP processes are deployed on each lcore automaticly and averagely.
APP process runs as a tcp client, app process can communicate with each lcore. The tcp connection can be located in specified lcore automaticly.
APP process can bind the same port if enable reuseport, APP process could accept tcp connection by round robin.
If NIC don't support multi queue or RSS, shall enhance opendp_main.c, reserve one lcore to receive and send packets from NIC, and distribute packets to lcores of netdp tcp stack by software RSS.
   2. netdpsock are compatible with BSD socket, so it is easy to porting app to run in netdp stack.
nginx is already porting to run in netdp, a few code are changed.  link: https://github.com/opendp/dpdk-nginx
redis is also porting. link: https://github.com/opendp/dpdk-redis


   3. Performance.
one lcore, one http server, ab testing 

Concurrency Level:      500
Time taken for tests:   0.642 seconds
Complete requests:      30000
Failed requests:        0
Total transferred:      4530000 bytes
HTML transferred:       1890000 bytes
Requests per second:    46695.59 [#/sec] (mean)
Time per request:       10.708 [ms] (mean)
Time per request:       0.021 [ms] (mean, across all concurrent requests)
Transfer rate:          6885.78 [Kbytes/sec] received
one lcore, one nginx server, ab testing 
Concurrency Level:      500
Time taken for tests:   0.965 seconds
Complete requests:      30000
Failed requests:        0
Total transferred:      25320000 bytes
HTML transferred:       18360000 bytes
Requests per second:    31092.43 [#/sec] (mean)
Time per request:       16.081 [ms] (mean)
Time per request:       0.032 [ms] (mean, across all concurrent requests)
Transfer rate:          25626.97 [Kbytes/sec] received
one lcore, one redis server, redis-bench testing 
root at h163:~/dpdk-redis# ./src/redis-benchmark -h 2.2.2.2  -p 6379 -n 100000 -c 50 -q
PING_INLINE: 86655.11 requests per second
PING_BULK: 90497.73 requests per second
SET: 84317.03 requests per second
GET: 85106.38 requests per second
INCR: 86580.09 requests per second
LPUSH: 83263.95 requests per second
LPOP: 83612.04 requests per second
SADD: 85034.02 requests per second
SPOP: 86430.43 requests per second
LPUSH (needed to benchmark LRANGE): 84245.99 requests per second
LRANGE_100 (first 100 elements): 46948.36 requests per second
LRANGE_300 (first 300 elements): 19615.54 requests per second
LRANGE_500 (first 450 elements): 11584.80 requests per second
LRANGE_600 (first 600 elements): 10324.18 requests per second
MSET (10 keys): 66401.06 requests per second
Still didn't test multicore tcp performance because lack test tools and env.


For detail test result, please refer to https://github.com/opendp/dpdk-odp


--
Best Regards,
zimeiw