patches and low-level development discussion
 help / color / mirror / code / Atom feed
From: "Philipp Steinpaß" <philipp@xndr.de>
To: devel@spectrum-os.org
Subject: [DRAFT PATCH nixpkgs] smaller kernel
Date: Wed, 26 Aug 2020 23:05:17 +0200	[thread overview]
Message-ID: <87tuwpjeya.fsf@xndr.de> (raw)

minimize spectrum-vm kernel

---
 pkgs/os-specific/linux/spectrum/linux/vm.nix | 449 +++++++++++++++++++
 1 file changed, 449 insertions(+)

diff --git a/pkgs/os-specific/linux/spectrum/linux/vm.nix b/pkgs/os-specific/linux/spectrum/linux/vm.nix
index 9c9ba78b691..c313697eeb2 100644
--- a/pkgs/os-specific/linux/spectrum/linux/vm.nix
+++ b/pkgs/os-specific/linux/spectrum/linux/vm.nix
@@ -4,6 +4,7 @@ with lib.kernel;
 
 linux.override {
   structuredExtraConfig = {
+    VIRTIO_CONSOLE = yes;
     VIRTIO_PCI = yes;
     VIRTIO_BLK = yes;
     VIRTIO_WL = yes;
@@ -21,5 +22,453 @@ linux.override {
     NET_9P = yes;
     NET_9P_VIRTIO = yes;
     "9P_FS" = yes;
+
+    ACPI = no;
+    AD525X_DPOT = no;
+    ADIN_PHY = no;
+    AF_KCM = no;
+    ALTERA_STAPL = no;
+    ALTERA_TSE = no;
+    AMD_PHY = no;
+    APDS9802ALS = no;
+    AQUANTIA_PHY = no;
+    AT803X_PHY = no;
+    ATA = no;
+    ATA_OVER_ETH = no;
+    ATM_DRIVERS = no;
+    AX88796B_PHY = no;
+    B53 = no;
+    BCM87XX_PHY = no;
+    BCMA = no;
+    BCM_KONA_USB2_PHY = no;
+    BLK_DEV_DRBD = no;
+    BLK_DEV_FD = no;
+    BLK_DEV_LOOP = no;
+    BLK_DEV_NULL_BLK = no;
+    BLK_DEV_RBD = no;
+    BROADCOM_PHY = no;
+    BT = no;
+    C2PORT = no;
+    CAIF = no;
+    CAN = no;
+    CDROM_PKTCDVD = no;
+    CHROME_PLATFORMS = no;
+    CICADA_PHY = no;
+    CMA = no;
+    COMEDI = no;
+    CORTINA_PHY = no;
+    COUNTER = no;
+    DAVICOM_PHY = no;
+    DEV_DAX = no;
+    DMADEVICES = no;
+    DNET = no;
+    DP83822_PHY = no;
+    DP83848_PHY = no;
+    DP83867_PHY = no;
+    DP83TC811_PHY = no;
+    DRM_ETNAVIV = no;
+    DRM_PANEL_ORIENTATION_QUIRKS  = module;
+    DS1682 = no;
+    DUMMY_IRQ = no;
+    ECHO = no;
+    ENCLOSURE_SERVICES = no;
+    ETHOC = no;
+    EXT2_FS = no;
+    EXT4_USE_FOR_EXT2 = yes;
+    EXTCON = no;
+    FIELDBUS_DEV = no;
+    FPGA = no;
+    FW_LOADER_USER_HELPER = no;
+    GENERIC_PHY = no;
+    GNSS = no;
+    GREYBUS = no;
+    GS_FPGABOOT = no;
+    HAMRADIO = no;
+    HMC6352 = no;
+    HSI = no;
+    HVC_XEN = no;
+    HW_RANDOM_TIMERIOMEM = no;
+    HW_RANDOM_VIA = no;
+    I2C_ALGOPCF = no;
+    I2C_CHARDEV = no;
+    I2C_COMPAT = no;
+    I2C_HELPER_AUTO = no;
+    I2C_SLAVE_EEPROM = no;
+    I2C_STUB = no;
+    I3C = no;
+    I8K = no;
+    ICPLUS_PHY = no;
+    ICS932S401 = no;
+    IEEE802154_DRIVERS = no;
+    IIO = no;
+    INFINIBAND = no;
+    INPUT_JOYSTICK = no;
+    INPUT_KEYBOARD = no;
+    INPUT_MISC = no;
+    INPUT_MOUSE = no;
+    INPUT_TABLET = no;
+    INPUT_TOUCHSCREEN = no;
+    INTEL_TH = no;
+    INTEL_XWAY_PHY = no;
+    INTERCONNECT = no;
+    IOMMU_IOVA  = module;
+    IOSF_MBI  = module;
+    IPACK_BUS = no;
+    IPMB_DEVICE_INTERFACE = no;
+    IPMI_HANDLER = no;
+    ISL29003 = no;
+    ISL29020 = no;
+    LEDS_APU = no;
+    LEDS_BD2802 = no;
+    LEDS_BLINKM = no;
+    LEDS_CLASS_FLASH = no;
+    LEDS_CLEVO_MAIL = no;
+    LEDS_GPIO = no;
+    LEDS_LM3530 = no;
+    LEDS_LM3532 = no;
+    LEDS_LM3533 = no;
+    LEDS_LM355x = no;
+    LEDS_LM3642 = no;
+    LEDS_LP3944 = no;
+    LEDS_LP3952 = no;
+    LEDS_LP5521 = no;
+    LEDS_LP5523 = no;
+    LEDS_LP5562 = no;
+    LEDS_LP8501 = no;
+    LEDS_MC13783 = no;
+    LEDS_MENF21BMC = no;
+    LEDS_MLXCPLD = no;
+    LEDS_MLXREG = no;
+    LEDS_MT6323 = no;
+    LEDS_PCA9532 = no;
+    LEDS_PCA955X = no;
+    LEDS_PCA963X = no;
+    LEDS_REGULATOR = no;
+    LEDS_TCA6507 = no;
+    LEDS_TI_LMU_COMMON = no;
+    LEDS_TLC591XX = no;
+    LEDS_TRIGGER_ACTIVITY = no;
+    LEDS_TRIGGER_BACKLIGHT = no;
+    LEDS_TRIGGER_CAMERA = no;
+    LEDS_TRIGGER_DEFAULT_ON = no;
+    LEDS_TRIGGER_GPIO = no;
+    LEDS_TRIGGER_HEARTBEAT = no;
+    LEDS_TRIGGER_NETDEV = no;
+    LEDS_TRIGGER_ONESHOT = no;
+    LEDS_TRIGGER_PATTERN = no;
+    LEDS_TRIGGER_TIMER = no;
+    LEDS_TRIGGER_TRANSIENT = no;
+    LEDS_USER = no;
+    LSI_ET1011C_PHY = no;
+    LXT_PHY = no;
+    MACINTOSH_DRIVERS = no;
+    MAILBOX = no;
+    MARVELL_10G_PHY = no;
+    MARVELL_PHY = no;
+    MCB = no;
+    MDIO_BITBANG = no;
+    MDIO_MSCC_MIIM = no;
+    MEDIA_SUPPORT = no;
+    MEMSTICK = no;
+    MFD_CROS_EC = no;
+    MICREL_PHY = no;
+    MICROCHIP_PHY = no;
+    MICROCHIP_T1_PHY = no;
+    MICROSEMI_PHY = no;
+    MMC = no;
+    MOST = no;
+    MTD = no;
+    MWAVE = no;
+    NATIONAL_PHY = no;
+    NET_DSA_BCM_SF2 = no;
+    NET_DSA_LANTIQ_GSWIP = no;
+    NET_DSA_LOOP = no;
+    NET_DSA_MICROCHIP_KSZ8795 = no;
+    NET_DSA_MICROCHIP_KSZ9477 = no;
+    NET_DSA_MT7530 = no;
+    NET_DSA_MV88E6060 = no;
+    NET_DSA_MV88E6XXX = no;
+    NET_DSA_QCA8K = no;
+    NET_DSA_REALTEK_SMI = no;
+    NET_DSA_SMSC_LAN9303_I2C = no;
+    NET_DSA_SMSC_LAN9303_MDIO = no;
+    NET_VENDOR_ALACRITECH = no;
+    NET_VENDOR_AMAZON = no;
+    NET_VENDOR_AQUANTIA = no;
+    NET_VENDOR_ARC = no;
+    NET_VENDOR_AURORA = no;
+    NET_VENDOR_CADENCE = no;
+    NET_VENDOR_CAVIUM = no;
+    NET_VENDOR_CORTINA = no;
+    NET_VENDOR_EZCHIP = no;
+    NET_VENDOR_GOOGLE = no;
+    NET_VENDOR_HUAWEI = no;
+    NET_VENDOR_INTEL = no;
+    NET_VENDOR_MARVELL = no;
+    NET_VENDOR_MELLANOX = no;
+    NET_VENDOR_MICREL = no;
+    NET_VENDOR_MICROCHIP = no;
+    NET_VENDOR_MICROSEMI = no;
+    NET_VENDOR_NATSEMI = no;
+    NET_VENDOR_NETRONOME = no;
+    NET_VENDOR_NI = no;
+    NET_VENDOR_PENSANDO = no;
+    NET_VENDOR_QUALCOMM = no;
+    NET_VENDOR_RENESAS = no;
+    NET_VENDOR_ROCKER = no;
+    NET_VENDOR_SAMSUNG = no;
+    NET_VENDOR_SEEQ = no;
+    NET_VENDOR_SOCIONEXT = no;
+    NET_VENDOR_SOLARFLARE = no;
+    NET_VENDOR_STMICRO = no;
+    NET_VENDOR_SYNOPSYS = no;
+    NET_VENDOR_VIA = no;
+    NET_VENDOR_WIZNET = no;
+    NET_VENDOR_XILINX = no;
+    NFC = no;
+    NULL_TTY = no;
+    NVME_FC = no;
+    NVME_TARGET = no;
+    N_GSM = no;
+    PARPORT = no;
+    PCCARD = no;
+    PHY_PXA_28NM_HSIC = no;
+    PHY_PXA_28NM_USB2 = no;
+    PMBUS = no;
+    PM_DEBUG = no;
+    QSEMI_PHY = no;
+    RAVE_SP_EEPROM = no;
+    RC_CORE = no;
+    RD_BZIP2 = no;
+    RD_LZ4 = no;
+    RD_LZMA = no;
+    RD_LZO = no;
+    RD_XZ = no;
+    RENESAS_PHY = no;
+    RESET_CONTROLLER = no;
+    RFKILL = no;
+    RMI4_I2C = no;
+    RMI4_SMB = no;
+    ROCKCHIP_PHY = no;
+    RTC_DRV_88PM80X = no;
+    RTC_DRV_ABB5ZES3 = no;
+    RTC_DRV_ABEOZ9 = no;
+    RTC_DRV_ABX80X = no;
+    RTC_DRV_BQ32K = no;
+    RTC_DRV_BQ4802 = no;
+    RTC_DRV_CMOS = no;
+    RTC_DRV_DA9063 = no;
+    RTC_DRV_DS1286 = no;
+    RTC_DRV_DS1307 = no;
+    RTC_DRV_DS1374 = no;
+    RTC_DRV_DS1511 = no;
+    RTC_DRV_DS1553 = no;
+    RTC_DRV_DS1672 = no;
+    RTC_DRV_DS1685_FAMILY = no;
+    RTC_DRV_DS1742 = no;
+    RTC_DRV_DS2404 = no;
+    RTC_DRV_DS3232 = no;
+    RTC_DRV_EM3027 = no;
+    RTC_DRV_FM3130 = no;
+    RTC_DRV_FTRTC010 = no;
+    RTC_DRV_ISL12022 = no;
+    RTC_DRV_ISL1208 = no;
+    RTC_DRV_M41T80 = no;
+    RTC_DRV_M48T35 = no;
+    RTC_DRV_M48T59 = no;
+    RTC_DRV_M48T86 = no;
+    RTC_DRV_MAX6900 = no;
+    RTC_DRV_MAX8907 = no;
+    RTC_DRV_MC13XXX = no;
+    RTC_DRV_MSM6242 = no;
+    RTC_DRV_MT6397 = no;
+    RTC_DRV_PCF2127 = no;
+    RTC_DRV_PCF50633 = no;
+    RTC_DRV_PCF85063 = no;
+    RTC_DRV_PCF8523 = no;
+    RTC_DRV_PCF85363 = no;
+    RTC_DRV_PCF8563 = no;
+    RTC_DRV_PCF8583 = no;
+    RTC_DRV_RP5C01 = no;
+    RTC_DRV_RS5C372 = no;
+    RTC_DRV_RV3028 = no;
+    RTC_DRV_RV3029C2 = no;
+    RTC_DRV_RV8803 = no;
+    RTC_DRV_RX8010 = no;
+    RTC_DRV_RX8025 = no;
+    RTC_DRV_RX8581 = no;
+    RTC_DRV_S35390A = no;
+    RTC_DRV_SD3078 = no;
+    RTC_DRV_STK17TA8 = no;
+    RTC_DRV_V3020 = no;
+    RTC_DRV_X1205 = no;
+    SENSORS_ABITUGURU = no;
+    SENSORS_ABITUGURU3 = no;
+    SENSORS_AD7414 = no;
+    SENSORS_AD7418 = no;
+    SENSORS_ADC128D818 = no;
+    SENSORS_ADM1021 = no;
+    SENSORS_ADM1025 = no;
+    SENSORS_ADM1026 = no;
+    SENSORS_ADM1029 = no;
+    SENSORS_ADM1031 = no;
+    SENSORS_ADM9240 = no;
+    SENSORS_ADS7828 = no;
+    SENSORS_ADT7410 = no;
+    SENSORS_ADT7411 = no;
+    SENSORS_ADT7462 = no;
+    SENSORS_ADT7470 = no;
+    SENSORS_ADT7475 = no;
+    SENSORS_AMC6821 = no;
+    SENSORS_APDS990X = no;
+    SENSORS_APPLESMC = no;
+    SENSORS_AS370 = no;
+    SENSORS_ASB100 = no;
+    SENSORS_ASC7621 = no;
+    SENSORS_ASPEED = no;
+    SENSORS_ATXP1 = no;
+    SENSORS_BH1770 = no;
+    SENSORS_CORETEMP = no;
+    SENSORS_DME1737 = no;
+    SENSORS_DS1621 = no;
+    SENSORS_DS620 = no;
+    SENSORS_EMC1403 = no;
+    SENSORS_EMC2103 = no;
+    SENSORS_EMC6W201 = no;
+    SENSORS_F71805F = no;
+    SENSORS_F71882FG = no;
+    SENSORS_F75375S = no;
+    SENSORS_FSCHMD = no;
+    SENSORS_G760A = no;
+    SENSORS_G762 = no;
+    SENSORS_GL518SM = no;
+    SENSORS_GL520SM = no;
+    SENSORS_HIH6130 = no;
+    SENSORS_INA209 = no;
+    SENSORS_INA2XX = no;
+    SENSORS_INA3221 = no;
+    SENSORS_IT87 = no;
+    SENSORS_JC42 = no;
+    SENSORS_LINEAGE = no;
+    SENSORS_LIS3_I2C = no;
+    SENSORS_LIS3_SPI = module;
+    SENSORS_LM63 = no;
+    SENSORS_LM73 = no;
+    SENSORS_LM75 = no;
+    SENSORS_LM77 = no;
+    SENSORS_LM78 = no;
+    SENSORS_LM80 = no;
+    SENSORS_LM83 = no;
+    SENSORS_LM85 = no;
+    SENSORS_LM87 = no;
+    SENSORS_LM90 = no;
+    SENSORS_LM92 = no;
+    SENSORS_LM93 = no;
+    SENSORS_LM95234 = no;
+    SENSORS_LM95241 = no;
+    SENSORS_LM95245 = no;
+    SENSORS_LTC2945 = no;
+    SENSORS_LTC2990 = no;
+    SENSORS_LTC4151 = no;
+    SENSORS_LTC4215 = no;
+    SENSORS_LTC4222 = no;
+    SENSORS_LTC4245 = no;
+    SENSORS_LTC4260 = no;
+    SENSORS_LTC4261 = no;
+    SENSORS_MAX16065 = no;
+    SENSORS_MAX1619 = no;
+    SENSORS_MAX1668 = no;
+    SENSORS_MAX197 = no;
+    SENSORS_MAX31790 = no;
+    SENSORS_MAX6621 = no;
+    SENSORS_MAX6639 = no;
+    SENSORS_MAX6642 = no;
+    SENSORS_MAX6650 = no;
+    SENSORS_MAX6697 = no;
+    SENSORS_MC13783_ADC = no;
+    SENSORS_MCP3021 = no;
+    SENSORS_MENF21BMC_HWMON = no;
+    SENSORS_NCT6683 = no;
+    SENSORS_NCT6775 = no;
+    SENSORS_NCT7802 = no;
+    SENSORS_NCT7904 = no;
+    SENSORS_NPCM7XX = no;
+    SENSORS_NTC_THERMISTOR = no;
+    SENSORS_PC87360 = no;
+    SENSORS_PC87427 = no;
+    SENSORS_PCF8591 = no;
+    SENSORS_POWR1220 = no;
+    SENSORS_SHT15 = no;
+    SENSORS_SHT21 = no;
+    SENSORS_SHT3x = no;
+    SENSORS_SHTC1 = no;
+    SENSORS_SMM665 = no;
+    SENSORS_SMSC47B397 = no;
+    SENSORS_SMSC47M1 = no;
+    SENSORS_SMSC47M192 = no;
+    SENSORS_STTS751 = no;
+    SENSORS_TC654 = no;
+    SENSORS_TC74 = no;
+    SENSORS_THMC50 = no;
+    SENSORS_TMP102 = no;
+    SENSORS_TMP103 = no;
+    SENSORS_TMP108 = no;
+    SENSORS_TMP401 = no;
+    SENSORS_TMP421 = no;
+    SENSORS_TSL2550 = no;
+    SENSORS_VIA_CPUTEMP = no;
+    SENSORS_VT1211 = no;
+    SENSORS_W83627EHF = no;
+    SENSORS_W83627HF = no;
+    SENSORS_W83773G = no;
+    SENSORS_W83781D = no;
+    SENSORS_W83791D = no;
+    SENSORS_W83792D = no;
+    SENSORS_W83793 = no;
+    SENSORS_W83795 = no;
+    SENSORS_W83L785TS = no;
+    SENSORS_W83L786NG = no;
+    SERIAL_NONSTANDARD = no;
+    SFP = no;
+    SIOX = no;
+    SLIMBUS = no;
+    SLIP = no;
+    SND_HDA_INTEL_DETECT_DMIC = no;
+    SND_SOC = no;
+    SND_X86 = no;
+    SND_XEN_FRONTEND = no;
+    SPI_MEM = no;
+    SPMI = no;
+    STE10XP = no;
+    STM = no;
+    TARGET_CORE = no;
+    TCG_ATMEL = no;
+    TCG_NSC = no;
+    TCG_TIS_ST33ZP24_I2C = no;
+    TCG_VTPM_PROXY = no;
+    TCG_XEN = no;
+    TELCLOCK = no;
+    TERANETICS_PHY = no;
+    THERMAL = no;
+    THUNDERBOLT = no;
+    TRACE_SINK = no;
+    UIO_PRUSS = no;
+    USB_SUPPORT = no;
+    UWB = no;
+    VIRTUALIZATION = no;
+    VITESSE_PHY = no;
+    WATCHDOG = no;
+    WIMAX = no;
+    WIRELESS = no;
+    WLAN = no;
+    X86_EXTENDED_PLATFORM = no;
+    X86_INTEL_MEMORY_PROTECTION_KEYS = no;
+    X86_PLATFORM_DEVICES = no;
+    XEN_BACKEND = no;
+    XEN_BLKDEV_FRONTEND = no;
+    XEN_NETDEV_FRONTEND = no;
+    XEN_XENBUS_FRONTEND  = module;
+    XILINX_GMII2RGMII = no;
+    XILINX_SDFEC = no;
   };
 }
--

So here is a first draft for a more minimal kernel. It brings down the
kernel build time from around 40 minutes to around 10 minutes on my
machine (while watching videos on the side, so ymmv).

What I did was taking the kernel .config from a running spectrum vm and
worked with menuconfig and diffconfig from the kernel source tree.

I tried to remove as much support for physical devices as possible, on
top of that I removed support for virtual hosting and virtual guest for
everything that isn't kvm/virtio.

I tested the kernel by booting it up succesfully and confirming that
video acceleration still works.

I'm not satisfied with the missing documentation right now, but I'm not
sure how to practically improve on that, the sheer number of needed
changes seems to make that pretty hard, so I'd be happy for any suggestions.

Cheers,

Philipp

                 reply	other threads:[~2020-08-26 21:05 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87tuwpjeya.fsf@xndr.de \
    --to=philipp@xndr.de \
    --cc=devel@spectrum-os.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://spectrum-os.org/git/crosvm
	https://spectrum-os.org/git/doc
	https://spectrum-os.org/git/mktuntap
	https://spectrum-os.org/git/nixpkgs
	https://spectrum-os.org/git/spectrum
	https://spectrum-os.org/git/ucspi-vsock
	https://spectrum-os.org/git/www

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).