欧拉 Page Cache 的内核编译

PageCache提供了一种限制page cache的能力,能够对page cache的总量进行控制, 增强系统在数据库等page cache占比较高场景下的稳定性,积极释放缓存。

它提供了以下sysctl接口:

  • vm.pagecache_limit_ratio:pagecache占系统总内存的百分比,[0, 100],0和100都表示功能关闭。
  • vm.pagecache_limit_reclaim_ratio:针对pagecache真实回收的比例,在实际回收时,总是比pagecache_limit_ratio的多回收一些,默认比例是2%。
  • vm.pagecache_limit_ignore_dirty:在回收时是否忽略脏页,默认忽略。因为对脏页的回收较耗时。

补丁是基于 openEuler-22.03-LTS 的,不适用于 24.03-LTS,代码都已不同了

编译过程如下:

一、安装好openEuler-22.03-LTS,磁盘留够空间,最少留20G

二、安装编译已经所需软件

dnf install -y rpm-build openssl-devel bc rsync gcc gcc-c++ flex bison m4 elfutils-libelf-devel
dnf install -y python
dnf install -y ncurses-devel
dnf install -y dwarves

三、安装内核源代码

dnf install -y kernel-source

现在是2024年11月4日,内核版本是 linux-5.10.0-60.139.0.166.oe2203.x86_64,注意补丁的适用范围

四、打补丁

page.patch

将page.patch 放到 /usr/src

cd /usr/src/linux-5.10.0-60.139.0.166.oe2203.x86_64
patch -p1 < ../page.patch

五、编辑内核版本号,EXTRAVERSION的版本号要大于当前内核版本,否则无法安装。当前是166,改成+1,167

cd /usr/src/linux-5.10.0-60.139.0.166.oe2203.x86_64

vi Makefile
# SPDX-License-Identifier: GPL-2.0
VERSION = 5
PATCHLEVEL = 10
SUBLEVEL = 0
EXTRAVERSION = -60.139.0.167.oe2203.x86_64
NAME = Kleptomaniac Octopus
OPENEULER_MAJOR = 2203
OPENEULER_MINOR = 0

六、编译

cd /usr/src/linux-5.10.0-60.139.0.166.oe2203.x86_64

make openeuler_defconfig

#根据cpu的核数来调整-j后面的参数
make binrpm-pkg -j8

#报两个错,ignore
mm/vmscan.c:4306:22: warning: ‘global_reclaimable_pages’ defined but not used [-Wunused-function]
 4306 | static unsigned long global_reclaimable_pages(void)
      |                      ^~~~~~~~~~~~~~~~~~~~~~~~
      
kernel/sysctl.c: In function ‘pc_reclaim_limit_proc_dointvec’:
kernel/sysctl.c:715:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
  715 |  int pre_reclaim_ratio = vm_pagecache_limit_reclaim_ratio;
      |  ^~~

#生成的包放在如下目录下
/root/rpmbuild

七、安装编译好的内核

rpm -ivh /root/rpmbuild/RPMS/x86_64/kernel-headers-5.10.0_60.139.0.167.oe2203.x86_64-1.x86_64.rpm

八、修改启动项

cat /boot/grub2/grub.cfg | grep -E "menuentry '"

grub2-set-default 0

九、查看新内核

uname -a
Linux localhost.localdomain 5.10.0-60.139.0.167.oe2203.x86_64 #1 SMP Mon Nov 4 15:49:50 CST 2024 x86_64 x86_64 x86_64 GNU/Linux