OSDI2010—众核(Many Cores)环境下Linux的可扩展性研究
作者 陈怀临 | 2010-11-21 17:17 | 类型 研发动态 | 33条用户评论 »
【陈怀临注:我在11月4日的多核与OS Submit上主要就是把这篇OSDI2010的来自MIT的文章的结果作为论据,谈Application Aware OS是将来OS的必由之路。在经典OS的研究里,围绕着Kernel的优化必定是死胡同。换言之,芯片设计,OS设计和优化,应该与Application设计与优化作为一个整体来考虑,才是系统软件有突破的基础。例如,我提到的:为什么Cache指令必须是Priviledged?为什么Pseudo-LRU算法是default的?这都是App与OS与CPU割裂的产物。。。It’s time to make a change…】 | |
雁过留声
“OSDI2010—众核(Many Cores)环境下Linux的可扩展性研究”有33个回复
可能跟虚拟化的考虑有关吧
Application Aware OS 如何保证 APP 是 good boy? 例如 如果有一个 bad guy 占有了TLB 的某几项,这样对它来说是好事,但是从系统对角度来说是不公平对.
pplication Aware OS 最终还是只能使用在 面对APP对特定系统,而不是 linux/WIN 这样对通用系统. 我想首席对出发点也是对于 特定对系统而言吧.
这个slides举的例子是linux,可以说是通用操作系统。但是说application aware os有点名不符实,os is a part of application。里面没有一个地方是application的改动,也就是说,在application 的programming model里面,很少考虑到os的限制。是os不能满足application的需求,如果去掉os,让application自己去跑,是不是能够达到最高性能?这里只有优化,说application aware optimization还差不多,从os角度来说,并没有什么特殊的东西。
做个广告,计算所的GenerOS,也是研究多核下OS扩展性的问题:
http://asl.ncic.ac.cn/generos/
感兴趣的可以跟http://asl.ncic.ac.cn/yuanbor/联系。
不知道 chrome os是个什么玩意,针对tcp/http/browser优化的系统?
chrome os是google的瘦终端,插入m$腹地的第一刀
个人觉得os的application-aware和”保守”并不矛盾.它只需要提供更featureful的service给ap.至于某个bad-guy的application用了这个service会对系统造成不公平的bad influenece本来就是整个系统工程师的责任.rtos不一直是这样么?使用rtos的工程师必须思考哪些任务是有硬实时需求的,哪些只是软实时需求的;怎么规划任务.而rtos本身只需要提供能创建硬实时需求的任务的机制即可,即保证良好的xx delay满足期望值.
chromeos可不可以认为已经fail了.感觉太激进,市面还不怎么接受.要靠android,ios过渡一下才行
TILERA公司的CTO Anant 在MIT搞一个叫FOS的东东,http://groups.csail.mit.edu/carbon/?page_id=39
The requirements of application aware OS are:
1. OS should be reconfigurable. I.e., an application can easily turn on/off services;
2. A service should be QoS aware, i.e., if a service requires 50% of CPU and 60% of cache, the OS scheduler should be able to meet the QoS requirement.
3. OS kernel should be lock-free as much as possible to enable high-performance implementation. Please read the recommened paper and see how much optimitions were done on removing locks
我对Application Aware OS的一些定义:
1. Application is able to define and submit resource requirements with formal methods down to OS, CPU as well as interconnect level.
2. An “Management Priviledge/Mode” is to be provided from OS/CPU level, besides the traditional User/Kernel Mode.
浏览一下摘要,结论似乎不怎么有趣。我相信有人会给SGI的大型ccnuma机器移植Linux,不跑好好的。这班人弄几十个core评测一下能获得多少Insights?得弄1000core以上的Linux扩展研究还有点味道。
sigh…
在Application Aware OS这种模式下,Page Coloring就可以进系统了。另外,我想是否可以提出一个概念和机制:Application Coloring。
换言之,通过一套indexxing,例如可以从新编码PID,从而把PID的某些bits来做index。。。从而影响OS and also CPU,Cache的控制能力。
希望我的idea不要被什么MIT或CAL的大师通过弯曲评论抄袭。。。
首席和Multithreaded的一些想法确实都能在虚拟化中找到一些影子
通过在通用OS和CPU之间新添加的这个虚拟层,能做很多事情。
Chrome OS应该就是把OS的所有都搬到一个浏览器中去。
TO #12, 这篇文章要精读,不要小看它的影响。 如果里面讲的都会了, 办个咨询公司一定赚大钱。
TO #15
有这么强
经过市场宣传,Chrome OS就很容易被误解了。Chrome OS其实就是一个移动瘦终端。技术点在沙箱和安全这块(native-client)。还有一块是remoting,也是和远程终端相关的。Chrome OS并没有提升整体系统的性能,只是采用了多线程渲染技术。在系统足够简单的条件下,让CPU/GPU尽最大可能都用来渲染网页。这在工程上有挑战,但学术上可能就是很平常了。
见过一个和application aware os有一点点相关的例子。在ARM平台上要优化memcpy性能。于是有人提了个patch,让用户空间的软件可以控制L2 CACHE。当memcpy用了这个接口后,性能果然又向上提升了一点点。
前面Shuyong提到沙箱与安全,想起Google的开源项目NACL,更新频率很高。
放在Google的所有开源项目中来看,NACL的价值是什么,是否为Google眼中干瓷器活的金刚钻?
application aware vmware就能做到啊,除了上面跑的vm,还能跑app的,资源分配调度在hypervisor里头现成的。Chrome OS把app都运行在Chrome里头,这个地位跟hypervisor很像啊,也很容易实现qos吧。极端的情况,每个vm只跑一个app,从hypervisor看起来,它就能为不同的app(即不同的vm)提供不同的服务啊。所以说vmware和google要动windows的根基的。
微博上的一些讨论,把SNS功能做到OS里面,这算一个大的Application Aware OS或者Application-Oriented OS概念吧?在智能手机上有大文章可做,比如跟小蜜打电话聊天的时候老婆突然打过来,OS协助Appl设个trick把老婆骗过去。。。
我是2006年在清华FIT首次提出Application Aware 调度/OS的。希望将来我成为这个领域的鼻子,sorry,鼻祖。
当时应该是讲了整个的结构框架。但现在楞没有胶片了。不知在哪里了。。。
这里最大的问题是App的语义必须通过一种Formal Methods来表达。。。要涉及一下形式语言的东西。然后在调度中体现。
另外,OS的调度的思路要扩展。决非简单的CPU时间,要对fabric,bus,interface都进行arbitrion。。。这才是系统调度,而非经典的CPU调度。
刚刚在CSDN上看到,冯的计算机体系架构不适合多核心,提出了新的计算体系架构,首席有何高见.
经典的内核功能子系统划分是:进程调度,内存管理,文件系统,设备驱动和网络。这些模块之上就是系统调用了,如果要设计一个Application Aware OS,我的理解是在系统调用和这些单独的功能模块之间再加一层抽象,如首席说的系统调度,可以根据Application的需求来总体协调系统硬件资源。
Linux内核的一些实时扩展包比如RT-Linux和Xenomai,应该有点这个RT Application Aware的意思,之前弯曲的关于手机虚拟化的文章的OKL4则是一种VM Application Aware了,不过这两种形态都是在硬件之上加了一层自己的内核,来托管通用操作系统的内核,RT跟VM的需求需要走特别的通道,这对于应用的开发者来说不是很友好。
如果把软件视为硬件的用户,那么用户面临的最大的需求我觉得是数据一致性问题,如果能够在保证性能的前提下智能的解决掉数据一致性问题,那就很牛了。
这个需求很初级,但很务实,全都推翻连OS和软件都要大规模的修改,我觉得有些不够务实。
关于首席的application aware OS,
现在的软件在设计的时候的确会有这样的问题,调度问题是个很重要的问题,
如何充分的发挥硬件的性能,是设计调度的目标,但目前这种简单的调度机制完全做不到这点,尤其是多核出现之后。
首席的application aware OS出来之后,很多公司就不需要深度的去修改/定制OS了。OS出来后,软件加入少许代码,重新编一下,性能就提高不少的感觉应当是很爽的。
从Application Aware所需要的支撑信息方面说,LLVM好象具备提供这种信息的能力。感觉剩下的是必须建立一个具备处理这些信息的能力,让OS能够根据Application过往的静态/动态信息,来决策该如何给Application分配资源为最优。
这里面,有些模式匹配的味道。
这个,跟人在某方面已经锻炼到具有出类拔萃的才能很相似。一方面需要天生的素质gifts,加上在长时间里刻苦反复训练(work hard)里总结,前者为静态信息,后者为动态信息。
当然,金庸还给了Application Aware另一个模式:通过其它Application功力来提升自己。曰 灌功!
@EetyChen,同意,让app本身来决定什么时候该请求更多资源或者该通知内核改变调度算法了,这个对app开发者的要求太高了点。而且app通过什么来判断它需要影响系统资源调度了呢?通过cpu/memory/network bandwidth的占有率?与其开放这些占有率给app来查询,还不如在kernel级别进行监控和动态调整,这样更安全。但是app总能反馈点什么,比如,app对有多少transaction比kernel清楚,当tranaction急速上升的时候,最好app有权修改capacity number,使得kernel能调整app资源使用的上限值。
对vmware的东西不熟悉,不知道是否可以为VM动态调整资源。
@嗣同同乡:我倒觉得让APP自己完成资源请求不是好主意,您已经在说:这些东西在哪里却完成呢?
个人认为把一些编译器的优化功能做在OS里面,可能会是选择之一。
还是拿“人”来说事。在某个设备上的Application就如何同个具备的“社会人”:出生(安装)时就是一个独特的个体了,成长(每次运行)的过程就是为后续积累(LLVM收集动态运行信息)经验的过程。在某类事每重复一次(Run),就为下一次更轻便地处理积累了经验、信息与能力。
与此相反,现在系统上的Application,无论哪一次的Run,均跟刚出生的人一样,除提出基本暖饱需求外,不会提供任何关于如何才最好的决策信息。这,是因为系统本身没有收集它们呀
越扯越远了,再扯开,又会出“大师”了。首席关注的还是怎么量化和形式化,不是这些事实而非,感觉良好的东西。
to 18楼
NACL的资料很少。这也是秉承GOOGLE的一贯风格,我开源给你看,但我不会解释,看看谁更聪明:-(。也许ChromeOS在产品定位上要悲剧了。但NACL还是有些新意的。我只是看了下面的几个文档和代码的changlog,没有看代码。有错误请指正。
Native Client: A Sandbox for Portable, Untrusted x86 Native Code
http://nativeclient.googlecode.com/svn/trunk/src/native_client/documentation/nacl_paper.pdf
中文版
http://www.cnblogs.com/phinecos/archive/2008/12/12/1353816.html
Google’s Native Client goes ARM and beyond
http://www.h-online.com/open/news/item/Google-s-Native-Client-goes-ARM-and-beyond-957478.html
带有两个文档
Adapting Software Fault Isolation to Contemporary CPU Architectures
PNaCl: Portable Native Client Executables
第二个文档描述了今后的发展方向:用LLVM做一个虚拟机,运行时再解释成本地代码。
NACL在LINUX上的实现原理是采用ptrace系统调用,把ChromeOS变成了GDB,从而可以控制在其中运行的软件。对于老的应用,ChromeOS主要是监视特权指令(包括系统调用接口)与重新映射的虚拟地址(?没有看到资料和代码,想当然尔),对于新的应用,ChromeOS提供NACL-GLIBC/TOOLCHAIN,主要做的事情也是前面的事情,从而让软件在受控的沙箱里面运行。
我理解OS应该要做的3件事情:
1) 提供一个软件可用的受限环境。
2) 给合作的软件提供系统服务。
3) 惩罚捣蛋的家伙,或者杀死。
从这3点看,NACL的价值就在于使Chrome从Browser变成了真正意义上的OS。这样OS的层次也变厚了,在用户空间的服务可扩展行很好,崩溃也不会影响到底层。
至于Application Aware OS,可能更适合real-time OS。RTOS以前是基于CPU性能的调度,后来发展到基于设备带宽的调度(不知道实用没有?)。相当来说RT应用模型固定,比较容易实现Application Aware OS。像LINUX这样的分时系统,可能要更多的考虑变化的应用,很难总结和实现Application Aware Model。
LLVM不是VmWare的东东。按下面Paper,运行时优化是其设计的初衷之一:
http://llvm.org/pubs/2004-01-30-CGO-LLVM.pdf
@shuyong:THKS。资料很全很给力
LLVM的bitcode是怎么回事?
把OS看成一个社会,把APP看成一个个人,APP决定资源分配,那不就是共产主义社会了?