[dpdk-dev] [RFC 0/7] changing mbuf pool handler

Hemant Agrawal hemant.agrawal at nxp.com
Thu Sep 22 13:52:45 CEST 2016


Hi Olivier

On 9/19/2016 7:12 PM, Olivier Matz wrote:
> Hello,
>
> Following discussion from [1] ("usages issue with external mempool").
>
> This is a tentative to make the mempool_ops feature introduced
> by David Hunt [2] more widely used by applications.
>
> It applies on top of a minor fix in mbuf lib [3].
>
> To sumarize the needs (please comment if I did not got it properly):
>
> - new hw-assisted mempool handlers will soon be introduced
> - to make use of it, the new mempool API [4] (rte_mempool_create_empty,
>   rte_mempool_populate, ...) has to be used
> - the legacy mempool API (rte_mempool_create) does not allow to change
>   the mempool ops. The default is "ring_<s|m>p_<s|m>c" depending on
>   flags.
> - the mbuf helper (rte_pktmbuf_pool_create) does not allow to change
>   them either, and the default is RTE_MBUF_DEFAULT_MEMPOOL_OPS
>   ("ring_mp_mc")
> - today, most (if not all) applications and examples use either
>   rte_pktmbuf_pool_create or rte_mempool_create to create the mbuf
>   pool, making it difficult to take advantage of this feature with
>   existing apps.
>
> My initial idea was to deprecate both rte_pktmbuf_pool_create() and
> rte_mempool_create(), forcing the applications to use the new API, which
> is more flexible. But after digging a bit, it appeared that
> rte_mempool_create() is widely used, and not only for mbufs. Deprecating
> it would have a big impact on applications, and replacing it with the
> new API would be overkill in many use-cases.

I agree with the proposal.

>
> So I finally tried the following approach (inspired from a suggestion
> Jerin [5]):
>
> - add a new mempool_ops parameter to rte_pktmbuf_pool_create(). This
>   unfortunatelly breaks the API, but I implemented an ABI compat layer.
>   If the patch is accepted, we could discuss how to announce/schedule
>   the API change.
> - update the applications and documentation to prefer
>   rte_pktmbuf_pool_create() as much as possible
> - update most used examples (testpmd, l2fwd, l3fwd) to add a new command
>   line argument to select the mempool handler
>
> I hope the external applications would then switch to
> rte_pktmbuf_pool_create(), since it supports most of the use-cases (even
> priv_size != 0, since we can call rte_mempool_obj_iter() after) .
>

I will still prefer if you can add the "rte_mempool_obj_cb_t *obj_cb, 
void *obj_cb_arg" into "rte_pktmbuf_pool_create". This single 
consolidated wrapper will almost make it certain that applications will 
not try to use rte_mempool_create for packet buffers.



> Comments are of course welcome. Note: the patchset is not really
> tested yet.
>
>
> Thanks,
> Olivier
>
> [1] http://dpdk.org/ml/archives/dev/2016-July/044734.html
> [2] http://dpdk.org/ml/archives/dev/2016-June/042423.html
> [3] http://www.dpdk.org/dev/patchwork/patch/15923/
> [4] http://dpdk.org/ml/archives/dev/2016-May/039229.html
> [5] http://dpdk.org/ml/archives/dev/2016-July/044779.html
>
>
> Olivier Matz (7):
>   mbuf: set the handler at mbuf pool creation
>   mbuf: use helper to create the pool
>   testpmd: new parameter to set mbuf pool ops
>   l3fwd: rework long options parsing
>   l3fwd: new parameter to set mbuf pool ops
>   l2fwd: rework long options parsing
>   l2fwd: new parameter to set mbuf pool ops
>
>  app/pdump/main.c                                   |   2 +-
>  app/test-pipeline/init.c                           |   3 +-
>  app/test-pmd/parameters.c                          |   5 +
>  app/test-pmd/testpmd.c                             |  16 +-
>  app/test-pmd/testpmd.h                             |   1 +
>  app/test/test_cryptodev.c                          |   2 +-
>  app/test/test_cryptodev_perf.c                     |   2 +-
>  app/test/test_distributor.c                        |   2 +-
>  app/test/test_distributor_perf.c                   |   2 +-
>  app/test/test_kni.c                                |   2 +-
>  app/test/test_link_bonding.c                       |   2 +-
>  app/test/test_link_bonding_mode4.c                 |   2 +-
>  app/test/test_link_bonding_rssconf.c               |  11 +-
>  app/test/test_mbuf.c                               |   6 +-
>  app/test/test_pmd_perf.c                           |   3 +-
>  app/test/test_pmd_ring.c                           |   2 +-
>  app/test/test_reorder.c                            |   2 +-
>  app/test/test_sched.c                              |   2 +-
>  app/test/test_table.c                              |   2 +-
>  doc/guides/prog_guide/mbuf_lib.rst                 |   2 +-
>  doc/guides/sample_app_ug/ip_reassembly.rst         |  13 +-
>  doc/guides/sample_app_ug/ipv4_multicast.rst        |  12 +-
>  doc/guides/sample_app_ug/l2_forward_job_stats.rst  |  33 ++--
>  .../sample_app_ug/l2_forward_real_virtual.rst      |  26 ++-
>  doc/guides/sample_app_ug/ptpclient.rst             |  12 +-
>  doc/guides/sample_app_ug/quota_watermark.rst       |  26 ++-
>  drivers/net/bonding/rte_eth_bond_8023ad.c          |  13 +-
>  drivers/net/bonding/rte_eth_bond_alb.c             |   2 +-
>  examples/bond/main.c                               |   2 +-
>  examples/distributor/main.c                        |   2 +-
>  examples/dpdk_qat/main.c                           |   3 +-
>  examples/ethtool/ethtool-app/main.c                |   4 +-
>  examples/exception_path/main.c                     |   3 +-
>  examples/ip_fragmentation/main.c                   |   4 +-
>  examples/ip_pipeline/init.c                        |  19 ++-
>  examples/ip_reassembly/main.c                      |  16 +-
>  examples/ipsec-secgw/ipsec-secgw.c                 |   2 +-
>  examples/ipv4_multicast/main.c                     |   6 +-
>  examples/kni/main.c                                |   2 +-
>  examples/l2fwd-cat/l2fwd-cat.c                     |   3 +-
>  examples/l2fwd-crypto/main.c                       |   2 +-
>  examples/l2fwd-jobstats/main.c                     |   2 +-
>  examples/l2fwd-keepalive/main.c                    |   2 +-
>  examples/l2fwd/main.c                              |  36 ++++-
>  examples/l3fwd-acl/main.c                          |   2 +-
>  examples/l3fwd-power/main.c                        |   2 +-
>  examples/l3fwd-vf/main.c                           |   2 +-
>  examples/l3fwd/main.c                              | 180 +++++++++++----------
>  examples/link_status_interrupt/main.c              |   2 +-
>  examples/load_balancer/init.c                      |   2 +-
>  .../client_server_mp/mp_server/init.c              |   3 +-
>  examples/multi_process/l2fwd_fork/main.c           |  14 +-
>  examples/multi_process/symmetric_mp/main.c         |   2 +-
>  examples/netmap_compat/bridge/bridge.c             |   2 +-
>  examples/packet_ordering/main.c                    |   2 +-
>  examples/performance-thread/l3fwd-thread/main.c    |   2 +-
>  examples/ptpclient/ptpclient.c                     |   3 +-
>  examples/qos_meter/main.c                          |   2 +-
>  examples/qos_sched/init.c                          |   2 +-
>  examples/quota_watermark/qw/main.c                 |   2 +-
>  examples/rxtx_callbacks/main.c                     |   2 +-
>  examples/skeleton/basicfwd.c                       |   3 +-
>  examples/tep_termination/main.c                    |  17 +-
>  examples/vhost/main.c                              |   2 +-
>  examples/vhost_xen/main.c                          |   2 +-
>  examples/vmdq/main.c                               |   2 +-
>  examples/vmdq_dcb/main.c                           |   2 +-
>  lib/librte_mbuf/rte_mbuf.c                         |  34 +++-
>  lib/librte_mbuf/rte_mbuf.h                         |  44 +++--
>  lib/librte_mbuf/rte_mbuf_version.map               |   7 +
>  70 files changed, 366 insertions(+), 289 deletions(-)
>




More information about the dev mailing list