Re: [PATCH v1 0/7] DCE/DSE: Add Dead Syscalls Elimination support, part1

From: Arnd Bergmann
Date: Wed Sep 27 2023 - 06:24:40 EST


On Tue, Sep 26, 2023, at 22:49, Nicolas Pitre wrote:
> On Tue, 26 Sep 2023, Arnd Bergmann wrote:
>
>> $ size build/tmp/vmlinux-*
>> text data bss dec hex filename
>> 754772 220016 71841 1046629 ff865 vmlinux-tinyconfig
>> 717500 223368 71841 1012709 f73e5 vmlinux-tiny+nosyscalls
>> 567310 176200 71473 814983 c6f87 vmlinux-tiny+gc-sections
>> 493278 170752 71433 735463 b38e7 vmlinux-tiny+gc-sections+nosyscalls
>> 10120058 3572756 493701 14186515 d87813 vmlinux-defconfig
>> 9953934 3529004 491525 13974463 d53bbf vmlinux-defconfig+gc
>> 9709856 3500600 489221 13699677 d10a5d vmlinux-defconfig+gc+nosyscalls
>>
>> This would put us at an upper bound of 10% size savings (80kb) for
>> tinyconfig, which is clearly significant. For defconfig, it's
>> still 2.0% or 275kb size reduction when all syscalls are dropped.
>
> I did something similar a while ago. Results included here:
>
> https://lwn.net/Articles/746780/
>
> In my case, stubbing out all syscalls produced a 7.8% reduction which
> was somewhat disappointing compared to other techniques. Of course it
> all depends on what is your actual goal.

Thanks for the link, I had forgotten about your article.

With all the findings combined, I guess the filtering
at the syscall table level is not all that promising
any more. Going through the list of saved space, I ended up
with 5.7% (47kb) in the best case after I left the 40 syscalls
from the example in this thread.

Removing entire groups of features using normal Kconfig symbols
based on the remaining syscalls that have the largest size
probably gives better results. I can see possible groups
of syscalls that could be disabled under CONFIG_EXPERT,
along with making their underlying infrastructure optional:

- xattr
- ptrace
- adjtimex
- splice/vmsplice/tee
- unshare/setns
- sched_*

After those, one would quickly hit diminishing returns.

Arnd