Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->Linux技术 ->BSD相关 ->正文

Solaris、Linux和FreeBSD的内核比较

来源: 作者: 时间:2007-04-11 点击: [收藏] [投稿]

如果因为负载原因vm_pageout_scan 来不及扫描全部内存的话,FreeBSD内核可能把整个进程全部换出。如果内存短缺十分严重,vm_pageout_scan 可能会kill系统中最大的进程。Linux也使用不同的页面链表。物理内存被分为(多个)3重zone:一个DMA页面,一个普通页面,一个动态分配内存页面。zone的实现很像由于x86架构限制而很产生的。页面在hot,cold和free链表间移动--机制和FreeBSD的类似。经常用的页面在hot上。可用页面则在cold或者free上。

  SUN的大佬使用free链,哈希链,vnode页面链支持自己的LRU实现。后两者大致相当于FreeBSD和Linux的active/hot链--也是FreeBSD和Linux要扫描的链。Solaris要扫描的不是这两个对象,它用two-handed clock算法扫描全部页面(见Solaris Internals 或其他什么地方随你便)。大致方法是,两只手相隔固定举例,前面的手把page的引用位清空以作为标识,如果自此开始没有进程引用这个页,后面的手就释放这个页面(当然如果需要就写回磁盘)。

  3个系统在分页时都考虑了NUMA本地性。他们都把IO buffer cache和虚拟内存页面的cache合并到一个系统页cache中。系统页cache用于读写文件已经被mmap了文件,还有应用的text段和data段。

  文件系统

  3个系统都使用数据抽象层向应用隐藏文件系统实现细节。就是用大家熟悉的openclosereadwritestat,等等系统调用访问文件,无论下层的文件数据的实现和组织怎么样。Solaris和FreeBSD把这种机制称为VFS(virtual file system),基本数据结构是vnode(virtual node)。Solaris和FreeBSD里每个被访问的文件都有一个赋给他们的vnode。除了generic 的文件信息外,vnode还包含到file-system-specific 信息的指针。Linux采用了详细的机制,也叫VFS(virtual file switch),文件系统无关的数据结构是inode。这个机构和vnode类似(小心:Solaris和FreeBSD也另有自己的inode--是UFS文件系统里file-system-dependent 的数据)。Linux还有两个不同的结构,一个用于文件操作,另一个用于inode操作。Solaris和FreeBSD把他们合并为vnode操作。
VFS允许在系统里实现多种文件系统。这意味着他们相互访问对方的文件系统没问题。只要相关的文件系统例程和数据结构已经被移植到VFS上。所有这3个系统都允许文件系统堆叠stacking。下表列出了每个OS实现的文件系统类型,不是全部哈。

  结论
  Solaris,FreeBSD和Linux显然都在从对方身上获益。随着Solaris的开源,这种相互促进有望更快。Max个人已经感觉到Linux的变化是最快的。新技术被快速地集成进系统,只是文档和健壮性可能有点落后。Linux有很多--或者有时是看上去有很多--开发者。FreeBSD则大概是(从某种意义上)3个系统中历史最长的。Solaris来自BSD Unix和AT&T Bell实验室Unix的结合,使用了更多数据抽象层,因而一般说来能更简便地支持更多功能。不过,内核中大多数这样的分层都没有文档描述。可能随着代码的开放这一点会有所改善。

  至于他们的差别,最大的地方之一是page fault处理了。在Solaris中,发生page fault时,代码是从平台相关的trap handler开始执行的(以大家的智商,这好像不用说了吧。。。),然后会调用generic的as_fault例程,这个例程判断发生page fault的segment,然后调用segment driver处理page fault。segment driver调用文件系统代码,后者再调用进驱动程序,换入页面。换入完成后,segment driver 调用HAT层来更新页表项。在Linux上,发生page fault后,内核调用的代码在会马上进入平台相关部分,这些处理可能更快,不过可能不太容易扩展和移植(后半段说得太省,不知道作者有没有真的研究过Linux下对应的处理过程)。

  内核观察和调试工具对正确理解系统行为有关键意义。在这方面,Solaris有kmdbmdb和DTrace 。在开源之前,Max就对Solaris做过多年“反向工程”--他发现解决问题的时候使用工具总比阅读代码来得快--我也知道,不过得看什么场合,大家可不要被他误导。Linux嘛,我看作者Max不太熟,所以认为没有太多工具。对FreeBSD,他也认为只是可以用GDB调试内核的dump--Liux也可以。
(e129)



 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:FreeBSD服务器的安装与优化之优化篇   下一篇:Solaris,Linux和FreeBSD的内核比较

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号