• G
    mm/hugetlb: hugetlb_no_page: rate-limit warning message · 910154d5
    Geoffrey Thomas 提交于
    The warning message "killed due to inadequate hugepage pool" simply
    indicates that SIGBUS was sent, not that the process was forcibly killed.
    If the process has a signal handler installed does not fix the problem,
    this message can rapidly spam the kernel log.
    
    On my amd64 dev machine that does not have hugepages configured, I can
    reproduce the repeated warnings easily by setting vm.nr_hugepages=2 (i.e.,
    4 megabytes of huge pages) and running something that sets a signal
    handler and forks, like
    
      #include <sys/mman.h>
      #include <signal.h>
      #include <stdlib.h>
      #include <unistd.h>
    
      sig_atomic_t counter = 10;
      void handler(int signal)
      {
          if (counter-- == 0)
             exit(0);
      }
    
      int main(void)
      {
          int status;
          char *addr = mmap(NULL, 4 * 1048576, PROT_READ | PROT_WRITE,
                  MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB, -1, 0);
          if (addr == MAP_FAILED) {perror("mmap"); return 1;}
          *addr = 'x';
          switch (fork()) {
             case -1:
                perror("fork"); return 1;
             case 0:
                signal(SIGBUS, handler);
                *addr = 'x';
                break;
             default:
                *addr = 'x';
                wait(&status);
                if (WIFSIGNALED(status)) {
                   psignal(WTERMSIG(status), "child");
                }
                break;
          }
      }
    Signed-off-by: NGeoffrey Thomas <geofft@ldpreload.com>
    Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
    Cc: Hillf Danton <hillf.zj@alibaba-inc.com>
    Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    910154d5
hugetlb.c 117.9 KB