On (03/10/08 18:36), Andy Whitcroft didst pronounce:
> Currently the admin has to understand how to configure pools directly.
> They must know how to find the current pool allocations, and how to
> manipulate them; which change from kernel level to kernel level and
> may even differ from one pool size to another.  They must know how to
> mount filesystems to expose those pools and where there are more than
> one filesystem of a pariticular size they must know how to ensure the
> underlying pools are sizes appropriatly.
> 
> It is into this void we hope to place hpoolcfg.  The underlying plan is
> that there should be one application which would simplify control of the
> managment of huge pages.  That the admin would be able to say things
> like "I need 10 more 16MB pages", or even "make me a 16MB page backed
> filesystem with 10 pages for oracle to use, and another for the batch
> sytem with between 10 and 20 pages" and the pools would be resized as
> required and appropraite filesystems would be created.
> 
> Obviously at this point we are only at the foundation building phase,
> this first step concentrates on page sizes and pool configuration.
> For page sizes it is possible to query both the currently available and
> all supported page sizes.  It exposes the pool configuration in a simple
> to understand form and allows the admin to manipulate the pool sizes, both
> in terms of static and overcommit pages.  This is both useful directly
> for a more knowledgable admin and provides the interfaces needed for later
> functionality.
> 
> Page sizes are expose as a simple list of page sizes in bytes:
> 
>     [EMAIL PROTECTED] ./obj/hpoolcfg --page-sizes
>     2097152
>     65536
>     [EMAIL PROTECTED] ./obj/hpoolcfg --page-sizes-all
>     2097152
>     65536
>     16777216
> 

Is the distinction here between pagesizes supported by the processor and
those that are available via mounts at the moment?

Also, Solaris provides a pagesize utility for printing pagesizes. By
default, it prints the base page size and with -a, prints all the
available pagesizes (see
https://www.cebitec.uni-bielefeld.de/cgi-bin/man.cgi?section=1&topic=pagesize).
Rather than making this part of hpoolcfg, would it make sense to add a
pagesize utility with matching behaviour?

That would keep hpoolcfg confined to actual configuration printing and
changes.

> The pool is exposed as a simple table.  This represents the static
> allocation (Minimum), the current actual alloction which includes any
> overcommit pages in use (Current), and the total pages which may be
> allocated including any overcommit (Maximum):
> 
>     [EMAIL PROTECTED] ./obj/hpoolcfg --pool-list
>         Size  Minimum  Current  Maximum
>        2097152        4        4        4
>        65536       15       15       30
>       16777216        0        0        0
> 

How is this ordered? To me, it would seem natural to order them in
pagesize.

> Pool manipulation is exposed as both abolute and relative updates to the
> virtual Minimum and Maximum exposed above:
> 
>     [EMAIL PROTECTED] ./obj/hpoolcfg --pool-minimum-adjust 64kb=5 \
>                       --pool-maximum-adjust 64kb=10
>     [EMAIL PROTECTED] ./obj/hpoolcfg --pool-list
>         Size  Minimum  Current  Maximum
>        2097152        4        4        4
>        65536        5        5       10
>       16777216        0        0        0
> 
> They may be adjusted with relative deltas:
>     [EMAIL PROTECTED] ./obj/hpoolcfg --pool-maximum-adjust 64kb=+5

64kb+=5 ?

to match what you would write in C for example.

>     [EMAIL PROTECTED] ./obj/hpoolcfg --pool-list
>         Size  Minimum  Current  Maximum
>        2097152        4        4        4
>        65536        5        5       15
>       16777216        0        0        0
> 
> This code is not intended for merging as it is, but more as a work in
> progress allowing discussion of the overall strategy and direct discussion
> of the interfaces and the semantics they provide.  Any comments on the
> direction greatly appreciated.
> 
> Following this email are 15 patches.  The first 4 patches are a rebase
> of Adam Litke's recent counter management stack, this was rebased onto
> the current master and the update of the Makefile was consolidated.  The
> 5th patch fixes a bug in the accessors:
> 
>  Do not allow zero as an explicit page size
>  utils: Make pool counter manipulation code part of the library API
>  shm: Shared memory always uses the meminfo page size
>  lib: Add gethugepagesizes() API call
>  hugeutils: pool accessors should compare default page size in KB
> 
> The remaining patches represent the new hpoolcfg itself:
> 
>  hugeutils: size_to_smaller_unit should allow 2GB pages
>  hugeutils: pull out common filenames
>  hugeutils: add a TEST_ROOT prefix for testing sysfs/proc functionality
>  hpoolcfg: allow utilities to consist of more than one file
>  debug: allow utilities to share the common debug reporter
>  hpoolcfg: initial basic framework
>  hpoolcfg: expose the pool configuration
>  hpoolcfg: expose the available and possible page sizes
>  hugeutils: export the pool counter update interface
>  hpoolcfg: allow pools to be resized
> 
> Comments?
> 
> -apw
> 
> Adam Litke (4):
>   Do not allow zero as an explicit page size
>   utils: Make pool counter manipulation code part of the library API
>   shm: Shared memory always uses the meminfo page size
>   lib: Add gethugepagesizes() API call
> 
> Andy Whitcroft (11):
>   hugeutils: pool accessors should compare default page size in KB
>   hugeutils: size_to_smaller_unit should allow 2GB pages
>   hugeutils: pull out common filenames
>   hugeutils: add a TEST_ROOT prefix for testing sysfs/proc
>     functionality
>   hpoolcfg: allow utilities to consist of more than one file
>   debug: allow utilities to share the common debug reporter
>   hpoolcfg: initial basic framework
>   hpoolcfg: expose the pool configuration
>   hpoolcfg: expose the available and possible page sizes
>   hugeutils: export the pool counter update interface
>   hpoolcfg: allow pools to be resized
> 
>  Makefile                            |   22 ++-
>  hpoolcfg.c                          |  249 +++++++++++++++++++++++++
>  hugetlbfs.h                         |   17 ++
>  hugeutils.c                         |  345 
> +++++++++++++++++++++++++++++++----
>  libhugetlbfs_internal.h             |   14 ++-
>  shm.c                               |    7 +-
>  tests/Makefile                      |    7 +-
>  tests/alloc-instantiate-race.c      |    5 +-
>  tests/chunk-overcommit.c            |    3 +-
>  tests/counters.c                    |   38 ++--
>  tests/get_huge_pages.c              |   14 +-
>  tests/gethugepagesizes.c            |  226 +++++++++++++++++++++++
>  tests/heap-overflow.c               |    2 +-
>  tests/hugetests.h                   |   20 +--
>  tests/libtestutils.c                |  137 ++++++++++++++
>  tests/misaligned_offset.c           |   20 +-
>  tests/quota.c                       |    6 +-
>  tests/run_tests.sh                  |    1 +
>  tests/shmoverride_unlinked.c        |   82 +++++++-
>  tests/testutils.c                   |  252 +-------------------------
>  tests/truncate_reserve_wraparound.c |   21 +--
>  tests/truncate_sigbus_versus_oom.c  |    3 +-
>  22 files changed, 1109 insertions(+), 382 deletions(-)
>  create mode 100644 hpoolcfg.c
>  create mode 100644 tests/gethugepagesizes.c
>  create mode 100644 tests/libtestutils.c
> 

-- 
Mel Gorman
Part-time Phd Student                          Linux Technology Center
University of Limerick                         IBM Dublin Software Lab

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Libhugetlbfs-devel mailing list
Libhugetlbfs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libhugetlbfs-devel

Reply via email to