Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 21 Apr 2006 04:24:50 +0000 (UTC)
From:      Peter Wemm <peter@FreeBSD.org>
To:        src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: src/sys/conf files.amd64 src/sys/amd64/amd64 dump_machdep.c minidump_machdep.c pmap.c uma_machdep.c src/sys/amd64/include md_var.h minidump.h src/sys/vm vm_page.c
Message-ID:  <200604210424.k3L4Oo1t046304@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
peter       2006-04-21 04:24:50 UTC

  FreeBSD src repository

  Modified files:
    sys/conf             files.amd64 
    sys/amd64/amd64      dump_machdep.c pmap.c uma_machdep.c 
    sys/amd64/include    md_var.h 
    sys/vm               vm_page.c 
  Added files:
    sys/amd64/amd64      minidump_machdep.c 
    sys/amd64/include    minidump.h 
  Log:
  Introduce minidumps.  Full physical memory crash dumps are still available
  via the debug.minidump sysctl and tunable.
  
  Traditional dumps store all physical memory.  This was once a good thing
  when machines had a maximum of 64M of ram and 1GB of kvm.  These days,
  machines often have many gigabytes of ram and a smaller amount of kvm.
  libkvm+kgdb don't have a way to access physical ram that is not mapped
  into kvm at the time of the crash dump, so the extra ram being dumped
  is mostly wasted.
  
  Minidumps invert the process.  Instead of dumping physical memory in
  in order to guarantee that all of kvm's backing is dumped, minidumps
  instead dump only memory that is actively mapped into kvm.
  
  amd64 has a direct map region that things like UMA use.  Obviously we
  cannot dump all of the direct map region because that is effectively
  an old style all-physical-memory dump.  Instead, introduce a bitmap
  and two helper routines (dump_add_page(pa) and dump_drop_page(pa)) that
  allow certain critical direct map pages to be included in the dump.
  uma_machdep.c's allocator is the intended consumer.
  
  Dumps are a custom format.  At the very beginning of the file is a header,
  then a copy of the message buffer, then the bitmap of pages present in
  the dump, then the final level of the kvm page table trees (2MB mappings
  are expanded into a 4K page mappings), then the sparse physical pages
  according to the bitmap.  libkvm can now conveniently access the kvm
  page table entries.
  
  Booting my test 8GB machine, forcing it into ddb and forcing a dump
  leads to a 48MB minidump.  While this is a best case, I expect minidumps
  to be in the 100MB-500MB range.  Obviously, never larger than physical
  memory of course.
  
  minidumps are on by default.  It would want be necessary to turn them off
  if it was necessary to debug corrupt kernel page table management as that
  would mess up minidumps as well.
  
  Both minidumps and regular dumps are supported on the same machine.
  
  Revision  Changes    Path
  1.12      +10 -0     src/sys/amd64/amd64/dump_machdep.c
  1.1       +420 -0    src/sys/amd64/amd64/minidump_machdep.c (new)
  1.548     +1 -1      src/sys/amd64/amd64/pmap.c
  1.2       +8 -2      src/sys/amd64/amd64/uma_machdep.c
  1.77      +6 -0      src/sys/amd64/include/md_var.h
  1.1       +46 -0     src/sys/amd64/include/minidump.h (new)
  1.84      +1 -0      src/sys/conf/files.amd64
  1.315     +21 -0     src/sys/vm/vm_page.c



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200604210424.k3L4Oo1t046304>