[dpdk-dev] [PATCH v3 06/10] eal: introduce memory management wrappers
Tal Shnaiderman
talshn at mellanox.com
Mon Apr 20 07:59:56 CEST 2020
> System meory management is implemented differently for POSIX and
> Windows. Introduce wrapper functions for operations used across DPDK:
>
> * rte_mem_map()
> Create memory mapping for a regular file or a page file (swap).
> This supports mapping to a reserved memory region even on Windows.
>
> * rte_mem_unmap()
> Remove mapping created with rte_mem_map().
>
> * rte_get_page_size()
> Obtain default system page size.
>
> * rte_mem_lock()
> Make arbitrary-sized memory region non-swappable.
>
> Wrappers follow POSIX semantics limited to DPDK tasks, but their signatures
> deliberately differ from POSIX ones to be more safe and expressive.
>
> Signed-off-by: Dmitry Kozlyuk <dmitry.kozliuk at gmail.com>
> ---
> config/meson.build | 10 +-
> lib/librte_eal/common/eal_private.h | 51 +++-
> lib/librte_eal/include/rte_memory.h | 68 +++++
> lib/librte_eal/rte_eal_exports.def | 4 +
> lib/librte_eal/rte_eal_version.map | 4 +
> lib/librte_eal/unix/eal_memory.c | 113 +++++++
> lib/librte_eal/unix/meson.build | 1 +
> lib/librte_eal/windows/eal.c | 6 +
> lib/librte_eal/windows/eal_memory.c | 437
> +++++++++++++++++++++++++++ lib/librte_eal/windows/eal_windows.h |
<Snip!>
> +eal_mem_win32api_init(void)
> +{
> + static const char library_name[] = "kernelbase.dll";
> + static const char function[] = "VirtualAlloc2";
> +
> + OSVERSIONINFO info;
> + HMODULE library = NULL;
> + int ret = 0;
> +
> + /* Already done. */
> + if (VirtualAlloc2 != NULL)
> + return 0;
> +
> + /* IsWindows10OrGreater() may also be unavailable. */
> + memset(&info, 0, sizeof(info));
> + info.dwOSVersionInfoSize = sizeof(info);
> + GetVersionEx(&info);
I'd remove the GetVersionEx check entirely and add the comments regarding OS dependency to the RTE_LOG
Of the LoadLibraryA failure below, GetVersionEx returns the Windows 8 OS version on newer servers
Also, it looks like not all Win2016 servers versions support VirtualAlloc2, I'm using Microsoft Windows Server 2016 Datacenter Version 10.0.14393 and LoadLibraryA failed to load VirtualAlloc2.
> + /* Checking for Windows 10+ will also detect Windows Server 2016+.
> + * Do not abort, because Windows may report false version
> depending
> + * on executable manifest, compatibility mode, etc.
> + */
> + if (info.dwMajorVersion < 10)
> + RTE_LOG(DEBUG, EAL, "Windows 10+ or Windows Server
> 2016+ "
> + "is required for advanced memory features\n");
> +
> + library = LoadLibraryA(library_name);
> + if (library == NULL) {
> + RTE_LOG_WIN32_ERR("LoadLibraryA(\"%s\")",
> library_name);
> + return -1;
> + }
> +
More information about the dev
mailing list