今天,我拜读了一下张颖星和吴庆波的论文"Multithreading in the Kylin Operating System for High End Computing"[1],这篇论文最初是发表在2005年亚太地区第八届高性能计算国际研讨会的记录里,收录在IEEE了。
张颖星和吴庆波的这篇论文主要讲述的是麒麟操作系统是如何为了高性能计算而构架并实现多线程技术的。这篇论文也是比较正式的介绍了麒麟多线程库Kyth,不过从结构上看,是采用的KSE的构架。
我把这篇论文的目录摘抄如下。
|
Multithreading in the Kylin Operating System for High End Computing
Zhang Yingxing Wu Qingbo School of Computer, National University of Defense Technology, Changsha, Hunan, P.R.China willy_young@hotmail.com, wqb123@263.net
1. Introduction
2. Background and Related Work 2.1 M:1 model (ala FreeBSD's libc_r) 2.2 1:1 model (ala Linux's LinuxThreads) 2.3 M:N model (ala Solaris Multithreading) 2.4 Scheduler Activations
3 Multithreading in Kylin 3.1 Kylin threads Architecture 3.2 Kylin Multithreading Implementation 3.2.1 Userland-scheduled entities and Kernel-scheduled entities 3.2.2 Communication Mechanism 3.2.3 Userland thread scheduler and kernel scheduler
4 Evaluation
5 Conclusion References |
不过看完之后我感到有些似曾相识,所以,我又一次拜读了FreeBSD的内核开发人员Jason Evans和Julian Elischer的关于介绍FreeBSD内核Kernel-Scheduled Entities - 内核调度实体(KSE)的文章"Kernel-Scheduled Entities for FreeBSD"[2]。
我把这篇文章的目录摘录如下:
| |
Kernel-Scheduled Entities for FreeBSD
Copyright © 2000, 2001 by Jason Evans Copyright © 2002, 2003 by Julian Elischer
1. Background
2. Threading Architectures 2.1. Userland (ala FreeBSD's libc_r) 2.2. Process-based (ala Linux's LinuxThreads) 2.3. Multi-level (ala Solaris's LWPs) 2.4. Scheduler Activations
3. Kernel-scheduled entities 3.1. Operation without upcalls 3.2. Operation with upcalls 3.3. APIs 3.4. Kernel Scheduler 3.5. Userland threads scheduler 3.5.1. Temporary priority inversion 3.6. Initialization and upcalls 3.6.1. Per-upcall event ordering 3.7. Upcall parallelism 3.8. Kernel scheduler 3.9. Summary
Glossary Bibliography |
看完之后,我感觉无论从结构上,还是内容上,这两篇文章都比较相似。
首先,是这两篇文章都在第2节依次介绍了FreeBSD的libc_r,Linux的LinuxThread,Solaris的LWP和Anderson的Scheduler Activations。
本来二者都是介绍多线程机制,同样的介绍了这4个多线程构架无可厚非,可是我们需要注意的是时间。Jason Evans的文章是在2000年的时候发表的,后期Julian Elischer在2002,2003进行了补充和完善。那个时候,FreeBSD的主流版本还是4.x,那时还主要是以老的libc_r为主;而Linux也在2.4.x的版本使用的LinuxThread结构。因此Jason拿libc_r和LinuxThread来同FreeBSD的KSE比较理所应当,当时更新的技术还没有成为主流。
而张颖星和吴庆波的论文,则是发表在2005年。在Jason发表文章后,在张颖星和吴庆波发表论文前,发生了几件事。首先是Linux随着2003年12月2.6版本的发布而开始采用Native POSIX Thread Library(NPTL)而放弃使用LinuxThread了,然后是FreeBSD在2004年初开始默认采用KSE构架了,而不再推荐使用libc_r了。在这种情况下,还用FreeBSD已经不再继续推荐使用的libc_r和Linux已经开始淘汰的LinuxThread来比较,似乎有些不合情理。
其次,张颖星和吴庆波的论文中第3节中所叙述的KSE机制和Jason和Julian所描述的KSE的机制基本上是一样的。除了用户模式下稍有差异外,其它的和FreeBSD的KSE很相似。应该说基本一样,我没看出哪块儿有特别大的差别。
可以肯定地是,张颖星和吴庆波的这篇论文很大程度上参考了Jason Evans和Julian Elischer在2000到2003年间所发表的"Kernel-Scheduled Entities for FreeBSD"。关于这点可以大家从论文的Reference中看到对Jason文章的引用。而且设计和实现也很大程度的参考了FreeBSD的KSE,这点可以从两篇文章对其各自多线程机制的论述可以看出来。
但是,张颖星和吴庆波在论文摘要中所表述的却不是这样,文章摘要中说
| |
| The work is based on the scheduler activations kernel interface proposed by Anderson et al. |
这篇论文并不完全是基于Anderson在1992年发表的"Scheduler Activations"[3]中所描述的那样,准确说这篇论文阐述的方法是基于KSE的kernel interface的,比如其中提到的系统调用kse_create(),在SA中就没有,而在KSE中就有(当然这个系统调用也同样出现在FreeBSD的内核[4]),而KSE确实对SA进行了改进。所以我觉得比较严谨的说法应该是
| |
| The work is based on Kernel-Scheduled Entities interface for FreeBSD proposed by Jason Evans and Julian Elischer |
这样说才更尊重原著。
张颖星和吴庆波的论文同Jason的文章所不同的地方,是比Jason的文章增加了第4节 评估。在评估中评测了Kyth(或者可以理解为KSE)和libc_r和LinuxThread的性能差异。
我们知道,这片这篇论文发表时FreeBSD的KSE早已成为标准配置并流行很久了,而且我们还知道,张颖星和吴庆波一定是阅读了Jason的文章,不然不会将Jason的文章放到自己论文的Reference中,但是却回避了提及FreeBSD中的KSE实现。也就是说,我们可以确定存在这样一个事实,就是张颖星和吴庆波明知道FreeBSD实现了KSE很多年,并且论文的结构也参考了Jason那篇介绍FreeBSD KSE的文章结构,可是,写论文的的时候却(有意的或无意的)回避了这些事实,既没有提及Jason Evans已经发表过关于KSE机制的文章,又没有提及FreeBSD中已经实现了KSE很长时间了。这点确实令人不解。
也许是我没有能够完全的领会这两篇论文的精髓,所以才会误认为二者非常相似。因此,我希望请这篇论文的作者,国防科技大学的张颖星先生和吴庆波先生,来为我们解释一下这两篇论文异同点。
1、这两篇论文各自所叙述的多线程机制的差异在哪里?
2、麒麟的多线程库Kyth和FreeBSD 5.x中的KSE有多少差异?又有哪些是相同的?
3、Kylin中是否使用了FreeBSD的KSE的代码来协助Kyth的实现?
References
[1] "Multithreading in the Kylin Operating System for High End Computing", Zhang Yingxing, Wu Qingbo, 2005
http://www.dancefire.org/file/Multithreading_in_the_Kylin_Operating_System_for_High_End_Computing.pdf
http://csdl2.computer.org/persagen/DLAbsToc.jsp?resourcePath=/dl/proceedings/&toc=comp/proceedings/hpcasia/2005/2486/00/2486toc.xml&DOI=10.1109/HPCASIA.2005.54
[2] "Kernel-Scheduled Entities for FreeBSD", Jason Evans and Julian Elischer, 2000 - 2003
http://www.aims.net.au/chris/kse/docbook/
[3] "Scheduler Activations", Anderson, et al., 1992
[4] "FreeBSD KSE man page"
http://www.freebsd.org/cgi/man.cgi?query=kse&apropos=0&sektion=0&manpath=FreeBSD+5.0-current&format=html
发表于 @ 2006年05月12日 03:52:00|评论(loading...)|编辑