BFS 调度器移植体验

Posted by Wu Weilin on 2016-08-06

Introduction

BFS 全称 Brain Fuck Scheduler. 至于为什么叫这个名字,可以参考 BFS-FAQFAQ

作者 Con Kolivas 在介绍中表示,BFS 的设计的初衷是带来更好的桌面交互式体验,特别是对于大多数的低规格机器.

Android 也曾经评估过 BFS, 测试的结果对用户体验没有明显的改进,因此并没有最终导入.

通过一些第三方机构的测试数据来看,低配置的硬件平台使用 BFS 带来的体验提升会更加明显.比如笔者正在用的这台 thinkpad t61 ( 所以手上有比较老的笔记本 / PC 尽管来体验吧 ).

Get Prepared

  1. 选择内核版本
    http://www.kernel.org 选择下载需要的版本 , 比如 3.18.31.tx.gz

  2. 解压缩该版本到你想要路径 , 网络上有建议放在 /usr/src 下 , 看起来更合理 , 因为内核的源代码默认就存放在该路径 , 但我就遇到了编译时空间不够的问题 , 因为我给 ‘/‘ 分配的空间是 20GB, 能用的不到 8GB 了 . 所以建议放在空间够的分区 , 至少有 15GB, 例如 ~/projects/3.18.31-ck1-bfs/

Apply BFS Patch

  1. 获取对应内核版本的 BFS patch, 从 BFS 作者 Con Kolivas 的个人站点 获得指定内核版本的 BFS patch, 例如 http://ck.kolivas.org/patches/bfs/3.0/3.18/ 下面就有 3.18-sched-bfs-460.patch 等
  2. 进入到内核目录 ~/projects/3.18.31-ck1-bfs/, patch -p1 <xxxx.patch, patch 不止一个 , 建议都打上 , 省的后期再 tunning 了

Build Kernel with BFS patch

  1. $ make menuconfig
    注意再 General Setup 确认 BFS 是不是已经勾选上了,OK 之后就保存 .config 文件

  2. $ make bzImage -j4
    这取决于机器的性能, 一般是 -jx 是 CPU core 的 2 倍 , 考虑到有些电脑太老了, 可以把源码的编译放在性能更好的机器上做 , 完事后 copy 过来就 OK 了

  3. $ make modules -j4
    同上 , 完成这一步之后 , 可以把整个源码包复制到你想要的电脑上

  4. $ make modules_install

  5. $ sudo mkinitramfs -o /boot/initrd.img-3.18.31-ck1-bfs

Configure New Kernel

  1. Copy bzImage 到 /boot/
    $ sudo cp arch/x86_64/boot/bzImage /boot/vmlinuz-3.18.31-ck1-bfs
    具体取决于系统架构 , 也不一定是 x86_64 目录

  2. Copy System.map 到 /boot/, 建立新的软链接
    $ sudo cp System.map /boot/System.map-3.18.31-ck1-bfs
    $ sudo ln -s /boot/System.map-3.18.31-ck1-bfs /boot/System.map

  3. 配置引导文件
    $ sudo update-grub2

至此 , 工作完成 , reboot 之后就可以体验啦

参考资料

FAQ. http://ck.kolivas.org/patches/bfs/bfs-faq.txt

This is copyright.