~registry/kmod/master

Viewing all changes in revision 1305.

  • Committer: Lucas De Marchi
  • Date: 2023-06-20 21:39:25 UTC
  • Revision ID: git-v1:09c9f8c5df0475d2627d9498e26250592dbfebd6
libkmod: Use kernel decompression when available

With the recent changes to bypass loading the file it's possible to
reduce the work in userspace and delegating it to the kernel. Without
any compression to illustrate:

Before:
        read(3, "\177ELF\2\1", 6)               = 6
        lseek(3, 0, SEEK_SET)                   = 0
        newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=238592, ...}, AT_EMPTY_PATH) = 0
        mmap(NULL, 238592, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fd85cbd1000
        finit_module(3, "", 0)                  = 0
        munmap(0x7fd85cbd1000, 238592)          = 0
        close(3)                                = 0

After:
        read(3, "\177ELF\2\1", 6)               = 6
        lseek(3, 0, SEEK_SET)                   = 0
        finit_module(3, "", 0)                  = 0
        close(3)                                = 0

When using kernel compression now it's also possible to direct libkmod
to take the finit_module() path, avoiding the decompression in userspace
and just delegating it to the kernel.

Before:
        read(3, "(\265/\375\244\0", 6)          = 6
        lseek(3, 0, SEEK_SET)                   = 0
        read(3, "(\265/\375\244", 5)            = 5
        mmap(NULL, 135168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f3fa431e000
        read(3, "\0\244\3\0\\y\6", 7)           = 7
        mmap(NULL, 372736, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f3fa414f000
        brk(0x55944c6a1000)                     = 0x55944c6a1000
        read(3, "\356|\6G\27U\20 \312\260s\211\335\333\263\326\330\336\273O\211\356\306K\360Z\341\374U6\342\221"..., 53038) = 53038
        mremap(0x7f3fa431e000, 135168, 266240, MREMAP_MAYMOVE) = 0x7f3fa410e000
        read(3, ",;\3\nqf\311\362\325\211\7\341\375A\355\221\371L\\\5\7\375 \32\246<(\258=K\304"..., 20851) = 20851
        mremap(0x7f3fa410e000, 266240, 397312, MREMAP_MAYMOVE) = 0x7f3fa40ad000
        read(3, ")\36\250\213", 4)              = 4
        read(3, "", 4)                          = 0
        munmap(0x7f3fa414f000, 372736)          = 0
        init_module(0x7f3fa40ad010, 238592, "") = 0
        munmap(0x7f3fa40ad000, 397312)          = 0
        close(3)                                = 0

After:
        read(3, "(\265/\375\244P", 6)           = 6
        lseek(3, 0, SEEK_SET)                   = 0
        finit_module(3, "", 0x4 /* MODULE_INIT_??? */) = 0
        close(3)                                = 0

Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>

expand all expand all

Show diffs side-by-side

added added

removed removed

Lines of Context: