单位代码10006linux内核设计与实现 pdf
学号********
分类号TP391
密级
毕业设计(翻译)LINUX向多核的扩展性分析
院(系)名称计算机学院
专业名称计算机科学与技术
学生名称王家兴
指导教师李建欣
2013年6月
摘要
本文分析了七个系统应用程序(Exim,memcached,Apache,PostgreSQL,gmake,Psearchy和MapReduce)在运行于48核计算机的Linux上的可扩展性。除了forgmake,所有的应用程序都触发了最新Linux内核的可扩展性瓶颈。运用标准的并行编程技术,本文介绍了一项新的技术——粗略计数器(sloppy counter),这样瓶颈可以从内核中移除或者可以通过少量改变应用来被避免。优化内核总共需要修改3002行代码。通过本次分析,我们推断还没有因为可扩展性方面的原因而放弃传统操作系统组织结构。
1 引言
普遍观念是,传统的内核设计在多核处理器上不能表现很好的伸缩性:随着内核数量的增加,应用程序将在内核上花费更多的时间。杰出的研究人员们主张重新思考操作系统,而且具备可扩展性的新内核已经被提出了。本文提出的问题是,由应用程序来决定规模时,传统内核设计是否可以被使用并执行。
这个问题很难决断性地回答,但我们尝试做出稍许解释。我们在48核机的Linux上分析部分系统应用程序。我们测试Linux操作系统,因为它具有传统的内核设计,同时Linux社区在扩展性方面已经取得了很大进展。应用程序包括Exim邮件服务器[2],memcached对象缓存[3],Apache服务器[1],PostgreSQL[4],gmake[23],Psearchy文件索引器[35, 48],和一个多核的MapReduce library[38]。我们将这些应用程序统称为MOSBENCH(多核操作系统基准),这是专为并行执行和着重使用主要的Linux内核组件而设计的。
判断Linux内核设计是否兼容应用程序的可扩展性,我们应用了如下方法。首先,我们在运行于48核机的Linux(内核版本为2.6.35)上,衡量MOSBENCH 标准应用程序的伸缩性,实验中我们使用保存在内存中的tmpfs文件系统来避免磁盘使用瓶颈。Gmake扩展良好,但其他应用程序扩展不佳,48核机的每个内核执行的工作远比单核时少。我们试图通过修改应用程序或Linux内核来理解和解决程序的扩
展问题。于是我们采用迭代的办法,原因在于先修正一个扩展性的问题会进一步暴露深层问题。应用程序的最终结果是:要么在48核机上有很好的扩展性,要么归咎于由应用程序、Linux内核或底层硬件难以解决的问题而导致的非扩展性。我们分析:内核是否与扩展区域兼容的分析结果是微小的,在Linux内核的难以解决的问题最终限制了应用的可扩展性。
作为分析的一部分,我们将修正三大类MOSBENCH标准应用具有的的扩展性问题:由Linux内核执行引起的问题,应用程序的用户层设计引起的问题,应用程序使用Linux内核服务的方式所造成的问题。一旦我们确定了一个瓶颈,通常只需要很少的工作就可以消除或避免它。在某些情况下,我们修改应用程序使其能够更趋于并行,或以更适于扩展的方式调用内核服务,又或者我们直接修改内核。内核的变化都是本地化的,通常通过分布式数据结构避免不必要的分享来包含排他锁和原子指令。所需更改是细微的,其原因之一在于普通的Linux已经
做出了很多的优化来提高可扩展性。我们进一步推测,这也许是Linux系统调用API非常适合于实现避免对内核对象的不必要竞争。
本文的主要贡献如下:第一个贡献是,对Linux 2.6.35-rc5内核使用16种扩展性提高方式,来形成我们引用的内核补丁(PK)。一些变化来源于新的想法,我们称之为模糊计算器,它具有很好的属性,可以用来增大共享计数器让一些功能在不必修改共享计数器的所有功能的情况下扩展性增强。在Linux中,
这种技术是特别有效的,因为通常一个给定的共享计数器中,只有几个功能是扩展性的瓶颈;模糊计数器允许我们只替换这些少量的功能,而无需修改内核中的其他功能。第二项贡献是一组衡量操作系统可扩展性的应用程序基准,MOSBENCH,并且公开了它们。第三,是对于改善MOSBENCH应用程序的扩展性的技术的论述。我们的最终的贡献是通过使用MOSBENCH标准的分析,表明没有扩展性方面的理由让我们放弃传统的内核设计。
论文的其余部分组织结构如下:第2部分将本文与以前的工作联系起来。第3部分介绍MOSBENCH的应用程序和这些应用侧重的操作系统组件。第4部分总结了普通内核与PK之间的差异。第5部分描述MOSBENCH在普通Linux2.6.35-RC5内核和PK内核上的可扩展性。第6部分讨论了测试结果。第7部分总结本文的结论。
2 相关工作
关于研究在共享内存多处理器上运行的类Unix操作系统的的扩展性,学术界和工业界的工作都有很长的历史。如斯坦福研究项目FLASH以及像IBM、Sequent、SGI和Sun这样的公司已经生产了共享内存的机器,这些机器拥有几十到几百的处理器运行变种的Unix。已有许多技术被应用到这些机器中用来衡量软件水平,包括可扩展的锁定(例[41]),无等待的同步(例[27]),多处理器调度程序(例[8,13,30,50]),内存管理(例如[14,19,34,52,57]),和通过使用共享内存的快速信息传输(
例如[12,47])。将Unix适用到多处理器的相关技术已被写入教科书(例如[46])。这些技术已被用于当前的操作系统,如Linux,Mac OS X,Solaris和Windows。Cantrill和Bonwick总结了历史背景和实际经验[17]。
本文延续了以前的可扩展性研究,在48核计算机平台上测试大量的系统应用程序,并在Linux环境下细化一组特定的问题和解决方案。这些解决方案遵循标准数据结构的并行编程技术,使得不提供共享时每个内核可以操作独立的数据,但必要时内核可以共享数据。
Linux扩展性的改进。早起的多处理器Linux内核对内核集中的并行负载的扩展性差,因为为简单起见,内核使用了粗精度的锁。从那时起Linux社区重新设计了很多内核子系统来提高扩展性(例如,Read-Copy-Update(RCU)[39],kicak ryb queues[6],libnuma[31]以及改进的负载均衡支持程序[37])。Linux研讨会()几乎每年都有涉及关于扩展性的论文。一些重新的设计是基于上述研究,一些公司如IBM和SGI[16]则直接贡献的代码。Kleen 提供Linux内核的修改的简史,并且阐述了在最近的Linux版本(2.6.31)[32]中,扩展性差的领域。在本文中,我们确定额外的内核扩展性问题,并介绍了如何解决这些问题。
Linux可扩展性研究。Gough et al.研究Oracle数据库10g的扩展性,它运行于Linux2.6.18、双核Intel Itanium处理器上。这项研究发现了Linux运行队列、对象缓存和IO处理方面的问题。Cui et al.在8核系
统上使用TPCC-UVa和Sysbench-OLTP标准研究Linux3.6.25的可扩展性,发现了应用内部瓶颈和V IPC 系统中很差的内核扩展性。我们发现这些问题或者刚刚被Linux社区解决或者是
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论