From 8b9e8e2e665f7e8a97dd2282e8bb4b3442137178 Mon Sep 17 00:00:00 2001 From: Stefano Brivio Date: Sat, 18 Jan 2025 11:49:49 +0100 Subject: [PATCH 01/21] config-libkrunfw_x86_64: Drop POSIX_MQUEUE I doubt any modern containerised application would ever use mqueue, it's just for legacy Solaris applications nowadays, and applications in a container couldn't access it anyway. This saves 3280 bytes (29433904 -> 29430624) in the uncompressed kernel image. Signed-off-by: Stefano Brivio --- config-libkrunfw_x86_64 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/config-libkrunfw_x86_64 b/config-libkrunfw_x86_64 index b3c092e..63f787a 100644 --- a/config-libkrunfw_x86_64 +++ b/config-libkrunfw_x86_64 @@ -52,8 +52,7 @@ CONFIG_DEFAULT_HOSTNAME="(none)" CONFIG_SYSVIPC=y CONFIG_SYSVIPC_SYSCTL=y CONFIG_SYSVIPC_COMPAT=y -CONFIG_POSIX_MQUEUE=y -CONFIG_POSIX_MQUEUE_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_WATCH_QUEUE is not set CONFIG_CROSS_MEMORY_ATTACH=y # CONFIG_USELIB is not set From ca4c28f59aff1d22669972cd292664792c12761a Mon Sep 17 00:00:00 2001 From: Stefano Brivio Date: Sat, 18 Jan 2025 13:36:48 +0100 Subject: [PATCH 02/21] config-libkrunfw_x86_64: Pick UNWINDER_GUESS, decrease log buffer size UNWINDER_GUESS should be good enough for any typical usage (unrelated to kernel debugging), and 16 KiB of kernel logs is also more than enough. This saves 291624 bytes (29430624 -> 29139000) in the uncompressed kernel image. Signed-off-by: Stefano Brivio --- config-libkrunfw_x86_64 | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/config-libkrunfw_x86_64 b/config-libkrunfw_x86_64 index 63f787a..6eb1629 100644 --- a/config-libkrunfw_x86_64 +++ b/config-libkrunfw_x86_64 @@ -159,7 +159,7 @@ CONFIG_RCU_NEED_SEGCBLIST=y # CONFIG_IKCONFIG is not set # CONFIG_IKHEADERS is not set -CONFIG_LOG_BUF_SHIFT=16 +CONFIG_LOG_BUF_SHIFT=14 CONFIG_LOG_CPU_MAX_BUF_SHIFT=12 # CONFIG_PRINTK_INDEX is not set CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y @@ -654,7 +654,6 @@ CONFIG_HAVE_NOINSTR_HACK=y CONFIG_HAVE_NOINSTR_VALIDATION=y CONFIG_HAVE_UACCESS_VALIDATION=y CONFIG_HAVE_STACK_VALIDATION=y -CONFIG_HAVE_RELIABLE_STACKTRACE=y CONFIG_OLD_SIGSUSPEND3=y CONFIG_COMPAT_OLD_SIGACTION=y CONFIG_COMPAT_32BIT_TIME=y @@ -2289,7 +2288,6 @@ CONFIG_ARCH_HAS_CPU_CACHE_INVALIDATE_MEMREGION=y CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE=y CONFIG_ARCH_HAS_COPY_MC=y CONFIG_ARCH_STACKWALK=y -CONFIG_STACKDEPOT=y CONFIG_SBITMAP=y # end of Library routines @@ -2331,10 +2329,7 @@ CONFIG_STRIP_ASM_SYMS=y CONFIG_DEBUG_SECTION_MISMATCH=y CONFIG_SECTION_MISMATCH_WARN_ONLY=y # CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_64B is not set -CONFIG_ARCH_WANT_FRAME_POINTERS=y -CONFIG_FRAME_POINTER=y CONFIG_OBJTOOL=y -CONFIG_STACK_VALIDATION=y # CONFIG_VMLINUX_MAP is not set # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set # end of Compile-time checks and compiler options @@ -2372,8 +2367,7 @@ CONFIG_HAVE_KCSAN_COMPILER=y # # CONFIG_PAGE_EXTENSION is not set # CONFIG_DEBUG_PAGEALLOC is not set -CONFIG_SLUB_DEBUG=y -# CONFIG_SLUB_DEBUG_ON is not set +# CONFIG_SLUB_DEBUG is not set # CONFIG_PAGE_OWNER is not set # CONFIG_PAGE_TABLE_CHECK is not set # CONFIG_PAGE_POISONING is not set @@ -2531,7 +2525,8 @@ CONFIG_IO_DELAY_0X80=y # CONFIG_DEBUG_NMI_SELFTEST is not set # CONFIG_X86_DEBUG_FPU is not set # CONFIG_UNWINDER_ORC is not set -CONFIG_UNWINDER_FRAME_POINTER=y +# CONFIG_UNWINDER_FRAME_POINTER is not set +CONFIG_UNWINDER_GUESS=y # end of x86 Debugging # From 2110a4255bb6e73e2b6209eb58d41c00ea6392e4 Mon Sep 17 00:00:00 2001 From: Stefano Brivio Date: Sat, 18 Jan 2025 11:55:52 +0100 Subject: [PATCH 03/21] config-libkrunfw_x86_64: Disable kernel and process stack debugging features These might be useful for libkrun and libkrunfw development, but not really for typical users, and single options can be easily enabled as needed during development anyway. This saves: - 166976 bytes (29139000 -> 28972024) in the uncompressed kernel image - 11 ms (241 -> 230, average of 1000 runs) for: muvm --mem=64 --vram=0 -c 0,1 -- true Signed-off-by: Stefano Brivio --- config-libkrunfw_x86_64 | 90 +++++++++-------------------------------- 1 file changed, 19 insertions(+), 71 deletions(-) diff --git a/config-libkrunfw_x86_64 b/config-libkrunfw_x86_64 index 6eb1629..a8dbaea 100644 --- a/config-libkrunfw_x86_64 +++ b/config-libkrunfw_x86_64 @@ -75,7 +75,6 @@ CONFIG_GENERIC_IRQ_MATRIX_ALLOCATOR=y CONFIG_GENERIC_IRQ_RESERVATION_MODE=y CONFIG_IRQ_FORCED_THREADING=y CONFIG_SPARSE_IRQ=y -# CONFIG_GENERIC_IRQ_DEBUGFS is not set # end of IRQ subsystem CONFIG_CLOCKSOURCE_WATCHDOG=y @@ -161,7 +160,6 @@ CONFIG_RCU_NEED_SEGCBLIST=y # CONFIG_IKHEADERS is not set CONFIG_LOG_BUF_SHIFT=14 CONFIG_LOG_CPU_MAX_BUF_SHIFT=12 -# CONFIG_PRINTK_INDEX is not set CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y # @@ -266,17 +264,15 @@ CONFIG_PERF_EVENTS=y # CONFIG_DEBUG_PERF_USE_VMALLOC is not set # end of Kernel Performance Events And Counters -CONFIG_PROFILING=y +# CONFIG_PROFILING is not set # CONFIG_RUST is not set # # Kexec and crash features # CONFIG_CRASH_CORE=y -CONFIG_KEXEC_CORE=y # CONFIG_KEXEC is not set -CONFIG_KEXEC_FILE=y -# CONFIG_KEXEC_SIG is not set +# CONFIG_KEXEC_FILE is not set # CONFIG_CRASH_DUMP is not set # end of Kexec and crash features # end of General setup @@ -384,7 +380,6 @@ CONFIG_X86_MSR=y CONFIG_X86_CPUID=y # CONFIG_X86_5LEVEL is not set CONFIG_X86_DIRECT_GBPAGES=y -# CONFIG_X86_CPA_STATISTICS is not set # CONFIG_NUMA is not set CONFIG_ARCH_SPARSEMEM_ENABLE=y CONFIG_ARCH_SPARSEMEM_DEFAULT=y @@ -417,7 +412,6 @@ CONFIG_HZ=250 CONFIG_SCHED_HRTICK=y CONFIG_ARCH_SUPPORTS_KEXEC=y CONFIG_ARCH_SUPPORTS_KEXEC_FILE=y -CONFIG_ARCH_SELECTS_KEXEC_FILE=y CONFIG_ARCH_SUPPORTS_KEXEC_PURGATORY=y CONFIG_ARCH_SUPPORTS_KEXEC_SIG=y CONFIG_ARCH_SUPPORTS_KEXEC_SIG_FORCE=y @@ -666,7 +660,6 @@ CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y CONFIG_STRICT_KERNEL_RWX=y CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y CONFIG_HAVE_ARCH_PREL32_RELOCATIONS=y -# CONFIG_LOCK_EVENT_COUNTS is not set CONFIG_ARCH_HAS_MEM_ENCRYPT=y CONFIG_HAVE_STATIC_CALL=y CONFIG_HAVE_STATIC_CALL_INLINE=y @@ -683,7 +676,6 @@ CONFIG_ARCH_HAS_NONLEAF_PMD_YOUNG=y # # GCOV-based kernel profiling # -# CONFIG_GCOV_KERNEL is not set CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y # end of GCOV-based kernel profiling @@ -711,7 +703,6 @@ CONFIG_BLK_WBT_MQ=y # CONFIG_BLK_CGROUP_IOLATENCY is not set # CONFIG_BLK_CGROUP_IOCOST is not set # CONFIG_BLK_CGROUP_IOPRIO is not set -CONFIG_BLK_DEBUG_FS=y # CONFIG_BLK_SED_OPAL is not set # CONFIG_BLK_INLINE_ENCRYPTION is not set @@ -857,7 +848,10 @@ CONFIG_ARCH_USES_HIGH_VMA_FLAGS=y CONFIG_ARCH_HAS_PKEYS=y CONFIG_VM_EVENT_COUNTERS=y CONFIG_PERCPU_STATS=y -# CONFIG_GUP_TEST is not set + +# +# GUP_TEST needs to have DEBUG_FS enabled +# # CONFIG_DMAPOOL_TEST is not set CONFIG_ARCH_HAS_PTE_SPECIAL=y CONFIG_MEMFD_CREATE=y @@ -1065,7 +1059,6 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y # Firmware loader # CONFIG_FW_LOADER=y -CONFIG_FW_LOADER_DEBUG=y CONFIG_EXTRA_FIRMWARE="" # CONFIG_FW_LOADER_USER_HELPER is not set # CONFIG_FW_LOADER_COMPRESS is not set @@ -1261,7 +1254,6 @@ CONFIG_VIRTIO_NET=y # CONFIG_WWAN is not set # end of Wireless WAN -# CONFIG_NETDEVSIM is not set CONFIG_NET_FAILOVER=y # CONFIG_ISDN is not set @@ -1515,7 +1507,6 @@ CONFIG_DMADEVICES=y # DMABUF options # CONFIG_SYNC_FILE=y -# CONFIG_SW_SYNC is not set # CONFIG_UDMABUF is not set # CONFIG_DMABUF_MOVE_NOTIFY is not set # CONFIG_DMABUF_DEBUG is not set @@ -2270,7 +2261,6 @@ CONFIG_ARCH_DMA_ADDR_T_64BIT=y CONFIG_SWIOTLB=y # CONFIG_SWIOTLB_DYNAMIC is not set # CONFIG_DMA_API_DEBUG is not set -# CONFIG_DMA_MAP_BENCHMARK is not set CONFIG_SGL_ALLOC=y CONFIG_CPU_RMAP=y CONFIG_DQL=y @@ -2305,14 +2295,14 @@ CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7 CONFIG_CONSOLE_LOGLEVEL_QUIET=4 CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 # CONFIG_BOOT_PRINTK_DELAY is not set -CONFIG_DYNAMIC_DEBUG=y -CONFIG_DYNAMIC_DEBUG_CORE=y -CONFIG_SYMBOLIC_ERRNAME=y -CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DYNAMIC_DEBUG is not set +# CONFIG_DYNAMIC_DEBUG_CORE is not set +# CONFIG_SYMBOLIC_ERRNAME is not set +# CONFIG_DEBUG_BUGVERBOSE is not set # end of printk and dmesg options CONFIG_DEBUG_KERNEL=y -CONFIG_DEBUG_MISC=y +# CONFIG_DEBUG_MISC is not set # # Compile-time checks and compiler options @@ -2337,14 +2327,8 @@ CONFIG_OBJTOOL=y # # Generic Kernel Debugging Instruments # -CONFIG_MAGIC_SYSRQ=y -CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1 -CONFIG_MAGIC_SYSRQ_SERIAL=y -CONFIG_MAGIC_SYSRQ_SERIAL_SEQUENCE="" -CONFIG_DEBUG_FS=y -CONFIG_DEBUG_FS_ALLOW_ALL=y -# CONFIG_DEBUG_FS_DISALLOW_MOUNT is not set -# CONFIG_DEBUG_FS_ALLOW_NONE is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_DEBUG_FS is not set CONFIG_HAVE_ARCH_KGDB=y # CONFIG_KGDB is not set CONFIG_ARCH_HAS_UBSAN_SANITIZE_ALL=y @@ -2375,12 +2359,10 @@ CONFIG_HAVE_KCSAN_COMPILER=y CONFIG_ARCH_HAS_DEBUG_WX=y # CONFIG_DEBUG_WX is not set CONFIG_GENERIC_PTDUMP=y -# CONFIG_PTDUMP_DEBUGFS is not set CONFIG_HAVE_DEBUG_KMEMLEAK=y # CONFIG_DEBUG_KMEMLEAK is not set # CONFIG_PER_VMA_LOCK_STATS is not set # CONFIG_DEBUG_OBJECTS is not set -# CONFIG_SHRINKER_DEBUG is not set # CONFIG_DEBUG_STACK_USAGE is not set # CONFIG_SCHED_STACK_END_CHECK is not set CONFIG_ARCH_HAS_DEBUG_VM_PGTABLE=y @@ -2423,13 +2405,12 @@ CONFIG_HARDLOCKUP_CHECK_TIMESTAMP=y # # Scheduler Debugging # -# CONFIG_SCHED_DEBUG is not set CONFIG_SCHED_INFO=y # CONFIG_SCHEDSTATS is not set # end of Scheduler Debugging # CONFIG_DEBUG_TIMEKEEPING is not set -CONFIG_DEBUG_PREEMPT=y +# CONFIG_DEBUG_PREEMPT is not set # # Lock Debugging (spinlocks, mutexes, etc...) @@ -2453,14 +2434,14 @@ CONFIG_LOCK_DEBUGGING_SUPPORT=y # CONFIG_NMI_CHECK_CPU is not set # CONFIG_DEBUG_IRQFLAGS is not set -CONFIG_STACKTRACE=y +# CONFIG_STACKTRACE is not set # CONFIG_WARN_ALL_UNSEEDED_RANDOM is not set # CONFIG_DEBUG_KOBJECT is not set # # Debug kernel data structures # -CONFIG_DEBUG_LIST=y +# CONFIG_DEBUG_LIST is not set # CONFIG_DEBUG_PLIST is not set # CONFIG_DEBUG_SG is not set # CONFIG_DEBUG_NOTIFIERS is not set @@ -2510,8 +2491,8 @@ CONFIG_STRICT_DEVMEM=y # # x86 Debugging # -CONFIG_X86_VERBOSE_BOOTUP=y -CONFIG_EARLY_PRINTK=y +# CONFIG_X86_VERBOSE_BOOTUP is not set +# CONFIG_EARLY_PRINTK is not set # CONFIG_DEBUG_TLBFLUSH is not set CONFIG_HAVE_MMIOTRACE_SUPPORT=y # CONFIG_X86_DECODER_SELFTEST is not set @@ -2519,7 +2500,6 @@ CONFIG_IO_DELAY_0X80=y # CONFIG_IO_DELAY_0XED is not set # CONFIG_IO_DELAY_UDELAY is not set # CONFIG_IO_DELAY_NONE is not set -# CONFIG_DEBUG_BOOT_PARAMS is not set # CONFIG_CPA_DEBUG is not set # CONFIG_DEBUG_ENTRY is not set # CONFIG_DEBUG_NMI_SELFTEST is not set @@ -2538,39 +2518,7 @@ CONFIG_UNWINDER_GUESS=y CONFIG_ARCH_HAS_KCOV=y CONFIG_CC_HAS_SANCOV_TRACE_PC=y # CONFIG_KCOV is not set -CONFIG_RUNTIME_TESTING_MENU=y -# CONFIG_TEST_DHRY is not set -# CONFIG_LKDTM is not set -# CONFIG_TEST_MIN_HEAP is not set -# CONFIG_TEST_DIV64 is not set -# CONFIG_BACKTRACE_SELF_TEST is not set -# CONFIG_TEST_REF_TRACKER is not set -# CONFIG_RBTREE_TEST is not set -# CONFIG_REED_SOLOMON_TEST is not set -# CONFIG_INTERVAL_TREE_TEST is not set -# CONFIG_ATOMIC64_SELFTEST is not set -# CONFIG_TEST_HEXDUMP is not set -# CONFIG_STRING_SELFTEST is not set -# CONFIG_TEST_STRING_HELPERS is not set -# CONFIG_TEST_KSTRTOX is not set -# CONFIG_TEST_PRINTF is not set -# CONFIG_TEST_SCANF is not set -# CONFIG_TEST_BITMAP is not set -# CONFIG_TEST_UUID is not set -# CONFIG_TEST_XARRAY is not set -# CONFIG_TEST_MAPLE_TREE is not set -# CONFIG_TEST_RHASHTABLE is not set -# CONFIG_TEST_IDA is not set -# CONFIG_FIND_BIT_BENCHMARK is not set -# CONFIG_TEST_FIRMWARE is not set -# CONFIG_TEST_SYSCTL is not set -# CONFIG_TEST_UDELAY is not set -# CONFIG_TEST_DYNAMIC_DEBUG is not set -# CONFIG_TEST_MEMCAT_P is not set -# CONFIG_TEST_MEMINIT is not set -# CONFIG_TEST_FREE_PAGES is not set -# CONFIG_TEST_FPU is not set -# CONFIG_TEST_CLOCKSOURCE_WATCHDOG is not set +# CONFIG_RUNTIME_TESTING_MENU is not set CONFIG_ARCH_USE_MEMTEST=y # CONFIG_MEMTEST is not set # end of Kernel Testing and Coverage From e9a4b658ac6d0900900f36caef63e54ec5a835b6 Mon Sep 17 00:00:00 2001 From: Stefano Brivio Date: Sat, 18 Jan 2025 12:32:17 +0100 Subject: [PATCH 04/21] config-libkrunfw_x86_64: Drop PCSPKR_PLATFORM Even if we had a PC speaker, we couldn't access it anyway. This saves 176 bytes (28972024 -> 28971848) in the uncompressed kernel image. Signed-off-by: Stefano Brivio --- config-libkrunfw_x86_64 | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/config-libkrunfw_x86_64 b/config-libkrunfw_x86_64 index a8dbaea..bed163c 100644 --- a/config-libkrunfw_x86_64 +++ b/config-libkrunfw_x86_64 @@ -231,7 +231,7 @@ CONFIG_POSIX_TIMERS=y CONFIG_PRINTK=y CONFIG_BUG=y CONFIG_ELF_CORE=y -CONFIG_PCSPKR_PLATFORM=y +# CONFIG_PCSPKR_PLATFORM is not set CONFIG_BASE_FULL=y CONFIG_FUTEX=y CONFIG_FUTEX_PI=y @@ -1284,7 +1284,6 @@ CONFIG_INPUT_EVDEV=y CONFIG_INPUT_MISC=y # CONFIG_INPUT_AD714X is not set # CONFIG_INPUT_E3X0_BUTTON is not set -# CONFIG_INPUT_PCSPKR is not set CONFIG_INPUT_UINPUT=y # CONFIG_INPUT_ADXL34X is not set # CONFIG_INPUT_CMA3000 is not set @@ -1570,7 +1569,6 @@ CONFIG_COMMON_CLK=y # Clock Source drivers # CONFIG_CLKEVT_I8253=y -CONFIG_I8253_LOCK=y CONFIG_CLKBLD_I8253=y # end of Clock Source drivers From 98f2805a1e737c1338427b5547675bc75a5c482c Mon Sep 17 00:00:00 2001 From: Stefano Brivio Date: Sat, 18 Jan 2025 12:35:59 +0100 Subject: [PATCH 05/21] config-libkrunfw_x86_64: Disable processor quirks and features we don't need We typically don't need access to local APIC modes via MSRs in a guest. MTRRs are not relevant either. Disable all processor and memory features and quirks we'll never need in a virtual machine. This saves 76904 bytes (28971848 -> 28894944) in the uncompressed kernel image. Signed-off-by: Stefano Brivio --- config-libkrunfw_x86_64 | 29 +++++++++-------------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/config-libkrunfw_x86_64 b/config-libkrunfw_x86_64 index bed163c..a2f35c3 100644 --- a/config-libkrunfw_x86_64 +++ b/config-libkrunfw_x86_64 @@ -308,7 +308,7 @@ CONFIG_CC_HAS_SANE_STACKPROTECTOR=y # Processor type and features # CONFIG_SMP=y -CONFIG_X86_X2APIC=y +# CONFIG_X86_X2APIC is not set CONFIG_X86_MPPARSE=y # CONFIG_GOLDFISH is not set # CONFIG_X86_CPU_RESCTRL is not set @@ -359,50 +359,41 @@ CONFIG_SCHED_MC=y CONFIG_SCHED_MC_PRIO=y CONFIG_X86_LOCAL_APIC=y CONFIG_X86_IO_APIC=y -CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y +# CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set # CONFIG_X86_MCE is not set # # Performance monitoring # # CONFIG_PERF_EVENTS_AMD_POWER is not set -CONFIG_PERF_EVENTS_AMD_UNCORE=y +# CONFIG_PERF_EVENTS_AMD_UNCORE is not set # CONFIG_PERF_EVENTS_AMD_BRS is not set # end of Performance monitoring -CONFIG_X86_16BIT=y -CONFIG_X86_ESPFIX64=y CONFIG_X86_VSYSCALL_EMULATION=y # CONFIG_X86_IOPL_IOPERM is not set CONFIG_MICROCODE=y # CONFIG_MICROCODE_LATE_LOADING is not set -CONFIG_X86_MSR=y +# CONFIG_X86_MSR is not set CONFIG_X86_CPUID=y # CONFIG_X86_5LEVEL is not set CONFIG_X86_DIRECT_GBPAGES=y # CONFIG_NUMA is not set CONFIG_ARCH_SPARSEMEM_ENABLE=y CONFIG_ARCH_SPARSEMEM_DEFAULT=y -CONFIG_ARCH_MEMORY_PROBE=y +# CONFIG_ARCH_MEMORY_PROBE is not set CONFIG_ARCH_PROC_KCORE_TEXT=y CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000 # CONFIG_X86_PMEM_LEGACY is not set -CONFIG_X86_CHECK_BIOS_CORRUPTION=y -CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y -CONFIG_MTRR=y -CONFIG_MTRR_SANITIZER=y -CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=0 -CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1 -CONFIG_X86_PAT=y -CONFIG_ARCH_USES_PG_UNCACHED=y +# CONFIG_X86_CHECK_BIOS_CORRUPTION is not set +# CONFIG_MTRR is not set CONFIG_X86_UMIP=y CONFIG_CC_HAS_IBT=y # CONFIG_X86_KERNEL_IBT is not set -CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS=y +# CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS is not set CONFIG_X86_INTEL_TSX_MODE_OFF=y # CONFIG_X86_INTEL_TSX_MODE_ON is not set # CONFIG_X86_INTEL_TSX_MODE_AUTO is not set -# CONFIG_X86_SGX is not set # CONFIG_X86_USER_SHADOW_STACK is not set # CONFIG_HZ_100 is not set CONFIG_HZ_250=y @@ -428,7 +419,7 @@ CONFIG_HOTPLUG_CPU=y CONFIG_LEGACY_VSYSCALL_XONLY=y # CONFIG_LEGACY_VSYSCALL_NONE is not set # CONFIG_CMDLINE_BOOL is not set -CONFIG_MODIFY_LDT_SYSCALL=y +# CONFIG_MODIFY_LDT_SYSCALL is not set # CONFIG_STRICT_SIGALTSTACK_SIZE is not set CONFIG_HAVE_LIVEPATCH=y # end of Processor type and features @@ -844,8 +835,6 @@ CONFIG_ZONE_DMA=y CONFIG_ZONE_DMA32=y CONFIG_ZONE_DEVICE=y # CONFIG_DEVICE_PRIVATE is not set -CONFIG_ARCH_USES_HIGH_VMA_FLAGS=y -CONFIG_ARCH_HAS_PKEYS=y CONFIG_VM_EVENT_COUNTERS=y CONFIG_PERCPU_STATS=y From 3630860a6e9ebcf5da796a212144a11c7163b4f4 Mon Sep 17 00:00:00 2001 From: Stefano Brivio Date: Sat, 18 Jan 2025 12:44:13 +0100 Subject: [PATCH 06/21] config-libkrunfw_x86_64: Drop power management features and cpufreq The host takes care of that for us. Keep CPU_IDLE, CPU_IDLE_GOV_HALTPOLL, and HALTPOLL_CPUIDLE, as they might be used when pinning vCPUs. This saves 2189032 bytes (28894944 -> 26705912) in the uncompressed kernel image. Signed-off-by: Stefano Brivio --- config-libkrunfw_x86_64 | 41 ++++++----------------------------------- 1 file changed, 6 insertions(+), 35 deletions(-) diff --git a/config-libkrunfw_x86_64 b/config-libkrunfw_x86_64 index a2f35c3..3031307 100644 --- a/config-libkrunfw_x86_64 +++ b/config-libkrunfw_x86_64 @@ -165,7 +165,6 @@ CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y # # Scheduler features # -# CONFIG_UCLAMP_TASK is not set # end of Scheduler features CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y @@ -356,7 +355,7 @@ CONFIG_NR_CPUS=16 CONFIG_SCHED_CLUSTER=y CONFIG_SCHED_SMT=y CONFIG_SCHED_MC=y -CONFIG_SCHED_MC_PRIO=y +# CONFIG_SCHED_MC_PRIO is not set CONFIG_X86_LOCAL_APIC=y CONFIG_X86_IO_APIC=y # CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set @@ -454,54 +453,28 @@ CONFIG_ARCH_HAS_ADD_PAGES=y # # CONFIG_SUSPEND is not set # CONFIG_HIBERNATION is not set -CONFIG_PM=y -# CONFIG_PM_DEBUG is not set -CONFIG_PM_CLK=y -# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set -# CONFIG_ENERGY_MODEL is not set +# CONFIG_PM is not set CONFIG_ARCH_SUPPORTS_ACPI=y # CONFIG_ACPI is not set # # CPU Frequency scaling # -CONFIG_CPU_FREQ=y -CONFIG_CPU_FREQ_GOV_ATTR_SET=y -CONFIG_CPU_FREQ_STAT=y -CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y -# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set -# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set -# CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL is not set -CONFIG_CPU_FREQ_GOV_PERFORMANCE=y -# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set -# CONFIG_CPU_FREQ_GOV_USERSPACE is not set -# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set -# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set -CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y - -# -# CPU frequency scaling drivers -# -CONFIG_X86_INTEL_PSTATE=y -# CONFIG_X86_P4_CLOCKMOD is not set - -# -# shared options -# +# CONFIG_CPU_FREQ is not set # end of CPU Frequency scaling # # CPU Idle # CONFIG_CPU_IDLE=y -CONFIG_CPU_IDLE_GOV_LADDER=y +# CONFIG_CPU_IDLE_GOV_LADDER is not set CONFIG_CPU_IDLE_GOV_MENU=y # CONFIG_CPU_IDLE_GOV_TEO is not set CONFIG_CPU_IDLE_GOV_HALTPOLL=y CONFIG_HALTPOLL_CPUIDLE=y # end of CPU Idle - -CONFIG_INTEL_IDLE=y + +# CONFIG_INTEL_IDLE is not set # end of Power management and ACPI options # @@ -719,7 +692,6 @@ CONFIG_PARTITION_ADVANCED=y # end of Partition Types CONFIG_BLK_MQ_VIRTIO=y -CONFIG_BLK_PM=y CONFIG_BLOCK_HOLDER_DEPRECATED=y CONFIG_BLK_MQ_STACKING=y @@ -1545,7 +1517,6 @@ CONFIG_X86_PLATFORM_DEVICES=y # end of Intel Uncore Frequency Control # CONFIG_INTEL_PUNIT_IPC is not set -# CONFIG_INTEL_TURBO_MAX_3 is not set # CONFIG_SIEMENS_SIMATIC_IPC is not set # CONFIG_WINMATE_FM07_KEYS is not set CONFIG_HAVE_CLK=y From 7c867ec0254ad1f35bc77f7d6f11cb63a0074a57 Mon Sep 17 00:00:00 2001 From: Stefano Brivio Date: Sat, 18 Jan 2025 12:46:47 +0100 Subject: [PATCH 07/21] config-libkrunfw_x86_64: Drop 32-bit emulation features x32 won't work anyway, and I doubt that any post-modern application outside x32 would use any of these. This saves 80280 bytes (26705912 -> 26625632) in the uncompressed kernel image. Signed-off-by: Stefano Brivio --- config-libkrunfw_x86_64 | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/config-libkrunfw_x86_64 b/config-libkrunfw_x86_64 index 3031307..0ef72b0 100644 --- a/config-libkrunfw_x86_64 +++ b/config-libkrunfw_x86_64 @@ -51,7 +51,6 @@ CONFIG_DEFAULT_INIT="" CONFIG_DEFAULT_HOSTNAME="(none)" CONFIG_SYSVIPC=y CONFIG_SYSVIPC_SYSCTL=y -CONFIG_SYSVIPC_COMPAT=y # CONFIG_POSIX_MQUEUE is not set # CONFIG_WATCH_QUEUE is not set CONFIG_CROSS_MEMORY_ATTACH=y @@ -217,11 +216,9 @@ CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y CONFIG_LD_ORPHAN_WARN=y CONFIG_LD_ORPHAN_WARN_LEVEL="warn" CONFIG_SYSCTL=y -CONFIG_HAVE_UID16=y CONFIG_SYSCTL_EXCEPTION_TRACE=y CONFIG_HAVE_PCSPKR_PLATFORM=y CONFIG_EXPERT=y -CONFIG_UID16=y CONFIG_MULTIUSER=y CONFIG_SGETMASK_SYSCALL=y CONFIG_SYSFS_SYSCALL=y @@ -414,7 +411,6 @@ CONFIG_RELOCATABLE=y # CONFIG_RANDOMIZE_BASE is not set CONFIG_PHYSICAL_ALIGN=0x1000000 CONFIG_HOTPLUG_CPU=y -# CONFIG_COMPAT_VDSO is not set CONFIG_LEGACY_VSYSCALL_XONLY=y # CONFIG_LEGACY_VSYSCALL_NONE is not set # CONFIG_CMDLINE_BOOL is not set @@ -487,11 +483,8 @@ CONFIG_ISA_DMA_API=y # # Binary Emulations # -CONFIG_IA32_EMULATION=y +# CONFIG_IA32_EMULATION is not set # CONFIG_X86_X32_ABI is not set -CONFIG_COMPAT_32=y -CONFIG_COMPAT=y -CONFIG_COMPAT_FOR_U64_ALIGNMENT=y # end of Binary Emulations CONFIG_HAVE_KVM=y @@ -563,8 +556,6 @@ CONFIG_ARCH_HAS_NMI_SAFE_THIS_CPU_OPS=y CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y CONFIG_HAVE_CMPXCHG_LOCAL=y CONFIG_HAVE_CMPXCHG_DOUBLE=y -CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION=y -CONFIG_ARCH_WANT_OLD_COMPAT_IPC=y CONFIG_HAVE_ARCH_SECCOMP=y CONFIG_HAVE_ARCH_SECCOMP_FILTER=y CONFIG_SECCOMP=y @@ -601,9 +592,6 @@ CONFIG_ARCH_HAS_ELF_RANDOMIZE=y CONFIG_HAVE_ARCH_MMAP_RND_BITS=y CONFIG_HAVE_EXIT_THREAD=y CONFIG_ARCH_MMAP_RND_BITS=28 -CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS=y -CONFIG_ARCH_MMAP_RND_COMPAT_BITS=8 -CONFIG_HAVE_ARCH_COMPAT_MMAP_BASES=y CONFIG_PAGE_SIZE_LESS_THAN_64KB=y CONFIG_PAGE_SIZE_LESS_THAN_256KB=y CONFIG_HAVE_OBJTOOL=y @@ -612,9 +600,7 @@ CONFIG_HAVE_NOINSTR_HACK=y CONFIG_HAVE_NOINSTR_VALIDATION=y CONFIG_HAVE_UACCESS_VALIDATION=y CONFIG_HAVE_STACK_VALIDATION=y -CONFIG_OLD_SIGSUSPEND3=y -CONFIG_COMPAT_OLD_SIGACTION=y -CONFIG_COMPAT_32BIT_TIME=y +# CONFIG_COMPAT_32BIT_TIME is not set CONFIG_HAVE_ARCH_VMAP_STACK=y CONFIG_VMAP_STACK=y CONFIG_HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET=y @@ -722,7 +708,6 @@ CONFIG_FREEZER=y # Executable file formats # CONFIG_BINFMT_ELF=y -CONFIG_COMPAT_BINFMT_ELF=y CONFIG_ELFCORE=y CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y CONFIG_BINFMT_SCRIPT=y @@ -853,7 +838,6 @@ CONFIG_AF_UNIX_OOB=y CONFIG_XFRM=y CONFIG_XFRM_ALGO=y CONFIG_XFRM_USER=y -# CONFIG_XFRM_USER_COMPAT is not set # CONFIG_XFRM_INTERFACE is not set CONFIG_XFRM_SUB_POLICY=y CONFIG_XFRM_MIGRATE=y From 3feaab248824ef1f18b234d363a7d16ddf7a1f93 Mon Sep 17 00:00:00 2001 From: Stefano Brivio Date: Sat, 18 Jan 2025 12:54:49 +0100 Subject: [PATCH 08/21] config-libkrunfw_x86_64: Disable block throttling and autoload features I doubt a guest would ever need them. This saves: - 7896 bytes (26625632 -> 26617736) in the uncompressed kernel image - 5 ms (230 -> 225, average of 1000 runs) for: muvm --mem=64 --vram=0 -c 0,1 -- true Signed-off-by: Stefano Brivio --- config-libkrunfw_x86_64 | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/config-libkrunfw_x86_64 b/config-libkrunfw_x86_64 index 0ef72b0..e49f61a 100644 --- a/config-libkrunfw_x86_64 +++ b/config-libkrunfw_x86_64 @@ -639,17 +639,13 @@ CONFIG_RT_MUTEXES=y CONFIG_BASE_SMALL=0 # CONFIG_MODULES is not set CONFIG_BLOCK=y -CONFIG_BLOCK_LEGACY_AUTOLOAD=y -CONFIG_BLK_CGROUP_RWSTAT=y +# CONFIG_BLOCK_LEGACY_AUTOLOAD is not set CONFIG_BLK_CGROUP_PUNT_BIO=y -CONFIG_BLK_DEV_BSG_COMMON=y -CONFIG_BLK_DEV_BSGLIB=y +# CONFIG_BLK_DEV_BSGLIB is not set CONFIG_BLK_DEV_INTEGRITY=y # CONFIG_BLK_DEV_ZONED is not set -CONFIG_BLK_DEV_THROTTLING=y -# CONFIG_BLK_DEV_THROTTLING_LOW is not set -CONFIG_BLK_WBT=y -CONFIG_BLK_WBT_MQ=y +# CONFIG_BLK_DEV_THROTTLING is not set +# CONFIG_BLK_WBT is not set # CONFIG_BLK_CGROUP_IOLATENCY is not set # CONFIG_BLK_CGROUP_IOCOST is not set # CONFIG_BLK_CGROUP_IOPRIO is not set From 5e2a237ed94f9e8f70c9b1a355ca6f034b5da235 Mon Sep 17 00:00:00 2001 From: Stefano Brivio Date: Sat, 18 Jan 2025 12:58:45 +0100 Subject: [PATCH 09/21] config-libkrunfw_x86_64: Drop swap and unused memory features ...such as ZONE_DMA, and low-level statistics and counters that don't really tell us anything in a guest anyway. This saves 32968 bytes (26617736 -> 26584768) in the uncompressed kernel image. Signed-off-by: Stefano Brivio --- config-libkrunfw_x86_64 | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/config-libkrunfw_x86_64 b/config-libkrunfw_x86_64 index e49f61a..6489fd9 100644 --- a/config-libkrunfw_x86_64 +++ b/config-libkrunfw_x86_64 @@ -448,7 +448,6 @@ CONFIG_ARCH_HAS_ADD_PAGES=y # Power management and ACPI options # # CONFIG_SUSPEND is not set -# CONFIG_HIBERNATION is not set # CONFIG_PM is not set CONFIG_ARCH_SUPPORTS_ACPI=y # CONFIG_ACPI is not set @@ -714,8 +713,7 @@ CONFIG_COREDUMP=y # # Memory Management options # -CONFIG_SWAP=y -# CONFIG_ZSWAP is not set +# CONFIG_SWAP is not set # # SLAB allocator options @@ -771,7 +769,6 @@ CONFIG_ARCH_WANTS_THP_SWAP=y CONFIG_TRANSPARENT_HUGEPAGE=y # CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS is not set CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y -CONFIG_THP_SWAP=y # CONFIG_READ_ONLY_THP_FOR_FS is not set CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y @@ -784,12 +781,12 @@ CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y CONFIG_ARCH_HAS_CURRENT_STACK_POINTER=y CONFIG_ARCH_HAS_PTE_DEVMAP=y CONFIG_ARCH_HAS_ZONE_DMA_SET=y -CONFIG_ZONE_DMA=y +# CONFIG_ZONE_DMA is not set CONFIG_ZONE_DMA32=y CONFIG_ZONE_DEVICE=y # CONFIG_DEVICE_PRIVATE is not set -CONFIG_VM_EVENT_COUNTERS=y -CONFIG_PERCPU_STATS=y +# CONFIG_VM_EVENT_COUNTERS is not set +# CONFIG_PERCPU_STATS is not set # # GUP_TEST needs to have DEBUG_FS enabled From a17cbb506687168af25737fac71171f279cfe264 Mon Sep 17 00:00:00 2001 From: Stefano Brivio Date: Sat, 18 Jan 2025 13:05:53 +0100 Subject: [PATCH 10/21] config-libkrunfw_x86_64: Disable unused or unusable network features We don't need: - SYN cookies: we'll never switch them on with TSI or passt - TCP MD5 signatures: same here - ethtool support: of little use with virtio-net, no use with TSI - XFRM (IPsec), I doubt typical users would set up IPsec endpoints - TCP advanced congestion features: we only have CUBIC enabled anyway - netlabel: CIPSO, CALIPSO and friends are pretty much obsolete This saves 128208 bytes (26584768 -> 26456560) in the uncompressed kernel image. Signed-off-by: Stefano Brivio --- config-libkrunfw_x86_64 | 38 ++++++-------------------------------- 1 file changed, 6 insertions(+), 32 deletions(-) diff --git a/config-libkrunfw_x86_64 b/config-libkrunfw_x86_64 index 6489fd9..b740604 100644 --- a/config-libkrunfw_x86_64 +++ b/config-libkrunfw_x86_64 @@ -816,7 +816,6 @@ CONFIG_NET=y CONFIG_NET_INGRESS=y CONFIG_NET_EGRESS=y CONFIG_NET_XGRESS=y -CONFIG_SKB_EXTENSIONS=y # # Networking options @@ -828,13 +827,7 @@ CONFIG_UNIX_SCM=y CONFIG_AF_UNIX_OOB=y # CONFIG_UNIX_DIAG is not set # CONFIG_TLS is not set -CONFIG_XFRM=y -CONFIG_XFRM_ALGO=y -CONFIG_XFRM_USER=y -# CONFIG_XFRM_INTERFACE is not set -CONFIG_XFRM_SUB_POLICY=y -CONFIG_XFRM_MIGRATE=y -CONFIG_XFRM_STATISTICS=y +# CONFIG_XFRM_USER is not set # CONFIG_NET_KEY is not set # CONFIG_XDP_SOCKETS is not set CONFIG_INET=y @@ -844,7 +837,7 @@ CONFIG_IP_MULTICAST=y # CONFIG_NET_IPIP is not set # CONFIG_NET_IPGRE_DEMUX is not set # CONFIG_IP_MROUTE is not set -CONFIG_SYN_COOKIES=y +# CONFIG_SYN_COOKIES is not set # CONFIG_NET_IPVTI is not set # CONFIG_NET_FOU is not set # CONFIG_INET_AH is not set @@ -852,27 +845,10 @@ CONFIG_SYN_COOKIES=y # CONFIG_INET_IPCOMP is not set CONFIG_INET_TABLE_PERTURB_ORDER=16 # CONFIG_INET_DIAG is not set -CONFIG_TCP_CONG_ADVANCED=y -# CONFIG_TCP_CONG_BIC is not set +# CONFIG_TCP_CONG_ADVANCED is not set CONFIG_TCP_CONG_CUBIC=y -# CONFIG_TCP_CONG_WESTWOOD is not set -# CONFIG_TCP_CONG_HTCP is not set -# CONFIG_TCP_CONG_HSTCP is not set -# CONFIG_TCP_CONG_HYBLA is not set -# CONFIG_TCP_CONG_VEGAS is not set -# CONFIG_TCP_CONG_NV is not set -# CONFIG_TCP_CONG_SCALABLE is not set -# CONFIG_TCP_CONG_LP is not set -# CONFIG_TCP_CONG_VENO is not set -# CONFIG_TCP_CONG_YEAH is not set -# CONFIG_TCP_CONG_ILLINOIS is not set -# CONFIG_TCP_CONG_DCTCP is not set -# CONFIG_TCP_CONG_CDG is not set -# CONFIG_TCP_CONG_BBR is not set -CONFIG_DEFAULT_CUBIC=y -# CONFIG_DEFAULT_RENO is not set CONFIG_DEFAULT_TCP_CONG="cubic" -CONFIG_TCP_MD5SIG=y +# CONFIG_TCP_MD5SIG is not set CONFIG_IPV6=y # CONFIG_IPV6_ROUTER_PREF is not set # CONFIG_IPV6_OPTIMISTIC_DAD is not set @@ -889,7 +865,7 @@ CONFIG_IPV6=y # CONFIG_IPV6_SEG6_HMAC is not set # CONFIG_IPV6_RPL_LWTUNNEL is not set # CONFIG_IPV6_IOAM6_LWTUNNEL is not set -CONFIG_NETLABEL=y +# CONFIG_NETLABEL is not set # CONFIG_MPTCP is not set CONFIG_NETWORK_SECMARK=y CONFIG_NET_PTP_CLASSIFY=y @@ -966,12 +942,11 @@ CONFIG_NET_FLOW_LIMIT=y # CONFIG_PSAMPLE is not set # CONFIG_NET_IFE is not set # CONFIG_LWTUNNEL is not set -CONFIG_GRO_CELLS=y CONFIG_NET_SOCK_MSG=y CONFIG_PAGE_POOL=y # CONFIG_PAGE_POOL_STATS is not set CONFIG_FAILOVER=y -CONFIG_ETHTOOL_NETLINK=y +# CONFIG_ETHTOOL_NETLINK is not set # # Device Drivers @@ -1842,7 +1817,6 @@ CONFIG_PROC_MEM_ALWAYS_FORCE=y CONFIG_SECURITY=y CONFIG_SECURITYFS=y CONFIG_SECURITY_NETWORK=y -CONFIG_SECURITY_NETWORK_XFRM=y # CONFIG_SECURITY_PATH is not set CONFIG_LSM_MMAP_MIN_ADDR=65536 # CONFIG_HARDENED_USERCOPY is not set From 72a6cac43ca92fec2ddf02c82c98e4d9d8181347 Mon Sep 17 00:00:00 2001 From: Stefano Brivio Date: Sat, 18 Jan 2025 13:11:36 +0100 Subject: [PATCH 11/21] config-libkrunfw_x86_64: No firmware loading for us VirtIO devices don't need any firmware to work. This saves 7192 bytes (26456560 -> 26449368) in the uncompressed kernel image. Signed-off-by: Stefano Brivio --- config-libkrunfw_x86_64 | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/config-libkrunfw_x86_64 b/config-libkrunfw_x86_64 index b740604..f27040e 100644 --- a/config-libkrunfw_x86_64 +++ b/config-libkrunfw_x86_64 @@ -971,11 +971,7 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y # # Firmware loader # -CONFIG_FW_LOADER=y -CONFIG_EXTRA_FIRMWARE="" -# CONFIG_FW_LOADER_USER_HELPER is not set -# CONFIG_FW_LOADER_COMPRESS is not set -# CONFIG_FW_UPLOAD is not set +# CONFIG_FW_LOADER is not set # end of Firmware loader CONFIG_ALLOW_DEV_COREDUMP=y From 9c689c35f8ef00e830e5000d1563fae589ac6884 Mon Sep 17 00:00:00 2001 From: Stefano Brivio Date: Sat, 18 Jan 2025 13:13:46 +0100 Subject: [PATCH 12/21] config-libkrunfw_x86_64: Drop support for force-feedback joystick devices The host would be in charge of them anyway, we would only see abstracted input devices I guess. This saves 944 bytes (26449368 -> 26448424) in the uncompressed kernel image. Signed-off-by: Stefano Brivio --- config-libkrunfw_x86_64 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config-libkrunfw_x86_64 b/config-libkrunfw_x86_64 index f27040e..2465ef3 100644 --- a/config-libkrunfw_x86_64 +++ b/config-libkrunfw_x86_64 @@ -1170,7 +1170,7 @@ CONFIG_NET_FAILOVER=y # Input device support # CONFIG_INPUT=y -CONFIG_INPUT_FF_MEMLESS=y +# CONFIG_INPUT_FF_MEMLESS is not set # CONFIG_INPUT_SPARSEKMAP is not set # CONFIG_INPUT_MATRIXKMAP is not set From d2d9e62cbdb7855d53c04cfb32cdc371558ca072 Mon Sep 17 00:00:00 2001 From: Stefano Brivio Date: Sat, 18 Jan 2025 13:15:29 +0100 Subject: [PATCH 13/21] config-libkrunfw_x86_64: Drop support for hardware serial adapters virtio-serial does all that for us. This saves 36480 bytes (26448424 -> 26411944) in the uncompressed kernel image. Signed-off-by: Stefano Brivio --- config-libkrunfw_x86_64 | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/config-libkrunfw_x86_64 b/config-libkrunfw_x86_64 index 2465ef3..84042f1 100644 --- a/config-libkrunfw_x86_64 +++ b/config-libkrunfw_x86_64 @@ -1224,25 +1224,12 @@ CONFIG_LDISC_AUTOLOAD=y # # Serial drivers # -CONFIG_SERIAL_EARLYCON=y -CONFIG_SERIAL_8250=y -CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y -# CONFIG_SERIAL_8250_16550A_VARIANTS is not set -# CONFIG_SERIAL_8250_FINTEK is not set -CONFIG_SERIAL_8250_CONSOLE=y -CONFIG_SERIAL_8250_DMA=y -CONFIG_SERIAL_8250_NR_UARTS=4 -CONFIG_SERIAL_8250_RUNTIME_UARTS=4 -# CONFIG_SERIAL_8250_EXTENDED is not set -# CONFIG_SERIAL_8250_DW is not set -# CONFIG_SERIAL_8250_RT288X is not set +# CONFIG_SERIAL_8250 is not set # # Non-8250 serial port support # # CONFIG_SERIAL_UARTLITE is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y # CONFIG_SERIAL_LANTIQ is not set # CONFIG_SERIAL_SCCNXP is not set # CONFIG_SERIAL_ALTERA_JTAGUART is not set From 64addf25c7a794882e938dde7dd5f13961757c28 Mon Sep 17 00:00:00 2001 From: Stefano Brivio Date: Sat, 18 Jan 2025 13:17:32 +0100 Subject: [PATCH 14/21] config-libkrunfw_x86_64: Drop support for devices we're unlikely to ever see ...such as DMA engines, x86 platform devices (laptop stuff), Microsoft Surface platforms, clock subsystem. Disable staging drivers (we don't have any selected). This saves 32848 bytes (26411944 -> 26379096) in the uncompressed kernel image. Signed-off-by: Stefano Brivio --- config-libkrunfw_x86_64 | 45 +++++------------------------------------ 1 file changed, 5 insertions(+), 40 deletions(-) diff --git a/config-libkrunfw_x86_64 b/config-libkrunfw_x86_64 index 84042f1..d4733b6 100644 --- a/config-libkrunfw_x86_64 +++ b/config-libkrunfw_x86_64 @@ -1237,7 +1237,6 @@ CONFIG_LDISC_AUTOLOAD=y # CONFIG_SERIAL_ARC is not set # CONFIG_SERIAL_FSL_LPUART is not set # CONFIG_SERIAL_FSL_LINFLEXUART is not set -# CONFIG_SERIAL_SPRD is not set # end of Serial drivers # CONFIG_SERIAL_NONSTANDARD is not set @@ -1382,21 +1381,7 @@ CONFIG_EDAC_SUPPORT=y CONFIG_RTC_LIB=y CONFIG_RTC_MC146818_LIB=y # CONFIG_RTC_CLASS is not set -CONFIG_DMADEVICES=y -# CONFIG_DMADEVICES_DEBUG is not set - -# -# DMA Devices -# -# CONFIG_ALTERA_MSGDMA is not set -# CONFIG_INTEL_IDMA64 is not set -# CONFIG_XILINX_DMA is not set -# CONFIG_XILINX_XDMA is not set -# CONFIG_QCOM_HIDMA_MGMT is not set -# CONFIG_QCOM_HIDMA is not set -# CONFIG_DW_DMAC is not set -# CONFIG_SF_PDMA is not set -# CONFIG_INTEL_LDMA is not set +# CONFIG_DMADEVICES is not set # # DMABUF options @@ -1433,31 +1418,12 @@ CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y # CONFIG_GREYBUS is not set # CONFIG_COMEDI is not set -CONFIG_STAGING=y -# CONFIG_STAGING_MEDIA is not set -# CONFIG_FIELDBUS_DEV is not set +# CONFIG_STAGING is not set # CONFIG_CHROME_PLATFORMS is not set # CONFIG_MELLANOX_PLATFORM is not set -CONFIG_SURFACE_PLATFORMS=y -CONFIG_X86_PLATFORM_DEVICES=y -# CONFIG_X86_PLATFORM_DRIVERS_DELL is not set -# CONFIG_X86_PLATFORM_DRIVERS_HP is not set -# CONFIG_SENSORS_HDAPS is not set -# CONFIG_INTEL_IFS is not set - -# -# Intel Uncore Frequency Control -# -# CONFIG_INTEL_UNCORE_FREQ_CONTROL is not set -# end of Intel Uncore Frequency Control - -# CONFIG_INTEL_PUNIT_IPC is not set -# CONFIG_SIEMENS_SIMATIC_IPC is not set -# CONFIG_WINMATE_FM07_KEYS is not set -CONFIG_HAVE_CLK=y -CONFIG_HAVE_CLK_PREPARE=y -CONFIG_COMMON_CLK=y -# CONFIG_XILINX_VCU is not set +# CONFIG_SURFACE_PLATFORMS is not set +# CONFIG_X86_PLATFORM_DEVICES is not set +# CONFIG_COMMON_CLK is not set # CONFIG_HWSPINLOCK is not set # @@ -2083,7 +2049,6 @@ CONFIG_GENERIC_STRNLEN_USER=y CONFIG_GENERIC_NET_UTILS=y # CONFIG_CORDIC is not set # CONFIG_PRIME_NUMBERS is not set -CONFIG_RATIONAL=y CONFIG_GENERIC_PCI_IOMAP=y CONFIG_GENERIC_IOMAP=y CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y From 74b76841b8d3a050719352944049f7924f497b2f Mon Sep 17 00:00:00 2001 From: Stefano Brivio Date: Sat, 18 Jan 2025 13:29:40 +0100 Subject: [PATCH 15/21] config-libkrunfw_x86_64: No need for interrupt mitigation with VirtIO devices This saves 888 bytes (26379096 -> 26378208) in the uncompressed kernel image. Signed-off-by: Stefano Brivio --- config-libkrunfw_x86_64 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config-libkrunfw_x86_64 b/config-libkrunfw_x86_64 index d4733b6..2237e4e 100644 --- a/config-libkrunfw_x86_64 +++ b/config-libkrunfw_x86_64 @@ -2123,7 +2123,7 @@ CONFIG_CPU_RMAP=y CONFIG_DQL=y CONFIG_NLATTR=y CONFIG_CLZ_TAB=y -CONFIG_IRQ_POLL=y +# CONFIG_IRQ_POLL is not set CONFIG_MPILIB=y CONFIG_HAVE_GENERIC_VDSO=y CONFIG_GENERIC_GETTIMEOFDAY=y From 5f6d8a40ac5903639bdc5875519d9084fd5541ae Mon Sep 17 00:00:00 2001 From: Stefano Brivio Date: Sat, 18 Jan 2025 13:32:45 +0100 Subject: [PATCH 16/21] config-libkrunfw_x86_64: Drop support for isolcpus command line option It doesn't make a lot of sense for virtual CPUs, I suppose. This saves 1104 bytes (26378208 - 26377104) in the uncompressed kernel image. Signed-off-by: Stefano Brivio --- config-libkrunfw_x86_64 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config-libkrunfw_x86_64 b/config-libkrunfw_x86_64 index 2237e4e..d830335 100644 --- a/config-libkrunfw_x86_64 +++ b/config-libkrunfw_x86_64 @@ -139,7 +139,7 @@ CONFIG_TASK_IO_ACCOUNTING=y # CONFIG_PSI is not set # end of CPU/Task time and stats accounting -CONFIG_CPU_ISOLATION=y +# CONFIG_CPU_ISOLATION is not set # # RCU Subsystem From 90fe00d2377ddf7ff66d135773bff5ec87c8b553 Mon Sep 17 00:00:00 2001 From: Stefano Brivio Date: Sat, 18 Jan 2025 13:34:50 +0100 Subject: [PATCH 17/21] config-libkrunfw_x86_64: Drop support for relayfs We don't support WiFi adapters and debugfs either. This saves 2216 bytes (26377104 -> 26374888) in the uncompressed kernel image. Signed-off-by: Stefano Brivio --- config-libkrunfw_x86_64 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config-libkrunfw_x86_64 b/config-libkrunfw_x86_64 index d830335..1cd3a53 100644 --- a/config-libkrunfw_x86_64 +++ b/config-libkrunfw_x86_64 @@ -207,7 +207,7 @@ CONFIG_PID_NS=y CONFIG_NET_NS=y # CONFIG_CHECKPOINT_RESTORE is not set CONFIG_SCHED_AUTOGROUP=y -CONFIG_RELAY=y +# CONFIG_RELAY is not set # CONFIG_BLK_DEV_INITRD is not set # CONFIG_BOOT_CONFIG is not set CONFIG_INITRAMFS_PRESERVE_MTIME=y From 107d328a76fa32b4613fab29d3563be54244a754 Mon Sep 17 00:00:00 2001 From: Stefano Brivio Date: Sat, 18 Jan 2025 13:39:22 +0100 Subject: [PATCH 18/21] config-libkrunfw_x86_64: Drop support for ISA-style DMA This saves 760 bytes (26374888 -> 26374128) in the uncompressed kernel image. Signed-off-by: Stefano Brivio --- config-libkrunfw_x86_64 | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/config-libkrunfw_x86_64 b/config-libkrunfw_x86_64 index 1cd3a53..5c8d99c 100644 --- a/config-libkrunfw_x86_64 +++ b/config-libkrunfw_x86_64 @@ -285,10 +285,8 @@ CONFIG_ARCH_MMAP_RND_BITS_MIN=28 CONFIG_ARCH_MMAP_RND_BITS_MAX=32 CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=8 CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=16 -CONFIG_GENERIC_ISA_DMA=y CONFIG_GENERIC_BUG=y CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y -CONFIG_ARCH_MAY_HAVE_PC_FDC=y CONFIG_GENERIC_CALIBRATE_DELAY=y CONFIG_ARCH_HAS_CPU_RELAX=y CONFIG_ARCH_HIBERNATION_POSSIBLE=y @@ -476,7 +474,7 @@ CONFIG_HALTPOLL_CPUIDLE=y # Bus options (PCI etc.) # # CONFIG_ISA_BUS is not set -CONFIG_ISA_DMA_API=y +# CONFIG_ISA_DMA_API is not set # end of Bus options (PCI etc.) # @@ -1028,7 +1026,6 @@ CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y # CONFIG_PARPORT is not set CONFIG_BLK_DEV=y # CONFIG_BLK_DEV_NULL_BLK is not set -# CONFIG_BLK_DEV_FD is not set # CONFIG_ZRAM is not set CONFIG_BLK_DEV_LOOP=y CONFIG_BLK_DEV_LOOP_MIN_COUNT=8 From cf3cec588b398ead83d8b0b8bfe886406bc134ae Mon Sep 17 00:00:00 2001 From: Stefano Brivio Date: Sat, 18 Jan 2025 13:41:40 +0100 Subject: [PATCH 19/21] config-libkrunfw_x86_64: Enable BASE_SMALL In typical libkrunfw usage, a small, nimble kernel is probably more important than oversized lookup tables and suchlike. This saves 80 bytes (26374128 -> 26374048) in the uncompressed kernel image, which is not significant. However, memory savings might be substantial depending on the usage. Signed-off-by: Stefano Brivio --- config-libkrunfw_x86_64 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/config-libkrunfw_x86_64 b/config-libkrunfw_x86_64 index 5c8d99c..2d840b5 100644 --- a/config-libkrunfw_x86_64 +++ b/config-libkrunfw_x86_64 @@ -228,7 +228,6 @@ CONFIG_PRINTK=y CONFIG_BUG=y CONFIG_ELF_CORE=y # CONFIG_PCSPKR_PLATFORM is not set -CONFIG_BASE_FULL=y CONFIG_FUTEX=y CONFIG_FUTEX_PI=y CONFIG_EPOLL=y @@ -633,7 +632,7 @@ CONFIG_FUNCTION_ALIGNMENT=16 # end of General architecture-dependent options CONFIG_RT_MUTEXES=y -CONFIG_BASE_SMALL=0 +CONFIG_BASE_SMALL=y # CONFIG_MODULES is not set CONFIG_BLOCK=y # CONFIG_BLOCK_LEGACY_AUTOLOAD is not set From dcb6ceec4cdcead1d3e7bb2a6b153b87b943653e Mon Sep 17 00:00:00 2001 From: Stefano Brivio Date: Sun, 19 Jan 2025 12:21:11 +0100 Subject: [PATCH 20/21] config-libkrunfw_x86_64: Disable process autogrouping feature Our users don't configure it anyway. This saves 1632 bytes (26374048 -> 26372416) in the uncompressed kernel image. Signed-off-by: Stefano Brivio --- config-libkrunfw_x86_64 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config-libkrunfw_x86_64 b/config-libkrunfw_x86_64 index 2d840b5..0dd8a96 100644 --- a/config-libkrunfw_x86_64 +++ b/config-libkrunfw_x86_64 @@ -206,7 +206,7 @@ CONFIG_USER_NS=y CONFIG_PID_NS=y CONFIG_NET_NS=y # CONFIG_CHECKPOINT_RESTORE is not set -CONFIG_SCHED_AUTOGROUP=y +# CONFIG_SCHED_AUTOGROUP is not set # CONFIG_RELAY is not set # CONFIG_BLK_DEV_INITRD is not set # CONFIG_BOOT_CONFIG is not set From afb9723533c53b6777ef40f89e674843825f57a2 Mon Sep 17 00:00:00 2001 From: Stefano Brivio Date: Sat, 1 Feb 2025 14:36:57 +0100 Subject: [PATCH 21/21] utils: Add kernel_size_time.sh to measure size and boot time This is what I've been using to measure size and execution times for a test command (based on muvm) for the previous patches. It's made to be used in a rebase script, for example: x ./utils/kernel_size_time.sh pick 12181bf config-libkrunfw_x86_64: Disable processor quirks and features we don't need x ./utils/kernel_size_time.sh pick 5c5badc config-libkrunfw_x86_64: Drop power management features and cpufreq x ./utils/kernel_size_time.sh it's a bit bigger than what I wanted because of the time -p trick: nowadays most distributions don't ship /usr/bin/time (at least by default), but many shells skip support for the POSIX compatibility mode (-p, which simplifies calculations) in their 'time' built-in, so, if we need it, we need to re-execute under Bash (assuming it's not the default non-interactive shell). Signed-off-by: Stefano Brivio --- utils/kernel_size_time.sh | 96 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100755 utils/kernel_size_time.sh diff --git a/utils/kernel_size_time.sh b/utils/kernel_size_time.sh new file mode 100755 index 0000000..92a73f1 --- /dev/null +++ b/utils/kernel_size_time.sh @@ -0,0 +1,96 @@ +#!/bin/sh -e +# +# SPDX-License-Identifier: LGPL-2.1-only +# +# utils/kernel_size_time.sh - Check build size, and boot time for given command +# +# Copyright (c) 2025 Red Hat GmbH +# Author: Stefano Brivio + +CONFIG="${CONFIG:-config-libkrunfw_x86_64}" +RUNS=${RUNS:-10} +TIME_CMD="${TIME_CMD:-~/muvm/target/release/muvm --mem=64 --vram=0 -c 0,1 -- true}" +PREV_SIZE_FILE="prev_size" +PREV_TIME_FILE="prev_time" +LOG_FILE="log" + +find_time_dash_p() { + REEXEC_BASH=n + if time -p ':'; then + TIME_DASH_P='time -p' + elif command -v /usr/bin/time; then + TIME_DASH_P='/usr/bin/time -p' + elif command -v bash; then + # Simply re-execute under bash to avoid further eval tricks + REEXEC_BASH=y + fi +} + +build() { + for KERNELDIR in linux-*/; do + cp "${CONFIG}" "${KERNELDIR}/.config" + done + + rm -f linux-*/vmlinux + make clean + make -j$(nproc) || make -j$(($(nproc) / 2)) || make +} + +measure_runs() { + export LD_PRELOAD=$(ls $(pwd)/libkrunfw.so.*) + for i in $(seq 1 ${RUNS}); do eval ${TIME_CMD}; done +} + +measure() { + NEW_SIZE=$(stat -c %s linux-*/vmlinux) + NEW_TIME="$( eval ${TIME_DASH_P} measure_runs 2>&1 | grep real | tr -dc [:digit:] )5" +} + +log() { + BASE_SIZE="$(cat ${PREV_SIZE_FILE} 2>/dev/null || :)" + BASE_TIME="$(cat ${PREV_TIME_FILE} 2>/dev/null || :)" + + [ -e "${PREV_SIZE_FILE}" ] || FIRST="y" + + echo "$NEW_SIZE" > "${PREV_SIZE_FILE}" + echo "$NEW_TIME" > "${PREV_TIME_FILE}" + + git rev-parse HEAD >> ${LOG_FILE} + + if [ "${FIRST}" = "y" ]; then + NEW_TIME="$(echo 'scale=0; '$NEW_TIME' / '${RUNS} | bc -l)" + printf "Baseline: +- %i bytes in the uncompressed kernel image + +- %i ms (average of ${RUNS} runs) for: + ${TIME_CMD} + +" $NEW_SIZE $NEW_TIME >> ${LOG_FILE} + exit 0 + fi + + DIFF_SIZE="$((BASE_SIZE - NEW_SIZE))" + DIFF_TIME="$((BASE_TIME - NEW_TIME))" + + DIFF_TIME="$(echo 'scale=0; '$DIFF_TIME' / '${RUNS} | bc -l)" + BASE_TIME="$(echo 'scale=0; '$BASE_TIME' / '${RUNS} | bc -l)" + NEW_TIME="$(echo 'scale=0; '$NEW_TIME' / '${RUNS} | bc -l)" + + printf "This saves: +- %i bytes (%i -> %i) in the uncompressed kernel image + +- %i ms (%i -> %i, average of ${RUNS} runs) for: + ${TIME_CMD} + +" $DIFF_SIZE $BASE_SIZE $NEW_SIZE $DIFF_TIME $BASE_TIME $NEW_TIME >> ${LOG_FILE} +} + +build +find_time_dash_p >/dev/null 2>&1 || { echo "No implementation of 'time -p', exiting"; exit 1; } + +if [ ${REEXEC_BASH} = "y" ]; then + bash $0 +else + measure + log +fi