Linux 2.6内核适合于嵌入式系统吗?
发布日期:2011-06-13
嵌入式linux的内核 嵌入式linux内核 linux 2.6 内核配置 linux2.6内核编译 linux2.6内核分析
linux内核2.6.36 linux内核2.6.38 linux2.6内核下载 linux内核2.6.29
linux内核2.6.31
Linux 2.6内核性能评估报告
笔者受公司委托对 2.6
的内核作了一本性能评估,评测的东西包含过程切换性能,线程切换性能,网络性能,内存读取速率,文件系统性能几个方面。成果表明,在变乱站的模式下 2.6
的内核大多数指标比不上 2.4 内核的性能。在办事器模式下, 2.6 内核才开端有上风。同时,本文应用 FreeBSD 作为参照比拟东西。
Linux2.6 内核的新特征
内存办理
1 .抢占式内存
2.6 版本已往的 Linux
内核是不允许对一个被系统调用并处于运行状况的过程举办调理的。这意味着一旦系统调用中有某个义务正在履行,那么该义务会把持处置处分处分器直到系统调用停止,而不管其应用途理处分处分器时光的好坏。(2.4是分时的,为什么网上的系统说“直到系统调用停止”
??)
2.6 版内核中内存是可抢占的。一些人认为可抢占式内存使 Linux 2.6 内核在一些时效性较强的变乱中比 2.4
版内核具有更好的相应本事。为实现抢占式内存, Linux 2.6
内核中的代码被设置了抢占点,这意味着调理步调会结束正在运行的过程,而来履行优先级更高的过程。在系统调用过程中, Linux 2.6
内核会定时地查抄抢占点,以抑制差异理的扩大孕育发生。而在查抄过程中,调理过程很大概就会结束当提高程来让另一个过程运行。
实际上,测试表明抢占内核使变乱站环境下的利用步调速率变慢。
2 .引入内存池机制
2.6 版内核的开拓过程引入了内存池以餍足不绝止地举办内存分派。其脑筋是预先分派一个内存池,并生存到真正需要的时光。
哈哈,其成果是系同一启动,大批的内存就没有了。
3 .改革捏造内存
2.6 版内核改革了捏造内存在确定水平负载下的性能。
通过反向地点映射淘汰了系统的开销。
Linux
内核变乱于捏造内存模式时,每一个捏造页映射一个相应系统内存的物理页。捏造页和物理页之间的地点转换由硬件页表来完成。但是这种“捏造到物理”的页映射不总是逐一映射的,多个捏造页有大概指向同一个物理页。这种环境下,内核想要开释特定的物理页就必需遍历全体的过程页表记载来查找指向这个物理页的引用,只有在引用数达到
0 时才干开释该物理页。负载较高时,这会让捏造内存变得非常慢。
反向地点映射补丁通过在布局页引入一个叫做 pte_chain
的数据布局来办理这一题目。
不过,这种要领存在一个指针开销题目。系统中的每一个布局页都必需有一个分外的、用于 pte_chain
的布局。一个 256MB 内存的系统有 64K 个物理页,这就需要有 64KB* ( sizeof ( struct pte_chain ))的内存被分派用于
pte_chain 的布局。
应用了这项技巧, r-map 的性能,尤其是高负载的高端系统,相应付 2.4
版内核的捏造内存系统还是有了显明地提高。
4 .共享内存的改造
Linux 2.6 内核为多步调供给了一种差异的道路,即
NUMA ( Non Uniform Memory Access
)。这种要领中,内存和处置处分处分器是相互衔接的,但应付每一个处置处分处分器,某些内存是“封闭”的,而某些内存则“更远”。这意味着当内存竞争呈现时,“更近”的处置处分处分器对就近的内存有更高的应用权。
2.6 版内核供给了一套成果来定义内存和处置处分处分器之间的拓扑干系。调理步调可以应用这些信息来为义务分派本地内存。如许将淘汰内存竞争导致的瓶颈,提高吞吐量。
驱动步调
1 .抑制例程的改造
在 2.6 版内核中,驱动步调要是要从一个配置上发出抑制需要返回 IRQ_HANDLED ,不然返回 IRQ_NONE 。如允许以赞助内核的
IRQ 层清楚地识别出哪个驱动步调正在处置处分处分哪个特定的抑制。
要是一此抑制请求不绝到来,并且没有注册那个配置的处置处分处分步调,内核就会应付来自该配置的抑制。
2 .驱动步调移植
相应付 2.4 版内核来说, 2.6 版内核改造了内核编译系统,从而得到更快的编译速率。 2.6 版内核的编译系统加入了改造的图形化东西
make xconfig (需要 Qt 库)和 make gconfig
内核模块加载器也在 2.6
版内核中被完整实现,使得模块编译机制相应付 2.4 版内核有了很大的差异。本来 2.4 版内核中的模块东西不克不及用来加载或卸载 2.6
版内核的模块,需要一组新的模块东西来完成模块的加载和卸载。这个新的模块加载东西会只管即便淘汰在一个配置仍被应用的环境下,相应的模块却被卸载的争辩孕育发生,而是在确认这些模块已经没有恣意配置在应用后再卸载失。孕育孕育发生这种争辩的缘故因由之一是,模块应用计数是由模块代码本身来把持的。在
2.6 版内核中,模块不再需要对引用计数举办加减,这些变乱将在模块代码外部举办。
过程办理
1 .新调理器算法
2.6 版本的 Linux
内核应用了新的调理器算法,称为 O ( 1 )算法,它在高负载的环境下履行得非常慷慨,并在有多个处置处分处分器时可以大概很好地扩大。
2.4
版本的调理器中,时光片重算算法请求在全体的过程都用尽它们的时光片后,新时光片才会被重新谋略。在一个多处置处分处分器系统中,当过程用完它们的时光片后不得不等候重算,以得到新的时光片,从而导致大部分处置处分处分器处于空闲状况,影响
SMP
的屈服。别的,当空闲处置处分处分器开端履行那些时光片尚未用尽的、处于等候状况的过程时,会导致过程开端在处置处分处分器之间“跳跃”。当一个高优先级过程或交互式过程孕育发生跳跃时,全部别系的性能就会受到影响。
新调理器办理上述题目的要领是,基于每个 CPU
来分布时光片,并撤消全局同步和重算循环。调理器应用了两个优先级数组,即运动数组和逾期数组,可以通过指针来拜访它们。运动数组中包含全体映射到某个 CPU
且时光片尚未用尽的义务。逾期数组中包含时光片已经用尽的全体义务的有序列表。要是全体运动义务的时光片都已用尽,那么指向这两个数组的指针互换,包含筹备运行义务的逾期数构成为运动数组,而空的运动数构成为包含逾期义务的新数组。数组的索引存储在一个
64 位的位图中,以是很容易找到最高优先级的义务。
新调理器的紧张优点包含:
◆ SMP 屈服
要是有变乱需要完成,全体处置处分处分器都市变乱。
◆ 等候过程 没有过程需要永劫间地等候处置处分处分器,也没有过程会无端地占用大批的 CPU
时光。
◆ SMP 过程映射 过程只映射到一个 CPU ,并且不会在 CPU 之间跳跃。
◆ 优先级
非告急义务的优先级低,反之亦然。
◆ 负载均衡 调理器会消沉那些高来由理处分器负载本事的过程的优先级。
◆ 交互性能
纵然在高负载的环境下,系统淹灭很永劫间来相应鼠标点击或键盘输入的环境也不会再孕育发生。
2 .高效的调理步调
2.6
版内核中,过程调理颠末重新编写,调理步调不需每次都扫描全体的义务,而是在一个义务酿成果绪状况时将其放到一个名为“当前”的行列步队中。当过程调理步调运行时,只选择行列步队中最有利的义务来履行。如许,调理可以在一个恒定的时光里完成。当义务履行时,它会得到一个时光段,大概在其转到另一线程之前得到一段时光的处置处分处分器应用权。当时光段用完后,义务会被转移到另一个名为“逾期”的行列步队中。在该行列步队中,义务会依据其优先级举办排序。
从某种意义上说,全体位于“当前”行列步队的义务都将被履行,并被转移到“逾期”行列步队中。当这种变乱孕育发生时,行列步队就会举办切换,本来的“逾期”行列步队成为“当前”行列步队,而空的“当前”行列步队则变成“逾期”行列步队。由于在新的“当前”行列步队中,义务已经被分列好,调理步调如今应用大抵的行列步队算法,即总是取当前行列步队的第一个义务举办履行。这个新过程要比老过程快得多。
3 .新的同步步调
多过程利用步调偶然偶尔需要共享一些资源,比如共享内存或配置。为了抑制竞争的呈现,步调员会应用一个名为互斥的成果来确保同临时光只有一个义务在应用资源。到如今为止,
Linux 还是通过一个包含在内核中的系统调用来完成互斥的实现,并由该系统调用决议一个线程是等候还是持续履行。
Linux 2.6 内核支撑
FUSM ( Fast User-Space Mutex
)。这个新成果会查抄用户的空间,查察是否有等候的环境呈现,并且只有在线程需要等候时才举办系统调用。如许当不需要等候时,就会抑制不需要的系统调用,以节流时光。该成果也应用优先级调理,以便在呈现竞争时决议哪一个线程可以被履行。
测试报告
测试平台:
硬件:
2 AMD XP 2500+ / Intel PV
3G (HT支撑)
2 DDR RAM 256M 333Mhz
2 硬盘 Maxtor 40G 7200rpm/s
2 主板 MSI KT4AV
2 100M 以太网卡
软件
2 GCC
3.4.2
2 Slackware 10.1
2 文件系统 ReiserFS
参考平台
FreeBSD5.3
比拟东西;
2 kernel 2.4.29
2
kernel 2.6.10
2 FreeBSD 5.3
阐发:
全体内核都依据平台属性重新编译
测试东西
2 lmbench 用于系统性能集团测试
2 forkbomb 过程压力测试
2 Netperf 网路性能测试
Linux 2.6 编译
起首获取最新的 kernel 代码
linux-2.6.10.tar.bz2
解压源代码
tar zjvf linux-2.6.10.tar.bz2
举办配置:
make xconfig
测试应用 SSH 客户端在字符界面下举办。
比拟成果
内核的大小
依据死板的硬件状况重新编译了内核,编译的成果如下:(未紧缩)
启动内存大小
系统启动后,打开了12路的VoIP网关步调。成果,内存的斲丧状况如下,大家不要害怕,这还能称为嵌入式系统吗?
线程创立速率
pthread 线程创立测试, BSD 是绝对的赢家,险些不需要时光
内存拜访速率
内存拜访测试,三者速率差多,集团来看 2.4 快于 bsd 快于 2.6
文件拜访
文件拜访速率 BSD>2.4>2.6
网络流量
网络速率: BSD 显明上风
socket 创立速率
socket 函数创立的时光: BSD 优于 2.6 优于 2.4
bind 函数拜访时光
在小负载下,三者表示比拟靠近,时光是常数在大负载下 2.4.29 变慢
bind 函数匀称时光 ()
|
(3000socket)
|
(10000socket)
|
2.4.29
|
O(1)
|
O(n)
|
2.6.10
|
O(1)
|
O(1)
|
FreeBSD5.3
|
O(1)
|
O(1)
|
linux内核2.6.36
linux内核2.6.38 linux2.6内核下载 linux内核2.6.29 linux内核2.6.31