- 已编辑
- 1楼
本篇文章不含关于从头手动配置内核的教程,主要是简短地讲述如何编译内核及内核的一些优化选项
普通软件用-march=native -O2
手动编译和用发行版提供的二进制性能区别不会太大,但是内核不一样。手动编译的内核的性能远远优于发行版提供的二进制内核。
Part 0: Gentoo 用户需注意的细节
- 尽量使用官方源或 Overlay 里的 sources
- 部分 Overlay(如 gentoo-zh)会把默认 CONFIG 放在 ebuild 目录下,如果 sources 目录里边找不到就到 ebuild 目录下找找
- systemd 用户别忘了开启 Gentoo Linux -> Support for init systems, system and service managers -> systemd
- 建议安装 installkernel-gentoo (GRUB 用户) 或 installkernel-systemdboot(systemd-boot 用户)
- 记得安装完内核后 emerge @module-rebuild
Part 1: 选个内核与下载
性能上,xanmod 与 liquorix 互有胜负 > Zen > 原版内核
xanmod, liquorix, vanilla kernel 的对比可以看这篇
Xanmod 内核下载: https://github.com/xanmod/linux/releases
Liquorix / Zen 内核下载: https://github.com/zen-kernel/zen-kernel/releases
(要下载 Liquorix 请选择版本号以 lqx* 结尾的版本,下载 Zen 请选择版本号以 zen* 结尾的版本)
Part 2: 配置阶段
下载内核源代码解压到/usr/src/内核版本
下。
如果你不会手动配置,可以将源代码中的CONFIG
(如果有)文件复制改名.config
直接使用。
也可以下载 通用 CONFIG(此 CONFIG 不含 Gentoo 相关内容)
特别注意:以 ext4 以外的文件系统作为根文件系统的用户请到 File systems 中将你的根文件系统支持编译进内核,否则系统可能将无法启动!!!方法:将你的文件系统前的 <M> 改为 <*>,如 btrfs 选中 <M> Btrfs filesystem support 后按空格,变为 <*> Btrfs filesystem support 即可
Os, O2, (O3)
make mrproper
make menuconfig
中 General setup -> Compiler optimization level 改为你想要的
Os 优化磁盘空间 O2 优化性能 O3 进一步优化性能
此处部分定制内核(如 xanmod liquorix)能开启 O3。
Kernel 和 Initramfs 的压缩算法
推荐 ZSTD。ZSTD 的压缩速度、解压缩速度、压缩比均优于传统 xz 与 gzip
General setup -> Kernel compression mode 选择 ZSTD
打开 General setup -> Support initial ramdisk/ramfs compressed using ZSTD
架构优化
Processor type and features -> Processor family 选你自己的
英特尔酷睿请按照以下内容选择:
二代酷睿: Sandy Bridge
三代: Ivy Bridge
四代: Haswell
五代: Broadwell
六代、七代、八代、九代、十代: Skylake
十一代: 笔记本 Tiger Lake, 台式机 Rocket Lake
十二代: Alder Lake
LTO 与 PGO:两种优化方案
LTO 与 Clang
目前 Kernel 仅支持 Clang 的 LTO。
关闭 General architecture-dependent options -> GCOV-based kernel profiling -> Enable gcov-based kernel profiling
其实对于一般用户除非用到 PGO (第一阶段) ,GCOV-based kernel profiling(CONFIG_GCOV_KERNEL)都建议关掉
General architecture-dependent options -> Link Time Optimization (LTO) -> 选择 Clang ThinLTO
其实选择 FullLTO 也可以,但是我推荐 ThinLTO
PGO 与 GCC
推荐你去看这篇。
Part 3: 编译!
Clang: make LLVM=1 LLVM_IAS=1 -jX && make LLVM=1 LLVM_IAS=1 -jX modules_install
GCC: make -jX && make -jX modules_install
-jX
中的 X 取 CPU 线程数和内存(单位 GiB)除以 2 的最小值。
如 8c16t CPU + 16GiB 内存应取 -j8 (内存 / 2)
8c16t CPU + 32GiB 内存应取 -j16 (CPU 线程数)
多等等,在我这里 (5800h + 16GiB 内存 ,-j8
) 要用 25 分钟左右
Part 4: 安装
make install
之后生成 initramfs: mkinitcpio --kernel 内核版本
或者 update-initramfs -c -k 内核版本
或者 dracut --zstd --kver=内核版本
之后更新引导器菜单:
GRUB: update-grub
或 grub-mkconfig -o /boot/grub/grub.cfg
(Fedora 似乎是 grub2-mkconfig -o /boot/grub/grub.cfg
)
Part 5: 升级
解压新版内核源代码到/usr/src/内核版本
cp ../老内核版本/.config .
make oldconfig
之后编译、安装。
祝体验愉快!