检测到论坛CSS可能没有正确加载,如出现排版混乱请刷新重试。

We detected that the CSS might not be loaded correctly. If the website displays abnormally, Please refresh and try again.

  • *nix
  • 写给不会手动配置内核的人的 Linux Kernel 优化与编译指南

本篇文章不含关于从头手动配置内核的教程,主要是简短地讲述如何编译内核及内核的一些优化选项

普通软件用-march=native -O2手动编译和用发行版提供的二进制性能区别不会太大,但是内核不一样。手动编译的内核的性能远远优于发行版提供的二进制内核。

Part 0: Gentoo 用户需注意的细节

  1. 尽量使用官方源或 Overlay 里的 sources
  2. 部分 Overlay(如 gentoo-zh)会把默认 CONFIG 放在 ebuild 目录下,如果 sources 目录里边找不到就到 ebuild 目录下找找
  3. systemd 用户别忘了开启 Gentoo Linux -> Support for init systems, system and service managers -> systemd
  4. 建议安装 installkernel-gentoo (GRUB 用户) 或 installkernel-systemdboot(systemd-boot 用户)
  5. 记得安装完内核后 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-grubgrub-mkconfig -o /boot/grub/grub.cfg (Fedora 似乎是 grub2-mkconfig -o /boot/grub/grub.cfg

Part 5: 升级

解压新版内核源代码到/usr/src/内核版本
cp ../老内核版本/.config .
make oldconfig
之后编译、安装。

祝体验愉快!

8 天 后

BilinSun 谁让英特尔挤牙膏呢?
其实七到十代有一些 CPU 的架构在 -march 里是有单独选项的,但是核心架构均为 Skylake, 所以不懂的话选 Skylake 就行。

更新: 报错"未找到头文件" 的解决方案

未找到头文件,即在#include <xxxx.h>上报错。
原因是未安装相应开发头文件包。
解决方案因发行版而异。

Debian 系: apt-file

deb 系默认没有提供相关工具,可以使用 apt-file 查找文件提供者。
如果你的系统里没有 apt-file , 可以 apt install apt-file
使用方法: 初次使用请 apt-file update, 之后可以直接 apt-file search xxxx.h

RHEL / Fedora: dnf

dnf provides xxxx.h

SUSE ( openSUSE ): zypper

zypper wp xxxx.h

Arch 系: pacman

pacman -Fs xxxx.h
需要定期 pacman -Fy 刷新缓存

© 2025 wvbCommunity 管理团队

删封申诉 | 知乎专栏 | 状态监控 | 用户协议(EULA) | 隐私政策

本站文章除其作者特殊声明外,一律采用CC BY-NC-SA 4.0许可协议进行授权,进行转载或二次创作时务必以相同协议进行共享,严禁用于商业用途。