• Nick Desaulniers's avatar
    Makefile: support compressed debug info · 10e68b02
    Nick Desaulniers authored
    As debug information gets larger and larger, it helps significantly save
    the size of vmlinux images to compress the information in the debug
    information sections. Note: this debug info is typically split off from
    the final compressed kernel image, which is why vmlinux is what's used
    in conjunction with GDB. Minimizing the debug info size should have no
    impact on boot times, or final compressed kernel image size.
    
    All of the debug sections will have a `C` flag set.
    $ readelf -S <object file>
    
    $ bloaty vmlinux.gcc75.compressed.dwarf4 -- \
        vmlinux.gcc75.uncompressed.dwarf4
    
        FILE SIZE        VM SIZE
     --------------  --------------
      +0.0%     +18  [ = ]       0    [Unmapped]
     -73.3%  -114Ki  [ = ]       0    .debug_aranges
     -76.2% -2.01Mi  [ = ]       0    .debug_frame
     -73.6% -2.89Mi  [ = ]       0    .debug_str
     -80.7% -4.66Mi  [ = ]       0    .debug_abbrev
     -82.9% -4.88Mi  [ = ]       0    .debug_ranges
     -70.5% -9.04Mi  [ = ]       0    .debug_line
     -79.3% -10.9Mi  [ = ]       0    .debug_loc
     -39.5% -88.6Mi  [ = ]       0    .debug_info
     -18.2%  -123Mi  [ = ]       0    TOTAL
    
    $ bloaty vmlinux.clang11.compressed.dwarf4 -- \
        vmlinux.clang11.uncompressed.dwarf4
    
        FILE SIZE        VM SIZE
     --------------  --------------
      +0.0%     +23  [ = ]       0    [Unmapped]
     -65.6%    -871  [ = ]       0    .debug_aranges
     -77.4% -1.84Mi  [ = ]       0    .debug_frame
     -82.9% -2.33Mi  [ = ]       0    .debug_abbrev
     -73.1% -2.43Mi  [ = ]       0    .debug_str
     -84.8% -3.07Mi  [ = ]       0    .debug_ranges
     -65.9% -8.62Mi  [ = ]       0    .debug_line
     -86.2% -40.0Mi  [ = ]       0    .debug_loc
     -42.0% -64.1Mi  [ = ]       0    .debug_info
     -22.1%  -122Mi  [ = ]       0    TOTAL
    
    For x86_64 defconfig + LLVM=1 (before):
    Elapsed (wall clock) time (h:mm:ss or m:ss): 3:22.03
    Maximum resident set size (kbytes): 43856
    
    For x86_64 defconfig + LLVM=1 (after):
    Elapsed (wall clock) time (h:mm:ss or m:ss): 3:32.52
    Maximum resident set size (kbytes): 1566776
    
    Thanks to:
    Nick Clifton helped us to provide the minimal binutils version.
    Sedat Dilek found an increase in size of debug .deb package.
    
    Cc: Nick Clifton <nickc@redhat.com>
    Suggested-by: default avatarDavid Blaikie <blaikie@google.com>
    Reviewed-by: default avatarFangrui Song <maskray@google.com>
    Tested-by: default avatarSedat Dilek <sedat.dilek@gmail.com>
    Signed-off-by: default avatarNick Desaulniers <ndesaulniers@google.com>
    Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
    10e68b02
Kconfig.debug 73.1 KB