`
fudehai001
  • 浏览: 498774 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

BFS 简介,Linux 桌面的极速未来?

阅读更多

from:http://www.iteye.com/news/10372

 

像以往一样,依然在不断编译新版 Linux kernel 内核——Linux 系统提速的必修课。和 Linux kernel BFS  的相遇充满了巧合下的必然。现在看来,BFS Kernel 是 Linux 在半年内给我的最大惊喜——系统像电视购物主持人一样充满了力量和激情!而且是人能感觉得到的快!特以此文献给系统编译狂人,桌面提速狂 Linux 控。向所有 Linux 桌面用户力顶 BFS。

最先在 Kindle 上看 xkcd 漫画,有漫画如是:


A: 经过某些人千百年的努力,最新的 Linux  补丁支持 4096 个 CPU 的电脑了!原来只能支持 1024 个!
B: 全屏 Flash 视频卡不卡啊?
A: 卡。不过谁他丫的看视频啊?

而关于 BFS 的消息是最先在 Linux Magazine 上看到的;不久之后 G1 Android 手机 ROM 修改大神 CM 开始在他的测试版 CyanogenMod 使用 BFS 作为 kernel 的 Scheduler,试用之后发现手机系统速度明显加快。用手滑动左右翻屏就像 Opera 下滚动网页那么平滑,搞得屏幕覆膜上多了好多指纹印。心痒已久,恰逢 Linux kernel 2.6.31 新版正式发布,打上 BFS Patch 编译,重启。神一样的提速再次出现在我 4 年高龄的笔记本电脑上,注入了鸡血的 KDE4 让人无比兴奋。快!快!快!

所以,BFS 是什么?

要知道 BFS 是什么最好先了解一下它的作者,传说中的澳洲猛士 CK。

CK,Con Kolivas,男, 澳大利亚中年男子,资深内核 hacker。众所周知,Linux Kernel 是聚集了一帮天才蠢才和暴君怪胎的地方,CK 貌似最适合这种地方的人。是真的貌似,一张电影里面典型高智商通缉犯的脸。

几年前编译 Linux kernel,ck 补丁集就是系统提速的代名词。当时编译内核的三部曲是下 kernel 源码,打上 ck 补丁集,编译安装。后来上游代码将 ck 补丁集稳定的部分不断吸收,它的影响力也渐渐消失。

CK 本身对任务调度有很深的造诣,他聪明而经典地实现了 fair scheduling,而实现模式被 Igor 借鉴改进最终写出了现在 kernel 用的进程调度管理器 CFS (Completely Fair Scheduler)。不得不顺便介绍一下任务调度。Kernel 的进程调度主要是将 CPU 资源分配给各种驱动、进程等等。你可能听说过,一般人的大脑使用率不足 20% 这种科学或者伪科学言论。但事实是,你电脑上的 CPU 从来就没有真正被 100% 的利用过(别跟我说你在资源管理器里面看到过 CPU 100%,我还见过 101% 呢)。如何将各种运算任务一刻不停又有条不紊的塞给 CPU 处理是一门严肃的科学,绝不是电视购物导购能解决的问题。一次塞的运算量少了,CPU 闲着,运算时间增长,电脑慢了;而一次塞的运算多了,CPU 忙不过来,运算又要在门口排队,电脑也慢了。进程调度主要是用算法解决这个问题,而现在 Linux Kernel 用的 CFS 据说非常经典,在不同情况下都可达到相当高的 CPU 利用率。而现用 CFS 也是在 2.6.23 才加入的,取代原来 O(1),直接将 Linux 桌面速度从 XX 时代带入了 XX+N 时代。

两年前,CK 淡出了内核开发,忽然从江湖中蒸发。几周前,CK 重出江湖,两年磨一剑,带来了 BFS ,全称 Brain-f uck-Scheduler (只认识中间那个单词的请参考谷歌翻译),声称专为低端硬件设计(我的理解是不超过 10 个 CPU 的电脑电视手机游戏机都算低端机),说白了就是比 Kernel 默认要更加山崩地裂海枯石烂房价上涨油价飞升的快。BFS 为什么叫这个名字?为了中文用户,不能三个词让他们一个也不懂吧? 好吧,这名字有点不雅,不过算是直爽。对了,据说 CK 也是看到上面我提到的漫画才开始剑走偏锋。真正有几个人用有上千 CPU 的电脑呢?为什么要为这种扩展性牺牲桌面性能。BFS 就在其间做了取舍,仅仅支持最多 16 个 CPU ,把问题外沿做小,让算法更简单精悍高效。作为原理来讲,这足够解释速度的来源。对于其它废问题, CK 专门写了一个 FAQ。在可以预见的将来,BFS 也不会进入 mainline kernel,说白了是取向问题。

关键问题是怎么用?

下 2.6.31 的 kernel 源代码,如果你不知道在哪里下的话就不必往下看了,在当前历史时期您还是搞不定的。再去:http://ck.kolivas.org/patches/bfs/ 下第一个 patch,现在是 2.6.31 开头的,表示适用该版本。解压内核源码,打上 patch,配置以后编译安装。现在 BFS 还在测试期,没有完全成熟,但已经相当可用。编译的时候有什么需要配置的?不需要, Scheduler 这东西太底层了,打上补丁就把原来的 CFS 替换掉了,没什么选项给你选。如果你非要问的话,不就图个快么,记着把配置弄到 1000Hz,开 preempt ,禁掉 dynamic ticks。编译重启不用说了,我可以酷酷的扔下一个 have fun 然后去玩 Mac 了,反正你机器启动不了不要找我。虽然我纯净 kernel 单加 BFS Patch 编译成功启动没问题,依然有一位倒霉的推油编译以后不知道怎么折腾的无法启动。可另外被我忽悠成功的推友们反应一致:“快!人能感觉得到的快!”

到底值不值得上手 ,有没有评测?

这是某些不够剽悍的读者会挣扎到最后的问题。BFS 原理上讲,机器配置越低,感受会越明显。如果你非要评测的话,Phoronix 这个专业的 Linux 测评狂网站也出了一份。我可以提前剧透结论,区别都很小,BFS 胜出绝大部分测试,然而优势不明显。我只是补充一下绝大多数折腾过的人的感受
——快 !人能感觉到的快!

分享到:
评论

相关推荐

    广度优先检索 BFS.zip

    **广度优先搜索(BFS)**是一种在图或树数据结构中进行遍历或搜索的算法,其基本思想是从根节点开始,按照层次顺序依次访问每个节点。它首先访问最近的节点,然后逐渐扩展到更远的节点。在有向图中,BFS依然按照层次...

    魔方-BFS-输入_魔方bfs_魔方降群法+双向bfs_魔方降群_

    在IT领域,尤其是在算法和计算机科学中,"魔方-BFS-输入_魔方bfs_魔方降群法+双向bfs_魔方降群_"这个标题涉及到的是使用广度优先搜索(Breadth First Search, BFS)解决魔方问题的高级技巧。魔方是一种三维旋转拼图...

    代码 基于BFS广度优先搜索算法代码

    代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 ...

    BFS.rar_bfs_bfs matlab_bfs matlab

    标题中的"BFS.rar_bfs_bfs matlab_bfs matlab"提到了"BFS"以及与MATLAB相关的优化算法。BFS,全称为Breadth-First Search(广度优先搜索),通常用于图论或树结构的遍历。在MATLAB环境中,BFS可以被应用于解决各种...

    八数码BFS,DFS,BBFS,Astar实现

    该问题常用于演示搜索算法,如宽度优先搜索(BFS)、深度优先搜索(DFS)、双向宽度优先搜索(BBFS)以及A*搜索。 首先,**宽度优先搜索(BFS)**是一种按层进行搜索的算法,它会优先检查离起点近的解。在八数码...

    bfs.tar.gz_C#BFS_bfs

    【标题】"bfs.tar.gz_C#BFS_bfs" 提供的是一个使用C#实现的广度优先搜索(BFS)算法的代码压缩包。这个压缩包中的内容主要是关于如何在并行计算环境中,利用CUDA(Compute Unified Device Architecture)技术来优化...

    simulink BFSK仿真

    标题"simulink BFSK仿真"表明我们要探讨的是使用Simulink进行二进制频移键控(Binary Frequency Shift Keying, BFSK)的模拟与仿真。BFSK是一种数字调制技术,通过改变载波频率来传输二进制数据(0或1)。在Simulink...

    bfsk程序代码matlab

    标题“bfsk程序代码matlab”指的是使用MATLAB语言实现的BFSK(Binary Frequency Shift Keying,二进制频率移键控)编码技术的程序代码。BFSK是一种数字调制方法,通过改变载波频率来传输二进制数据,其中“0”和“1...

    基于BFS的贪吃蛇

    在本文中,我们将深入探讨如何使用宽度优先搜索(BFS)算法实现经典的“贪吃蛇”游戏。贪吃蛇是一款非常流行的电子游戏,玩家需要控制一个不断移动的蛇去吃食物,每次吃到食物,蛇的长度就会增加,游戏区域也会相应...

    BFS.rar_BFS JAVA_Bfs算法_bfs java_java b

    **一、BFS算法简介** 广度优先搜索通常用于寻找两个节点之间的最短路径,尤其是在无权图中。BFS从根节点开始,访问所有相邻节点,然后对每个已访问的节点,再访问它的未访问邻接节点。这个过程持续进行,直到遍历完...

    DFS \BFS生成树

    根据给定文件中的标题“DFS \BFS生成树”、描述以及部分代码内容,我们可以提炼出以下几个关键知识点:邻接表、深度优先搜索(Depth-First Search, DFS)、广度优先搜索(Breadth-First Search, BFS)以及如何利用这...

    动态内存+BFS

    ### 动态内存+BFS知识点解析 #### 一、程序概览 本程序主要通过结合动态内存分配与广度优先搜索(BFS)算法来解决一个图论问题:即在一个无向图中寻找从起点到其他各顶点的路径顺序。程序首先读入测试用例的数量,...

    bfs.rar_Bfs算法_bfs

    宽度优先搜索(BFS,Breadth-First Search)是一种用于遍历或搜索树或图的算法,它从根节点开始,沿着树的宽度方向进行探索,直到找到目标节点或者遍历完整个树。在图中,BFS通常用于找出两个节点间的最短路径,或者...

    BFS 广度优先搜索算法 matlab

    **广度优先搜索(Breadth-First Search, BFS)**是一种在图或树中搜索节点的算法,它按照从根节点开始,逐层扩展的方式进行。在MATLAB中实现BFS,可以帮助我们解决许多问题,例如查找最短路径、判断图的连通性等。 ...

    bfs.rar_BFS+c++_bfs

    **标题中的“bfs.rar_BFS+c++_bfs”表明这是一个关于C++实现BFS算法的压缩包文件,可能包含了一个名为“bfs”的源代码文件。** **描述中的“this is code for bfs in c++”进一步确认了这个压缩包内代码的主要功能...

    BFS.rar_bfs

    标题中的"BFS.rar_bfs"指的是使用BFS(Breadth-First Search,宽度优先搜索)算法的一个程序或项目,这个项目的压缩包被命名为"BFS.rar",可能包含了实现BFS算法的源代码、报告文档以及编译后的可执行文件。...

    算法之BFS与DFS

    **算法之BFS(广度优先搜索)与DFS(深度优先搜索)** 在计算机科学中,图论和算法是至关重要的部分,而BFS(广度优先搜索)和DFS(深度优先搜索)是两种最基础且广泛使用的图遍历算法。它们在解决各种问题时起到...

    DFS和BFS的C++实现

    深度优先搜索(DFS,Depth-First Search)和广度优先搜索(BFS,Breadth-First Search)是图论和树形结构中常用的两种遍历算法,它们在计算机科学中有着广泛的应用,如解决迷宫问题、网络爬虫、社交网络分析、最短...

    搜索之BFS算法

    详细地介绍BFS的思路模式以及用几个案例教授怎么运用BFS去解题。

    bfs.rar_bFS maze_bfs

    在IT领域,迷宫求解是一个经典的问题,而广度优先搜索(Breadth First Search,简称BFS)是解决此类问题的一种有效算法。本文将深入探讨如何利用BFS算法来寻找迷宫中的路径,以及如何通过编程实现这一过程。 首先,...

Global site tag (gtag.js) - Google Analytics