dev.dpdk.org archive mirror
 help / color / mirror / Atom feed
From: Olivier MATZ <olivier.matz-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
To: Zoltan Kiss <zoltan.kiss-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
	"Ananyev,
	Konstantin"
	<konstantin.ananyev-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
	"dev-VfR2kkLFssw@public.gmane.org"
	<dev-VfR2kkLFssw@public.gmane.org>
Subject: Re: [PATCH v2 1/5] mbuf: fix clone support when application uses private mbuf data
Date: Sat, 28 Mar 2015 22:19:12 +0100	[thread overview]
Message-ID: <55171AD0.7040702@6wind.com> (raw)
In-Reply-To: <55159D39.1040608-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>

Hi Zoltan,

On 03/27/2015 07:11 PM, Zoltan Kiss wrote:
>> Sorry if it was not clear in my previous messages, but I agree
>> with your description. When attaching a mbuf, only data, not
>> metadata should be shared.
>>
>> In the solution you are suggesting (quoted above), you say we need
>> to set mi->priv_size to md->priv_size in rte_pktmbuf_attach(). I felt
>> this was not possible, but it depends on the meaning we give to
>> priv_size:
>>
>> 1. If the meaning is "the size of the private data embedded in this
>>     mbuf", which is the most logical meaning, we cannot do this
>>     affectation
>>
>> 2. If the meaning is "the size of the private data embedded in the
>>     mbuf the buf_addr is pointing to" (which is harder to get), the
>>     affectation makes sense.
>>
>>  From what I understand, you feel we should use 2/ as priv_size
>> definition. Is it correct?
>>
>> In my previous message, the definition of m->priv_size was 1/,
>> so that's why I felt assigning mi->priv_size to md->priv_size was
>> not possible.
>>
>> I agree 2/ is probably a good choice, as it would allow to attach
>> to a mbuf with a different priv_size. It may require some additional
>> comments above the field in the structure to explain that.
> I think we need to document it in the comments very well that you can
> attach mbuf's to each other with different private area sizes, and
> applications should care about this difference. And we should give a
> macro to get the private area size, which will get rte_mbuf.mp->priv_size.
> Actually we should give some better name to rte_mbuf.priv_size, it's a
> bit misleading now. Maybe direct_priv_size?

I agree it should be well documented in the API comments, but I'm
not sure it's worth changing the name of the field. After all,
m->buf_addr and m->buf_len are also related to the buffer of the
direct mbuf without beeing named "direct_*".


>>>>> Introducing rte_mbuf_pool_create() seems a good idea to me, it
>>>>> would hide 'rte_pktmbuf_pool_private' from the user and force
>>>>> to initialize all the required fields (mbuf_data_room_size only
>>>>> today, and maybe mbuf_priv_size).
>>>>>
>>>>> The API would be:
>>>>>
>>>>> struct rte_mempool *
>>>>> rte_mbuf_pool_create(const char *name, unsigned n, unsigned elt_size,
>>>>>     unsigned cache_size, size_t mbuf_priv_size,
>>>>>     rte_mempool_obj_ctor_t *obj_init, void *obj_init_arg,
>>>>>     int socket_id, unsigned flags)
>>>>>
>>>>> I can give it a try and send a patch for this.
>>>>
>>>> About this, it is not required anymore for this patch series if we
>>>> agree with my comment above.
>>>
>>> I still think we need some way to setup priv_size on a per-mempool
>>> basis.
>>> Doing that in rte_mbuf_pool_create() seems like a good thing to me.
>>> Not sure, why you decided to drop it?
>>
>> I think we can already do it without changing the API by providing
>> our own rte_pktmbuf_init and rte_pktmbuf_pool_init.
>>
>> rte_pktmbuf_init() has to set:
>>    m->buf_len = mp->elt_size - sizeof(struct mbuf);
>>    m->priv_size = sizeof(struct mbuf) - sizeof(struct rte_mbuf);
> What's struct mbuf? If we take my assumption above, direct_priv_size
> could go uninitalized, and we can set it when attaching.

In this example, "struct mbuf" is the mbuf used by the application:

struct mbuf {
	struct rte_mbuf rte_mb;
	struct app_private priv;
};

Therefore, we have:

sizeof(struct mbuf) = sizeof(struct rte_mbuf) +
	sizeof(struct app_private);


About keeping the m->priv_size field not initialized, I'm not really
convinced because we would always have to use the pool->mbuf_priv_size
when we want to get the address of data buffer embedded in a mbuf. This
implies several indirections, and we have only one if the info is
already in the mbuf.


>> rte_pktmbuf_pool_init() has to set:
>>    /* we can use the default function */
>>    mbp_priv->mbuf_data_room_size = MBUF_RXDATA_SIZE +
>>        RTE_PKTMBUF_HEADROOM;
>>
>> In this case, it is possible to calculate the mbuf_priv_size only
>> from the pool object:
>>
>>    mbuf_priv_size = pool->elt_size - RTE_PKTMBUF_HEADROOM -
>>     pool_private->mbuf_data_room_size -
>>     sizeof(rte_mbuf)
> My understanding is that the pool private date is something completely
> different than the private data of the mbufs. I think
> rte_mempool.priv_size should be initialized in *mp_init.

As I said in my previous mail, I think we don't need to have
pool_private->mbuf_priv_size for this series, as it can be
calculated from what we already have in pool_private. I'll send
a v3 patch that implement this solution, and it can be a base for
discussions.

However, I think the way mbuf pools are initialized may need some
rework, maybe using rte_mbuf_pool_create() as Konstantin suggested.
I'll try to do some reworks in this area in another series.

Regards,
Olivier



> 
>>
>>
>> I agree it's not ideal, but I think the mbuf pool initialization
>> is another problem. That's why I suggested to change this in a
>> separate series that will add rte_mbuf_pool_create() with the
>> API described above. Thoughts?
> 
> 
>>
>>
>> Thanks,
>> Olivier
>>
>>
>>>
>>> Konstantin
>>>
>>>>
>>>> I'll send a separate patch for that. It's probably a good occasion
>>>> to get rid of the pointer casted into an integer for
>>>> mbuf_data_room_size.
>>>>
>>>> Regards,
>>>> Olivier

  parent reply	other threads:[~2015-03-28 21:19 UTC|newest]

Thread overview: 101+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-25 17:00 [PATCH 0/5] mbuf: enhancements of mbuf clones Olivier Matz
     [not found] ` <1427302838-8285-1-git-send-email-olivier.matz-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2015-03-25 17:00   ` [PATCH 1/5] mbuf: fix clone support when application uses private mbuf data Olivier Matz
     [not found]     ` <1427302838-8285-2-git-send-email-olivier.matz-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2015-03-26 13:35       ` Bruce Richardson
2015-03-26 15:30         ` Olivier MATZ
2015-03-25 17:00   ` [PATCH 2/5] mbuf: allow to clone an indirect mbuf Olivier Matz
2015-03-25 17:00   ` [PATCH 3/5] test/mbuf: rename mc variable in m Olivier Matz
2015-03-25 17:00   ` [PATCH 4/5] test/mbuf: enhance mbuf refcnt test Olivier Matz
2015-03-25 17:00   ` [PATCH 5/5] test/mbuf: verify that cloning a clone works properly Olivier Matz
     [not found]     ` <1427302838-8285-6-git-send-email-olivier.matz-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2015-03-26  8:48       ` Olivier MATZ
2015-03-26 15:59   ` [PATCH v2 0/5] mbuf: enhancements of mbuf clones Olivier Matz
     [not found]     ` <1427385595-15011-1-git-send-email-olivier.matz-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2015-03-26 15:59       ` [PATCH v2 1/5] mbuf: fix clone support when application uses private mbuf data Olivier Matz
     [not found]         ` <1427385595-15011-2-git-send-email-olivier.matz-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2015-03-26 17:13           ` Zoltan Kiss
2015-03-27  0:24           ` Ananyev, Konstantin
     [not found]             ` <2601191342CEEE43887BDE71AB97725821407D4D-pww93C2UFcwu0RiL9chJVbfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-03-27  9:07               ` Olivier MATZ
     [not found]                 ` <55151DDE.8040301-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2015-03-27 13:56                   ` Olivier MATZ
     [not found]                     ` <55156188.6040101-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2015-03-27 14:25                       ` Ananyev, Konstantin
     [not found]                         ` <2601191342CEEE43887BDE71AB9772582140814C-pww93C2UFcwu0RiL9chJVbfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-03-27 15:17                           ` Olivier MATZ
     [not found]                             ` <55157477.7090207-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2015-03-27 18:11                               ` Zoltan Kiss
     [not found]                                 ` <55159D39.1040608-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2015-03-28 21:19                                   ` Olivier MATZ [this message]
2015-03-30 12:34                               ` Ananyev, Konstantin
     [not found]                                 ` <2601191342CEEE43887BDE71AB9772582140FB21-pww93C2UFcwu0RiL9chJVbfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-03-30 19:55                                   ` Olivier MATZ
     [not found]                                     ` <5519AA46.1090409-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2015-03-30 23:17                                       ` Ananyev, Konstantin
     [not found]                                         ` <2601191342CEEE43887BDE71AB97725821412EE9-pww93C2UFcwu0RiL9chJVbfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-03-31 19:01                                           ` Olivier MATZ
     [not found]                                             ` <551AEF08.8020009-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2015-04-01 13:48                                               ` Ananyev, Konstantin
     [not found]                                                 ` <2601191342CEEE43887BDE71AB9772582141368A-pww93C2UFcwu0RiL9chJVbfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-04-01 15:18                                                   ` Olivier MATZ
2015-03-26 15:59       ` [PATCH v2 2/5] mbuf: allow to clone an indirect mbuf Olivier Matz
2015-03-26 15:59       ` [PATCH v2 3/5] test/mbuf: rename mc variable in m Olivier Matz
2015-03-26 15:59       ` [PATCH v2 4/5] test/mbuf: enhance mbuf refcnt test Olivier Matz
2015-03-26 15:59       ` [PATCH v2 5/5] test/mbuf: verify that cloning a clone works properly Olivier Matz
2015-03-31 19:22       ` [PATCH v3 0/5] mbuf: enhancements of mbuf clones Olivier Matz
     [not found]         ` <1427829784-12323-1-git-send-email-zer0-RqaWXwjnwG4BE+pwOMkbTQ@public.gmane.org>
2015-03-31 19:23           ` [PATCH v3 1/5] mbuf: fix clone support when application uses private mbuf data Olivier Matz
     [not found]             ` <1427829784-12323-2-git-send-email-zer0-RqaWXwjnwG4BE+pwOMkbTQ@public.gmane.org>
2015-04-02 14:32               ` Zoltan Kiss
2015-04-02 17:21               ` Ananyev, Konstantin
     [not found]                 ` <2601191342CEEE43887BDE71AB97725821413A2D-pww93C2UFcwu0RiL9chJVbfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-04-06 21:49                   ` Olivier MATZ
     [not found]                     ` <5522FF6B.1030503-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2015-04-07 12:40                       ` Ananyev, Konstantin
     [not found]                         ` <2601191342CEEE43887BDE71AB97725821414310-pww93C2UFcwu0RiL9chJVbfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-04-07 15:45                           ` Olivier MATZ
     [not found]                             ` <5523FB9B.2060508-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2015-04-07 17:17                               ` Ananyev, Konstantin
     [not found]                                 ` <2601191342CEEE43887BDE71AB9772582141451F-pww93C2UFcwu0RiL9chJVbfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-04-08  9:44                                   ` Olivier MATZ
     [not found]                                     ` <5524F876.8090900-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2015-04-08 13:45                                       ` Ananyev, Konstantin
     [not found]                                         ` <2601191342CEEE43887BDE71AB97725821414805-pww93C2UFcwu0RiL9chJVbfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-04-09 13:06                                           ` Olivier MATZ
2015-04-20 15:41               ` [PATCH v4 00/12] mbuf: enhancements of mbuf clones Olivier Matz
     [not found]                 ` <1429544496-22532-1-git-send-email-olivier.matz-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2015-04-20 15:41                   ` [PATCH v4 01/12] mbuf: fix mbuf data room size calculation rte_pktmbuf_pool_init Olivier Matz
2015-04-20 15:41                   ` [PATCH v4 02/12] examples: always initialize mbuf_pool private area Olivier Matz
2015-04-20 15:41                   ` [PATCH v4 03/12] mbuf: add accessors to get data room size and private size Olivier Matz
2015-04-20 15:41                   ` [PATCH v4 04/12] mbuf: fix rte_pktmbuf_init when mbuf private size is not zero Olivier Matz
2015-04-20 15:41                   ` [PATCH v4 05/12] testpmd: use standard functions to initialize mbufs and mbuf pool Olivier Matz
2015-04-20 15:41                   ` [PATCH v4 06/12] mbuf: introduce a new helper to create a " Olivier Matz
2015-04-20 15:41                   ` [PATCH v4 07/12] apps: use rte_pktmbuf_pool_create to create mbuf pools Olivier Matz
2015-04-20 15:41                   ` [PATCH v4 08/12] mbuf: fix clone support when application uses private mbuf data Olivier Matz
2015-04-20 15:41                   ` [PATCH v4 09/12] mbuf: allow to clone an indirect mbuf Olivier Matz
2015-04-20 15:41                   ` [PATCH v4 10/12] test/mbuf: rename mc variable in m Olivier Matz
2015-04-20 15:41                   ` [PATCH v4 11/12] test/mbuf: enhance mbuf refcnt test Olivier Matz
2015-04-20 15:41                   ` [PATCH v4 12/12] test/mbuf: verify that cloning a clone works properly Olivier Matz
2015-04-20 16:53                   ` [PATCH v4 00/12] mbuf: enhancements of mbuf clones Neil Horman
     [not found]                     ` <20150420165333.GB19573-B26myB8xz7F8NnZeBjwnZQMhkBWG/bsMQH7oEaQurus@public.gmane.org>
2015-04-20 17:07                       ` Olivier MATZ
     [not found]                         ` <55353253.9050804-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2015-04-20 17:21                           ` Neil Horman
     [not found]                             ` <20150420172140.GC19573-B26myB8xz7F8NnZeBjwnZQMhkBWG/bsMQH7oEaQurus@public.gmane.org>
2015-04-20 18:24                               ` Olivier MATZ
2015-04-21  9:55                   ` [PATCH v5 " Olivier Matz
     [not found]                     ` <1429610122-30943-1-git-send-email-olivier.matz-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2015-04-21  9:55                       ` [PATCH v5 01/12] mbuf: fix mbuf data room size calculation rte_pktmbuf_pool_init Olivier Matz
2015-04-21  9:55                       ` [PATCH v5 02/12] examples: always initialize mbuf_pool private area Olivier Matz
2015-04-21  9:55                       ` [PATCH v5 03/12] mbuf: add accessors to get data room size and private size Olivier Matz
2015-04-21  9:55                       ` [PATCH v5 04/12] mbuf: fix rte_pktmbuf_init when mbuf private size is not zero Olivier Matz
     [not found]                         ` <1429610122-30943-5-git-send-email-olivier.matz-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2015-04-21 15:07                           ` Ananyev, Konstantin
2015-04-21  9:55                       ` [PATCH v5 05/12] testpmd: use standard functions to initialize mbufs and mbuf pool Olivier Matz
2015-04-21  9:55                       ` [PATCH v5 06/12] mbuf: introduce a new helper to create a " Olivier Matz
2015-04-21  9:55                       ` [PATCH v5 07/12] apps: use rte_pktmbuf_pool_create to create mbuf pools Olivier Matz
2015-04-21  9:55                       ` [PATCH v5 08/12] mbuf: fix clone support when application uses private mbuf data Olivier Matz
     [not found]                         ` <1429610122-30943-9-git-send-email-olivier.matz-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2015-04-21 15:01                           ` Ananyev, Konstantin
     [not found]                             ` <2601191342CEEE43887BDE71AB9772582142095C-pww93C2UFcwu0RiL9chJVbfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-04-21 15:26                               ` Olivier MATZ
2015-04-21  9:55                       ` [PATCH v5 09/12] mbuf: allow to clone an indirect mbuf Olivier Matz
2015-04-21  9:55                       ` [PATCH v5 10/12] test/mbuf: rename mc variable in m Olivier Matz
2015-04-21  9:55                       ` [PATCH v5 11/12] test/mbuf: enhance mbuf refcnt test Olivier Matz
2015-04-21  9:55                       ` [PATCH v5 12/12] test/mbuf: verify that cloning a clone works properly Olivier Matz
2015-04-21 11:50                       ` [PATCH v5 00/12] mbuf: enhancements of mbuf clones Neil Horman
2015-04-22  9:57                       ` [PATCH v6 00/13] " Olivier Matz
     [not found]                         ` <1429696650-9043-1-git-send-email-olivier.matz-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2015-04-22  9:57                           ` [PATCH v6 01/13] mbuf: fix mbuf data room size calculation rte_pktmbuf_pool_init Olivier Matz
2015-04-22  9:57                           ` [PATCH v6 02/13] examples: always initialize mbuf_pool private area Olivier Matz
2015-04-22  9:57                           ` [PATCH v6 03/13] mbuf: add accessors to get data room size and private size Olivier Matz
     [not found]                             ` <1429696650-9043-4-git-send-email-olivier.matz-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2015-04-28  9:15                               ` Thomas Monjalon
2015-04-22  9:57                           ` [PATCH v6 04/13] mbuf: fix rte_pktmbuf_init when mbuf private size is not zero Olivier Matz
2015-04-22  9:57                           ` [PATCH v6 05/13] testpmd: use standard functions to initialize mbufs and mbuf pool Olivier Matz
2015-04-22  9:57                           ` [PATCH v6 06/13] mbuf: introduce a new helper to create a " Olivier Matz
2015-04-22  9:57                           ` [PATCH v6 07/13] apps: use rte_pktmbuf_pool_create to create mbuf pools Olivier Matz
2015-04-22  9:57                           ` [PATCH v6 08/13] mbuf: fix clone support when application uses private mbuf data Olivier Matz
2015-04-22  9:57                           ` [PATCH v6 09/13] mbuf: allow to clone an indirect mbuf Olivier Matz
2015-04-22  9:57                           ` [PATCH v6 10/13] test/mbuf: rename mc variable in m Olivier Matz
2015-04-22  9:57                           ` [PATCH v6 11/13] test/mbuf: enhance mbuf refcnt test Olivier Matz
2015-04-22  9:57                           ` [PATCH v6 12/13] test/mbuf: verify that cloning a clone works properly Olivier Matz
2015-04-22  9:57                           ` [PATCH v6 13/13] test/mbuf: add a test case for clone with different priv size Olivier Matz
2015-04-22 11:59                           ` [PATCH v6 00/13] mbuf: enhancements of mbuf clones Ananyev, Konstantin
     [not found]                             ` <2601191342CEEE43887BDE71AB97725821420BD6-pww93C2UFcwu0RiL9chJVbfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-04-24 10:38                               ` Zoltan Kiss
     [not found]                                 ` <553A1D3B.5040400-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2015-04-27 17:38                                   ` Thomas Monjalon
2015-04-28 11:15                                     ` Zoltan Kiss
2015-05-07  1:57                                   ` Xu, HuilongX
     [not found]                                     ` <DF2A19295B96364286FEB7F3DDA27A460110388E-0J0gbvR4kThpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-05-07  7:32                                       ` Olivier MATZ
     [not found]                                         ` <554B14F9.5020508-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2015-05-07  9:39                                           ` Ananyev, Konstantin
2015-04-28  9:50                               ` Thomas Monjalon
2015-03-31 19:23           ` [PATCH v3 2/5] mbuf: allow to clone an indirect mbuf Olivier Matz
2015-03-31 19:23           ` [PATCH v3 3/5] test/mbuf: rename mc variable in m Olivier Matz
2015-03-31 19:23           ` [PATCH v3 4/5] test/mbuf: enhance mbuf refcnt test Olivier Matz
2015-03-31 19:23           ` [PATCH v3 5/5] test/mbuf: verify that cloning a clone works properly Olivier Matz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=55171AD0.7040702@6wind.com \
    --to=olivier.matz-pdr9zngts4eavxtiumwx3w@public.gmane.org \
    --cc=dev-VfR2kkLFssw@public.gmane.org \
    --cc=konstantin.ananyev-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
    --cc=zoltan.kiss-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).