On Mon, Nov 9, 2020 at 4:48 PM Anatoly Burakov <anatoly.bura...@intel.com> wrote: > > Any EAL memory allocation often goes through eal_get_virtual_area() > function, which will print a warning whenever the resulting allocation > didn't match the specified address requirements. This is useful for > when we have requested a specific base virtual address, to let the user > know that the mapping has deviated from that address. > > However, on Linux, we also have a default base address that's there to > ensure better chances of successful secondary process initialization, > as well as higher likelihood of the virtual areas to fit inside the > IOMMU address width. Because of this default base address, there are > warnings printed even when no base address was explicitly requested, > which can be confusing to the user. > > Emit this warning with debug level unless base address was explicitly > requested by the user. > > Cc: Damjan Marion <damar...@cisco.com> > > Signed-off-by: Anatoly Burakov <anatoly.bura...@intel.com> > --- > > Notes: > v2: > - Fix the condition to not update the address incorrectly > - Instead of removing the warning, let it have debug level unless base > address > was explicitly specified by the user > > I'm not entirely sure the trade off between user confusion and helpful > debug > information is worth it, but in my experience, i've stopped getting any > emails > about secondary processes a long time ago and this isn't a widely used > feature, > so i believe this is worth it. > > lib/librte_eal/common/eal_common_memory.c | 16 +++++++++++++--- > 1 file changed, 13 insertions(+), 3 deletions(-) > > diff --git a/lib/librte_eal/common/eal_common_memory.c > b/lib/librte_eal/common/eal_common_memory.c > index 33917fa835..1b50c2099d 100644 > --- a/lib/librte_eal/common/eal_common_memory.c > +++ b/lib/librte_eal/common/eal_common_memory.c > @@ -140,9 +140,19 @@ eal_get_virtual_area(void *requested_addr, size_t *size, > return NULL; > } else if (requested_addr != NULL && addr_is_hint && > aligned_addr != requested_addr) { > - RTE_LOG(WARNING, EAL, "WARNING! Base virtual address hint (%p > != %p) not respected!\n", > - requested_addr, aligned_addr); > - RTE_LOG(WARNING, EAL, " This may cause issues with mapping > memory into secondary processes\n"); > + /* > + * demote this warning to debug if we did not explicitly > request > + * a base virtual address. > + */ > + if (internal_conf->base_virtaddr != 0) { > + RTE_LOG(WARNING, EAL, "WARNING! Base virtual address > hint (%p != %p) not respected!\n", > + requested_addr, aligned_addr); > + RTE_LOG(WARNING, EAL, " This may cause issues with > mapping memory into secondary processes\n"); > + } else { > + RTE_LOG(DEBUG, EAL, "WARNING! Base virtual address > hint (%p != %p) not respected!\n", > + requested_addr, aligned_addr); > + RTE_LOG(DEBUG, EAL, " This may cause issues with > mapping memory into secondary processes\n"); > + } > } else if (next_baseaddr != NULL) { > next_baseaddr = RTE_PTR_ADD(aligned_addr, *size); > } > -- > 2.17.1 >
EAL options like --in-memory or --no-shconf makes MP unusable. If we add a rte_mp_disable() for them, we could check here for MP status here and display nothing at all. WDYT? -- David Marchand