Add a switch to hugeadm that asks for a general report of huge page
availablity on the system.  It combines the output of the
--list-all-mounts and --pool-list switches with a list of huge page
sizes with configured pools.  It will also let the user know if there
is no swap configured that pool resizing is likely to fail.

Here are some sample outputs:

First, no configured mounts:
emun...@lappy-486:~$ hugeadm --explain
No hugetlbfs mount point found.

Huge page pools:
      Size  Minimum  Current  Maximum  Default
   4194304        0        0        0        *

Huge page sizes with configured pools:
emun...@lappy-486:~$

Second, configured mount with pages available:
emun...@lappy-486:~$ hugeadm --explain
Mount Point                                Options
/var/lib/hugetlbfs/global/pagesize-4194304 rw,pagesize=4194304

Huge page pools:
      Size  Minimum  Current  Maximum  Default
   4194304       30       30       30        *

Huge page sizes with configured pools:
4194304
emun...@lappy-486:~$

Last, no swap available:
emun...@lappy-486:~$ hugeadm --explain
Mount Point                                Options
/var/lib/hugetlbfs/global/pagesize-4194304 rw,pagesize=4194304

Huge page pools:
      Size  Minimum  Current  Maximum  Default
   4194304       30       30       30        *

Huge page sizes with configured pools:
4194304
hugeadm: WARNING: Swap is full or no swap space configured, resizing pool may 
fail.
emun...@lappy-486:~$

Signed-off-by: Eric B Munson <ebmun...@us.ibm.com>
---
 hugeadm.c |   20 ++++++++++++++++++++
 1 files changed, 20 insertions(+), 0 deletions(-)

diff --git a/hugeadm.c b/hugeadm.c
index e713b9e..22f47a4 100644
--- a/hugeadm.c
+++ b/hugeadm.c
@@ -99,6 +99,9 @@ void print_usage()
        CONT("the specified options would have done without");
        CONT("taking any action");
 
+       OPTION("--explain", "Gives a overview of the status of the system");
+       CONT("with respect to huge page availability");
+
        OPTION("--help, -h", "Prints this message");
 }
 
@@ -126,6 +129,8 @@ int opt_hard = 0;
 #define LONG_CREATE_GLOBAL_MOUNTS      (LONG_MOUNTS|'G')
 #define LONG_LIST_ALL_MOUNTS           (LONG_MOUNTS|'A')
 
+#define LONG_EXPLAIN   ('e' << 8)
+
 #define MAX_POOLS      32
 
 static int cmpsizes(const void *p1, const void *p2)
@@ -615,6 +620,16 @@ void page_sizes(int all)
        }
 }
 
+void explain()
+{
+       mounts_list_all();
+       printf("\nHuge page pools:\n");
+       pool_list();
+       printf("\nHuge page sizes with configured pools:\n");
+       page_sizes(0);
+       check_swap();
+}
+
 int main(int argc, char** argv)
 {
        int ops;
@@ -640,6 +655,7 @@ int main(int argc, char** argv)
                {"page-sizes", no_argument, NULL, LONG_PAGE_SIZES},
                {"page-sizes-all", no_argument, NULL, LONG_PAGE_AVAIL},
                {"dry-run", no_argument, NULL, 'd'},
+               {"explain", no_argument, NULL, LONG_EXPLAIN},
 
                {0},
        };
@@ -730,6 +746,10 @@ int main(int argc, char** argv)
                        page_sizes(1);
                        break;
 
+               case LONG_EXPLAIN:
+                       explain();
+                       break;
+
                default:
                        WARNING("unparsed option %08x\n", ret);
                        ret = -1;
-- 
1.6.1.2


------------------------------------------------------------------------------
_______________________________________________
Libhugetlbfs-devel mailing list
Libhugetlbfs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libhugetlbfs-devel

Reply via email to