Regarding changing RTE_RING_SZ_MASK to 0x7FFFFFFF

2 messages, 2 authors, 2017-09-06 · open the first message on its own page

Regarding changing RTE_RING_SZ_MASK to 0x7FFFFFFF

From: Venkatesh Nuthula <hidden>
Date: 2017-08-14 18:01:38

Hi all,

  I am a newbie to DPDK and in one of the applications I am building , I am
trying to capture more than 150M packets and save them to file. I noticed
that with packet count > 134M, the check 'count > RTE_RING_SZ_MASK' fails
as RTE_RING_SZ_MASK is set to 0x0FFFFFFF. So I tried changing
RTE_RING_SZ_MASK to 0x7FFFFFFF and it took me past the check
'count > RTE_RING_SZ_MASK' and the DPDK booted successfully. No error
messages. But when I try to save the packets captured in memory pool into
the file, I notice that it fails(my application exits without any error
message) to write beyond a number of packets.

I noticed that this failure to write packets happens only when I change the
RTE_RING_SZ_MASK to 0x7FFFFFFF from original value 0x0FFFFFFF. I have below
questions to understand this further.



*1) Why is RTE_RING_SZ_MASK set to 0x0FFFFFFF. Why are the 4 bits left
unused? Is it because ring size shouldn't exceed 2 power 32?2) If yes to
above question, can anybody please explain why ring size can't exceed 2
power 32 as ssize_t can hold more than 2 power 32?  *

*3) What should be the approach if we want to capture more than
200M(200,000,000) packets? *

Thanks in Advance
venky

Re: Regarding changing RTE_RING_SZ_MASK to 0x7FFFFFFF

From: Olivier MATZ <hidden>
Date: 2017-09-06 15:07:35

Hi Venky,

Sorry for the late reply.

On Mon, Aug 14, 2017 at 11:01:38AM -0700, Venkatesh Nuthula wrote:
Hi all,

  I am a newbie to DPDK and in one of the applications I am building , I am
trying to capture more than 150M packets and save them to file. I noticed
that with packet count > 134M, the check 'count > RTE_RING_SZ_MASK' fails
as RTE_RING_SZ_MASK is set to 0x0FFFFFFF. So I tried changing
RTE_RING_SZ_MASK to 0x7FFFFFFF and it took me past the check
'count > RTE_RING_SZ_MASK' and the DPDK booted successfully. No error
messages. But when I try to save the packets captured in memory pool into
the file, I notice that it fails(my application exits without any error
message) to write beyond a number of packets.

I noticed that this failure to write packets happens only when I change the
RTE_RING_SZ_MASK to 0x7FFFFFFF from original value 0x0FFFFFFF. I have below
questions to understand this further.



*1) Why is RTE_RING_SZ_MASK set to 0x0FFFFFFF. Why are the 4 bits left
unused? Is it because ring size shouldn't exceed 2 power 32?2) If yes to
above question, can anybody please explain why ring size can't exceed 2
power 32 as ssize_t can hold more than 2 power 32?  *
I don't see any good reason today to limit the size of the ring to
0x0FFFFFFF. Looking in the history, this was probably done to keep
some room for flags. See 50d769054872 ("ring: add burst API").

The only flag used (RTE_RING_QUOT_EXCEED) has been removed recently
in commit 77dd3064270c ("ring: remove watermark support").

So I think there is no issue to change the max size to 0x7FFFFFFF.
I don't think it would be straightforward to increase it more,
since ring->size is an uint32_t.

I will submit a patch for this.

Thanks,
Olivier
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help