linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 00/16] Introduce memblock simulator
@ 2022-02-02 11:02 Karolina Drobnik
  2022-02-02 11:03 ` [PATCH v2 01/16] tools: Move gfp.h and slab.h from radix-tree to lib Karolina Drobnik
                   ` (16 more replies)
  0 siblings, 17 replies; 18+ messages in thread
From: Karolina Drobnik @ 2022-02-02 11:02 UTC (permalink / raw)
  To: linux-mm; +Cc: akpm, rppt, linux-kernel, Karolina Drobnik

Memblock is a boot time memory allocator, which allows managing memory
regions before the actual memory management is initialized. Because it is
used so early during the booting process, testing and debugging it is
difficult. As memblock has few kernel dependencies, it is possible to
simulate its runtime behaviour in userspace after stubbing a couple of
structs and functions.

This series of patches adds an initial version of a test suite for
memblock, which is a part of tools/testing infrastructure. Checks included
here test the basic functionality of memblock, which is memory regions
management - adding/removing available regions, marking them as reserved
or freeing them.

To run the tests, build the main target and run it:

$ make; ./main

A successful run produces no output. Also, It is possible to override
different configuration parameters. For example, to simulate enabled NUMA,
use:

$ make NUMA=1

For the full list of options, see `make help`.

The future work will include tests for memory allocation done via
memblock_alloc_* and memblock_phys_alloc_* family of functions. It will
also focus on improving the test suite by adding dedicated test targets
for each group of API functions and verbose output.

For a refresher on memblock, see Boot time memory management
documentation page[1] and "Getting to know memblock"[2] blog post.

Patchset structure:

* Patch 1 extracts stub definitions of kmalloc/kfree from the radix-tree
  testing suite, so they can be used in other tests, including memblock
  simulator
* Patches 2-4 update tools headers to include missing definitions needed
  by memblock (e.g. phys_addr_t typedef)
* Patches 5-9 add new files to tools/include, some with dummy/downsized
  definitions
* Patch 10 adds the basic project with local stubs that are closely
  connected to memblock
* Patch 11 adds a reset function, which is used as a part of the test
  setup. This functionality is needed, as memblock is reused in each check
* Patches 12-16 add basic test cases for the core memblock functionalities

[1] - https://www.kernel.org/doc/html/latest/core-api/boot-time-mm.html
[2] - https://insecuremode.com/post/2021/12/14/getting-to-know-memblock.html

Changes in v2:
- Fixed definition ordering in tools/include/linux/gfp.h
- Defined atomic_long_t as a struct instead of a typedef
- Deleted BIT macro from L1_CACHE_BYTES definition
- Removed SPDX information from .gitignore file
- Updated Makefile comment on the simulator dependencies
- Updated __initconst definition to be an empty macro (full definition is
  not required)

Karolina Drobnik (16):
  tools: Move gfp.h and slab.h from radix-tree to lib
  tools/include: Add phys_addr_t to types.h
  tools/include: Add _RET_IP_ and math definitions to kernel.h
  tools/include: Update atomic definitions
  tools/include: Add mm.h file
  tools/include: Add cache.h stub
  tools/include: Add io.h stub
  tools/include: Add pfn.h stub
  tools/include: Add debugfs.h stub
  memblock tests: Add skeleton of the memblock simulator
  memblock tests: Add memblock reset function
  memblock tests: Add memblock_add tests
  memblock tests: Add memblock_reserve tests
  memblock tests: Add memblock_remove tests
  memblock tests: Add memblock_add_node test
  memblock tests: Add memblock_free tests

 MAINTAINERS                                   |   1 +
 tools/include/linux/atomic.h                  |   2 +
 tools/include/linux/cache.h                   |  10 +
 tools/include/linux/debugfs.h                 |   5 +
 tools/include/linux/gfp.h                     |  28 +
 tools/include/linux/io.h                      |   5 +
 tools/include/linux/kernel.h                  |   6 +
 tools/include/linux/mm.h                      |  42 +
 tools/include/linux/pfn.h                     |  10 +
 .../radix-tree => include}/linux/slab.h       |  25 +-
 tools/include/linux/types.h                   |  10 +
 tools/lib/slab.c                              |  38 +
 tools/testing/memblock/.gitignore             |   4 +
 tools/testing/memblock/Makefile               |  54 ++
 tools/testing/memblock/asm/dma.h              |   5 +
 tools/testing/memblock/internal.h             |  12 +
 tools/testing/memblock/lib/slab.c             |   9 +
 tools/testing/memblock/linux/init.h           |  34 +
 tools/testing/memblock/linux/kernel.h         |  12 +
 tools/testing/memblock/linux/kmemleak.h       |  18 +
 tools/testing/memblock/linux/memory_hotplug.h |  19 +
 tools/testing/memblock/linux/mmzone.h         |  35 +
 tools/testing/memblock/linux/printk.h         |  25 +
 tools/testing/memblock/main.c                 |   8 +
 tools/testing/memblock/mmzone.c               |  20 +
 .../testing/memblock/scripts/Makefile.include |  17 +
 tools/testing/memblock/tests/basic_api.c      | 896 ++++++++++++++++++
 tools/testing/memblock/tests/basic_api.h      |  10 +
 tools/testing/memblock/tests/common.c         |  27 +
 tools/testing/memblock/tests/common.h         |  15 +
 tools/testing/radix-tree/Makefile             |   3 +-
 tools/testing/radix-tree/linux.c              |  27 -
 tools/testing/radix-tree/linux/gfp.h          |  33 -
 33 files changed, 1397 insertions(+), 68 deletions(-)
 create mode 100644 tools/include/linux/cache.h
 create mode 100644 tools/include/linux/debugfs.h
 create mode 100644 tools/include/linux/io.h
 create mode 100644 tools/include/linux/mm.h
 create mode 100644 tools/include/linux/pfn.h
 rename tools/{testing/radix-tree => include}/linux/slab.h (61%)
 create mode 100644 tools/lib/slab.c
 create mode 100644 tools/testing/memblock/.gitignore
 create mode 100644 tools/testing/memblock/Makefile
 create mode 100644 tools/testing/memblock/asm/dma.h
 create mode 100644 tools/testing/memblock/internal.h
 create mode 100644 tools/testing/memblock/lib/slab.c
 create mode 100644 tools/testing/memblock/linux/init.h
 create mode 100644 tools/testing/memblock/linux/kernel.h
 create mode 100644 tools/testing/memblock/linux/kmemleak.h
 create mode 100644 tools/testing/memblock/linux/memory_hotplug.h
 create mode 100644 tools/testing/memblock/linux/mmzone.h
 create mode 100644 tools/testing/memblock/linux/printk.h
 create mode 100644 tools/testing/memblock/main.c
 create mode 100644 tools/testing/memblock/mmzone.c
 create mode 100644 tools/testing/memblock/scripts/Makefile.include
 create mode 100644 tools/testing/memblock/tests/basic_api.c
 create mode 100644 tools/testing/memblock/tests/basic_api.h
 create mode 100644 tools/testing/memblock/tests/common.c
 create mode 100644 tools/testing/memblock/tests/common.h
 delete mode 100644 tools/testing/radix-tree/linux/gfp.h

--
2.30.2



^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2022-02-09  7:30 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-02 11:02 [PATCH v2 00/16] Introduce memblock simulator Karolina Drobnik
2022-02-02 11:03 ` [PATCH v2 01/16] tools: Move gfp.h and slab.h from radix-tree to lib Karolina Drobnik
2022-02-02 11:03 ` [PATCH v2 02/16] tools/include: Add phys_addr_t to types.h Karolina Drobnik
2022-02-02 11:03 ` [PATCH v2 03/16] tools/include: Add _RET_IP_ and math definitions to kernel.h Karolina Drobnik
2022-02-02 11:03 ` [PATCH v2 04/16] tools/include: Update atomic definitions Karolina Drobnik
2022-02-02 11:03 ` [PATCH v2 05/16] tools/include: Add mm.h file Karolina Drobnik
2022-02-02 11:03 ` [PATCH v2 06/16] tools/include: Add cache.h stub Karolina Drobnik
2022-02-02 11:03 ` [PATCH v2 07/16] tools/include: Add io.h stub Karolina Drobnik
2022-02-02 11:03 ` [PATCH v2 08/16] tools/include: Add pfn.h stub Karolina Drobnik
2022-02-02 11:03 ` [PATCH v2 09/16] tools/include: Add debugfs.h stub Karolina Drobnik
2022-02-02 11:03 ` [PATCH v2 10/16] memblock tests: Add skeleton of the memblock simulator Karolina Drobnik
2022-02-02 11:03 ` [PATCH v2 11/16] memblock tests: Add memblock reset function Karolina Drobnik
2022-02-02 11:03 ` [PATCH v2 12/16] memblock tests: Add memblock_add tests Karolina Drobnik
2022-02-02 11:03 ` [PATCH v2 13/16] memblock tests: Add memblock_reserve tests Karolina Drobnik
2022-02-02 11:03 ` [PATCH v2 14/16] memblock tests: Add memblock_remove tests Karolina Drobnik
2022-02-02 11:03 ` [PATCH v2 15/16] memblock tests: Add memblock_add_node test Karolina Drobnik
2022-02-02 11:03 ` [PATCH v2 16/16] memblock tests: Add memblock_free tests Karolina Drobnik
2022-02-09  7:30 ` [PATCH v2 00/16] Introduce memblock simulator Mike Rapoport

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).