20/04/2023 20:20, Tyler Retzlaff: > On Thu, Apr 20, 2023 at 09:43:28AM +0200, Thomas Monjalon wrote: > > 19/04/2023 16:51, Tyler Retzlaff: > > > On Wed, Apr 19, 2023 at 11:36:34AM +0300, Ophir Munk wrote: > > > > In current DPDK the RTE_MAX_MEMZONE definition is unconditionally hard > > > > coded as 2560. For applications requiring different values of this > > > > parameter – it is more convenient to set the max value via an rte API - > > > > rather than changing the dpdk source code per application. In many > > > > organizations, the possibility to compile a private DPDK library for a > > > > particular application does not exist at all. With this option there is > > > > no need to recompile DPDK and it allows using an in-box packaged DPDK. > > > > An example usage for updating the RTE_MAX_MEMZONE would be of an > > > > application that uses the DPDK mempool library which is based on DPDK > > > > memzone library. The application may need to create a number of > > > > steering tables, each of which will require its own mempool allocation. > > > > This commit is not about how to optimize the application usage of > > > > mempool nor about how to improve the mempool implementation based on > > > > memzone. It is about how to make the max memzone definition - run-time > > > > customized. > > > > This commit adds an API which must be called before rte_eal_init(): > > > > rte_memzone_max_set(int max). If not called, the default memzone > > > > (RTE_MAX_MEMZONE) is used. There is also an API to query the effective > > > > max memzone: rte_memzone_max_get(). > > > > > > > > Signed-off-by: Ophir Munk <ophi...@nvidia.com> > > > > --- > > > > > > the use case of each application may want a different non-hard coded > > > value makes sense. > > > > > > it's less clear to me that requiring it be called before eal init makes > > > sense over just providing it as configuration to eal init so that it is > > > composed. > > > > Why do you think it would be better as EAL init option? > > From an API perspective, I think it is simpler to call a dedicated function. > > And I don't think a user wants to deal with it when starting the > > application. > > because a dedicated function that can be called detached from the eal > state enables an opportunity for accidental and confusing use outside > the correct context. > > i know the above prescribes not to do this but. > > now you can call set after eal init, but we protect about calling it > after init by failing. what do we do sensibly with the failure?
It would be a developer mistake which could be fix during development stage very easily. I don't see a problem here. > > > can you elaborate further on why you need get if you have a one-shot > > > set? why would the application not know the value if you can only ever > > > call it once before init? > > > > The "get" function is used in this patch by test and qede driver. > > The application could use it as well, especially to query the default value. > > this seems incoherent to me, why does the application not know if it has > called set or not? if it called set it knows what the value is, if it didn't > call set it knows what the default is. No the application doesn't know the default, it is an internal value. > anyway, the use case is valid and i would like to see the ability to > change it dynamically i'd prefer not to see an api like this be introduced > as prescribed but that's for you folks to decide. > > anyway, i own a lot of apis that operate just like the proposed and > they're great source of support overhead. i prefer not to rely on > documenting a contract when i can enforce the contract and implicit state > machine mechanically with the api instead. > > fwiw a nicer pattern for doing this one of framework influencing config > might look something like this. > > struct eal_config config; > > eal_config_init(&config); // defaults are set entire state made valid > eal_config_set_max_memzone(&config, 1024); // default is overridden > > rte_eal_init(&config); In general, we discovered that functions doing too much are bad for usability and for ABI stability. In the function eal_config_init() that you propose, any change in the struct eal_config will be an ABI breakage.