系统裁剪与启动优化

一、启动时间优化

1. 测量

# 内核启动
systemd-analyze time

# 各服务
systemd-analyze blame
systemd-analyze plot > boot.svg

# 内核详细
systemd-analyze critical-chain

# 内核
dmesg -d | head -100

2. 内核优化

# 关功能
CONFIG_LOG_BUF_SHIFT=12            # 小日志
CONFIG_PRINTK=n                    # 减少 printk
CONFIG_DETECT_HUNG_TASK=n
CONFIG_DETECT_SOFTLOCKUP=n
CONFIG_FTRACE=n                    # 不需要调试
CONFIG_PROFILING=n

# 编译选项
CONFIG_CC_OPTIMIZE_FOR_SIZE=y      # 优化大小
CONFIG_KERNEL_XZ=y                 # XZ 压缩
CONFIG_INITRD_NONE=y               # 不需要 initramfs

3. initramfs → 切换到 rootfs

4. systemd 优化

# 关闭不需要的服务
systemctl disable bluetooth
systemctl disable NetworkManager-wait-online.service
systemctl mask systemd-journald.service

# 调整日志
systemctl edit systemd-journald
[Journal]
Storage=volatile
RuntimeMaxUse=16M

# 并行启动(默认)
# /etc/systemd/system.conf
[Manager]
DefaultDependencies=no
DefaultTimeoutStartSec=10s

5. 预加载(readahead)

systemd-readahead collect
systemd-readahead analyze

6. BusyBox init 优化

# 删掉不用的 applets
make menuconfig
# 取消勾选不需要的

7. 启动流程

上电 0ms
├── BootROM (50-200ms)
├── SPL/U-Boot (200-500ms)
├── 内核自解压 (100-300ms)
├── 内核初始化 (500-1000ms)
├── rootfs 挂载 (100-500ms)
├── init / systemd (500-3000ms)
└── 应用启动

优化目标:让产品从"上电"到"主界面" < 5 秒。

二、内存优化

1. 内核裁剪

CONFIG_IKCONFIG=y                  # 把配置编译进内核
CONFIG_EMBEDDED=y                  # 嵌入式精简

# 关掉
CONFIG_INPUT_EVDEV=n
CONFIG_INPUT_MOUSE=n
CONFIG_INPUT_KEYBOARD=n
CONFIG_USB=n                       # 不需要 USB
CONFIG_SOUND=n
CONFIG_HID=n
CONFIG_FB=n                        # 不需要 framebuffer

2. 应用裁剪

3. rootfs 优化

4. 内存监控

cat /proc/meminfo
free -h
slabtop
cat /proc/buddyinfo
cat /proc/pagetypeinfo

三、磁盘优化

1. 闪存优化

# 移动应用预读
fio --rw=randread --bs=4k --numjobs=4 --runtime=60 --name=readtest

2. 镜像大小优化

四、CPU 优化

1. 编译器优化

CFLAGS=-O3 -march=armv7-a -mtune=cortex-a9 -mfpu=neon
LDFLAGS=-Wl,--gc-sections

2. LTO(链接时优化)

CFLAGS=-flto
LDFLAGS=-flto

3. PGO(profile-guided optimization)

# 1. 编译带 profile
CFLAGS="-fprofile-generate"
# 2. 跑典型负载
./myapp
# 3. 用 profile 重编
CFLAGS="-fprofile-use"

五、网络优化

1. TCP buffer

sysctl net.ipv4.tcp_rmem
sysctl net.ipv4.tcp_wmem

2. Socket 选项

3. 零拷贝

六、图形优化

1. Framebuffer 渲染

2. GPU 加速

七、电源优化(见 05-power-management.md)

八、常见性能问题

问题 优化
启动慢 裁剪内核、并行 init
内存紧张 musl、strip、压缩 rootfs
频繁 IO tmpfs、batch IO
CPU 占用高 O2/-O3、neon、LTO
网络慢 mtu、buffer、TCP 选项
UI 卡 局部刷新、GPU