On 2024-12-05 18:57, David Marchand wrote:
As I had reported in rc2, the lcore variables allocation have a
noticeable impact on applications consuming DPDK, even when such
applications does not use DPDK, or use features associated to
some lcore variables.

While the amount has been reduced in a rush before rc2,
there are still cases when the increased memory footprint is noticed
like in scaling tests.
See https://bugs.launchpad.net/ubuntu/+source/dpdk/+bug/2090931


What this bug report fails to mention is that it only affects applications using locked memory.


lcore variable allocations in constructor is a bad idea, as the
application consuming DPDK has no control over such allocation:
linking some code does not mean that all of it will be used at runtime.


The core issue isn't really the allocations themselves, or the lack of app-level control. Lcore variables are no different from the static arrays they are replacing, and existing ones are small enough to be pretty harmless.

Such innocent allocations trigger a larger (bulk) allocation, which is also harmless, unless you use locked memory.

I was clear on the impact on RSS for locked-memory type apps, but nobody pointed this out as an issue worth fixing, so I made no attempt in doing so.

In retrospect, maybe the offset between lcore variable instances could have been encoded into the handle, and thus one could use different-sized offset for different variables.

The general question on whether lcore variables in constructor should
be forbidden, is left to a later discussion.


That discussion could be extended to cover the question if RTE_INIT() type constructors should be used at all. Intuitively, it seems better if all DPDK initialization, or at least all EAL init, happens at the time of rte_eal_init(), in some ordered/organized fashion.

For now, this series only focus on fixing subsystems using lcore
variables so that those allocations are deferred either in rte_eal_init()
or in the path that does require such lcore variables.



Reply via email to