[dpdk-dev] [PATCH v3 00/10] Windows basic memory management

Kadam, Pallavi pallavi.kadam at intel.com
Wed Apr 15 01:37:28 CEST 2020



On 4/14/2020 12:44 PM, Dmitry Kozlyuk wrote:
> Note: no changes in cover letter since v2.
> 
> This patchset implements basic MM with the following features:
> 
> * Hugepages are dynamically allocated in user-mode.
> * Only 2MB hugepages are supported.
> * IOVA is always PA, obtained through kernel-mode driver.
> * No 32-bit support (presumably not demanded).
> * Ni multi-process support (it is forcefully disabled).
> * No-huge mode for testing with IOVA unavailable.
> 
> 
> The first commit introduces a new kernel-mode driver, virt2phys.
> It translates user-mode virtual addresses into physical addresses.
> On Windows community call 2020-04-01 it was decided this driver can be
> used for now, later netUIO may pick up its code/interface or not.
> 
> 
> New EAL public functions for memory mapping are introduced
> to mitigate OS differences in DPDK libraries and applications:
> 
> * rte_mem_map
> * rte_mem_unmap
> * rte_mem_lock
> 
> To support common MM routines, internal wrappers for low-level
> memory reservation and file management are introduced. These changes
> affect Linux and FreeBSD EAL. Shared code is placed unded /unix/
> subdirectory (suggested by Thomas).
> 
> Also, entire <sys/queue.h> is imported from FreeBSD, replacing existing
> partial import. There is already a license exception for this file.
> 
> 
> Windows MM duplicates quite a lot of code from Linux EAL:
> 
> * eal_memalloc_alloc_seg_bulk
> * eal_memalloc_free_seg_bulk
> * calc_num_pages_per_socket
> * rte_eal_hugepage_init
> 
> Perhaps this should be left as-is until Windows MM evolves into having
> some specific requirements for these parts.
> 
> 
> Notes on checkpatch warnings:
> 
> * No space after comma / no space before closing parent in macros---
>    definitely a false-positive, unclear how to suppress this.
> 
> * Issues from imported BSD code---probably should be ignored?
> 
> * Checkpatch is not run against dpdk-kmods (Windows drivers).
> 
> ---
> 
> v3:
> 
>      * Fix Linux build on and aarch64 and 32-bit x86 (reported by CI).
>      * Fix logic and error handling while allocating segments.
>      * Fix Unix rte_mem_map(): return NULL on failure.
>      * Fix some checkpatch.sh issues:
>          * Do not return positive errno, use DWORD for GetLastError().
>          * Make dpdk-kmods source files non-executable.
>      * Improve GSG for Windows Server (suggested by Ranjit Menon).
> 
> v2:
> 
>      * Rebase on ToT. Move all new code shared between Linux and FreeBSD
>        to /unix/ subdirectory, also factor out some existing code there.
>      * Improve description of Clang issue with rte_page_sizes on Windows.
>        Restore -fstrict-enum for EAL. Check running, not target compiler.
>      * Use EAL prefix for private facilities instead if RTE.
>      * Improve documentation comments for new functions.
>      * Remove co-installer for virt2phys. Add a typecast for clarity.
>      * Document virt2phys in user guide, improve its own README.
>      * Explicitly and forcefully disable multi-process.
> 
> Dmitry Kozlyuk (9):
>    eal/windows: do not expose private EAL facilities
>    eal/windows: improve CPU and NUMA node detection
>    eal/windows: initialize hugepage info
>    eal: introduce internal wrappers for file operations
>    eal: introduce memory management wrappers
>    eal: extract common code for memseg list initialization
>    eal/windows: fix rte_page_sizes with Clang on Windows
>    eal/windows: replace sys/queue.h with a complete one from FreeBSD
>    eal/windows: implement basic memory management
> 
>   config/meson.build                            |   12 +-
>   doc/guides/windows_gsg/build_dpdk.rst         |   20 -
>   doc/guides/windows_gsg/index.rst              |    1 +
>   doc/guides/windows_gsg/run_apps.rst           |   84 ++
>   lib/librte_eal/common/eal_common_fbarray.c    |   57 +-
>   lib/librte_eal/common/eal_common_memory.c     |  104 +-
>   lib/librte_eal/common/eal_private.h           |  134 +-
>   lib/librte_eal/common/malloc_heap.c           |    1 +
>   lib/librte_eal/common/meson.build             |    9 +
>   lib/librte_eal/freebsd/eal_memory.c           |   55 +-
>   lib/librte_eal/include/rte_memory.h           |   74 ++
>   lib/librte_eal/linux/eal_memory.c             |   68 +-
>   lib/librte_eal/meson.build                    |    4 +
>   lib/librte_eal/rte_eal_exports.def            |  119 ++
>   lib/librte_eal/rte_eal_version.map            |    4 +
>   lib/librte_eal/unix/eal.c                     |   47 +
>   lib/librte_eal/unix/eal_memory.c              |  113 ++
>   lib/librte_eal/unix/meson.build               |    7 +
>   lib/librte_eal/windows/eal.c                  |  160 +++
>   lib/librte_eal/windows/eal_hugepages.c        |  108 ++
>   lib/librte_eal/windows/eal_lcore.c            |  187 ++-
>   lib/librte_eal/windows/eal_memalloc.c         |  418 ++++++
>   lib/librte_eal/windows/eal_memory.c           | 1141 +++++++++++++++++
>   lib/librte_eal/windows/eal_mp.c               |  103 ++
>   lib/librte_eal/windows/eal_thread.c           |    1 +
>   lib/librte_eal/windows/eal_windows.h          |  129 ++
>   lib/librte_eal/windows/include/meson.build    |    2 +
>   lib/librte_eal/windows/include/pthread.h      |    2 +
>   lib/librte_eal/windows/include/rte_os.h       |   48 +-
>   .../windows/include/rte_virt2phys.h           |   34 +
>   lib/librte_eal/windows/include/rte_windows.h  |   43 +
>   lib/librte_eal/windows/include/sys/queue.h    |  663 +++++++++-
>   lib/librte_eal/windows/include/unistd.h       |    3 +
>   lib/librte_eal/windows/meson.build            |    6 +
>   34 files changed, 3611 insertions(+), 350 deletions(-)
>   create mode 100644 doc/guides/windows_gsg/run_apps.rst
>   create mode 100644 lib/librte_eal/unix/eal.c
>   create mode 100644 lib/librte_eal/unix/eal_memory.c
>   create mode 100644 lib/librte_eal/unix/meson.build
>   create mode 100644 lib/librte_eal/windows/eal_hugepages.c
>   create mode 100644 lib/librte_eal/windows/eal_memalloc.c
>   create mode 100644 lib/librte_eal/windows/eal_memory.c
>   create mode 100644 lib/librte_eal/windows/eal_mp.c
>   create mode 100644 lib/librte_eal/windows/eal_windows.h
>   create mode 100644 lib/librte_eal/windows/include/rte_virt2phys.h
>   create mode 100644 lib/librte_eal/windows/include/rte_windows.h
> 
Tested-by: Pallavi Kadam <pallavi.kadam at intel.com>


More information about the dev mailing list