天天看點

核心黑客系列之:Robert Love

每個星期,我們都采訪一個核心編寫社群的人,雖然這樣的采訪會很側重技術,但是我們的立足點是為了讓所有人都能接受。本周我們采訪了Robert Love,現在他正在維護“可搶占核心”的更新包和其他一些事。他使用Linux已經7年了,對于現在的核心有很多貢獻。所有這些最後用他自己的話來描述。

記者Jeremy Andrews(以下簡稱“JA”):請談一點關于你自己和你的背景。

Robert Love:我現在是Florida大學計算機和數學系的學生,未婚但有一個很可愛的女朋友。我的程式設計興趣是作業系統和數學/科學計算。

JA:你何時畢業?還會繼續讀研嗎?

Rebert Love:我想繼續留在學校裡讀研究所學生,特别是如果社會經濟狀況還像現在這樣的話。

JA:你何時并且如何開始學習Linux的?

Rebert Love:在1994年,我有了第一台運作Linux的個人電腦,那時還是1.0的核心。這也是我第一次實際接觸一個類UNIX的系統。有我一台386SX電腦(感謝媽媽!)并且安裝了可轉換的Windows 95beta版。随着使用Linux越來越多,我最後終于在2.2的時候完全的轉移到Linux上來,從那時起,我一直完全的使用Linux。 我當時部分的轉移到Linux上是由于一個明顯的原因:我相信Linux是一個強大和強壯的系統,它有很好的應用程式。但根本的原因是我喜歡和Linux系統以及圍繞在它周圍的社群交流的能力。

JA:你能比較一個1.0和2.4核心的不同點嗎?

Rebert Love:如果它們有幾頁代碼是相同的話,我會感到很驚奇的。是以,每件事都不同。

JA:安裝和使用1.0的核心是怎樣的?當時有什麼軟體?

Rebert Love:很幸運,在1994/1995年,Linux發展的很好。當時SLS和Slackware都發行完整版。我最開始使用Slackware2.0。你不得不下載下傳很多磁盤檔案集(disk sets)-也許現在也一樣。我記得磁盤檔案A好像是核心,磁盤檔案N提供網絡支援等等。(譯者:我想那時沒有CD光牒,釋出還是用軟碟的,是以才有所謂的磁盤檔案,也就是一個檔案1.44M) 那時Linux就有網絡,X (XFree86 2.0)也有,還支援很多硬體呢。 從今天看來最大的問題就是缺少文檔,在加上複雜的安裝過程。我記得我怎麼做都不能讓PPP工作……最終我放棄了。如果我可以讓PPP工作的話,我也許那時就轉換到Linux上了。

JA:你做了那些貢獻?

Rebert Love:現在我大多數時間用來維護可搶占核心的更新包上。它允許低優先級的程序被搶占,即使是在核心空間(譯者:現在的核心是不可搶占的,搶占是隻發生在核心空間的工作完成,切換回使用者空間的時候),這樣可以提高體統響應。這個更新包最初是由MontaVista-一個很棒的公司-做的,是以我現在和他們以及社群的其他人緊密的工作。它是一個很有趣的項目。我們的目标是使它加入2.5核心中。 我很随意的,否則……我修改漏洞,做優化。我寫了i815和AMD761 AGP GART代碼。我還維護其他可能加入核心或沒用的更新包。

JA:如果核心可以被搶占的話,那麼核心将發生什麼樣的變化?

Rebert Love:我們使用的模型是當核心沒有被鎖時,允許核心在任何時間都能被搶占。在這種思路的設計下,當使高優先級的程序變為可運作(runnable)的事件發生時,系統将搶占目前的任務并運作高優先級的任務。 我們必須修改在entry.S中的中斷代碼,防止一些情況發生和允許從一個中斷處理程式傳回的時候搶占。但是,就象我們不能允許多處理同時在臨界區(critical regions)内一樣,我們不能在臨界區内執行搶占-是以當保持一個spinlock(holding a spinlock)的時候,我們要避免搶占的發生。低速核心例程(bottom half handler)和排程程式也被修改來防止它們在執行時被搶占。

JA:就目前來說,你認為這個包有多穩定?我在一個單獨的Linux伺服器上作所有的工作,我經常更新到新核心和新軟體。提高整體系統響應時間看上去很吸引人,但是你認為這個更新包可以穩定到可以被“每天都使用(every-day-use)”的伺服器用嗎?

Robert Love:這個包非常穩定。我很自信的建議每個人都使用它。我們有很多使用者并收到了很多回報。我想所有明顯的bug都被改正了。 我現在在我的主系統上就在使用這個包。 好的一面是我們知道設計和實作是正确的。使用我們最近的包,我想我們可以處理任何問題。

JA:你看到系統響應時間提高的有多明顯?

Rebert Love:非常明顯。 系統響應時間有200%的提高。通過這個可搶占核心的更新包,平均系統響應時間現在是1ms,最大到10ms。現在還有降低響應時間的一些長時間鎖,有些長度達到100ms+。幸運的是,它們隻在特别的地方發生,比如“VC切換(switching VCs-譯者:不知什麼意思:-<)”。

JA:還有一個有Andrew Mortan維護的包也要達到同一個目标,你的和他的有什麼差別?

Rebort Love:我們的目标是相同的,那是因為核心代碼是非搶占的。是以,核心會一直運作直到完成或者顯式的自動放棄。如果在核心執行期間,使用者空間的事件發生了,它們必須等到核心完成。這就是我們需要解決的問題,也就是降低系統響應時間的原因。 Andrew的低響應時間包在整個核心中的政策點放置了基于條件的排程調用。這些調用可以有效的允許長時間的核心操作說“我很好心可以讓其他人來運作,有任務需要運作嗎?如果有,運作吧!”這樣會打斷操作,減少這些地方的系統響應時間。 我的這個可搶占核心的包同他的工作機制不同,它通過修改核心本身來允許核心代碼被搶占。是以上面的問題根本不會發生-如果一個任務要運作,它就會運作-并且系統響應也改善了。

JA:最近在lkml上你談到将兩種包結合的可能性,你現在有作這方面的工作嗎?

Rebert Love:這當然值得考慮。因為我們在上鎖期間不能搶占,那麼長時間的鎖就會對系統響應時間造成值得注意的影響。該鎖的操作時間就是系統的等待時間了。 一個解決辦法是像Andrew那樣中斷鎖操作。這就是将他的包融入可搶占核心的部分。或者更實際的辦法,做一個應用了他的包的能意識到搶占的版本,當一個鎖操作時引發的任何一個基于條件的排程程式也許是很有幫助的。 這個方向的一個問題就是确認一個長時間的鎖操作。這是preempt-stats包的作用,它測量非搶占時間并報告到底是什麼鎖産生的。 這隻是關于長時間鎖的一種解決辦法。

JA:核心的那些部分會有你說的長時間的鎖?

Robert Love:控制台層(console layer)曾經使用了一些很長時間的鎖,不過幸運的是Andrew Mortan最近修改了很多。幀緩存(frame buffer)使中斷無效了很長時間-避免向它列印很多東西。如果你卷動了很多次螢幕,你将發現需要等待最長500ms。切換虛拟終端很糟糕。blkdev_close()使用了一個長時間的鎖。一些子產品操作也很耗時。如果VM開始thrashing,将産生很長時間的等待,因為在保持一個鎖期間,它做所有的事。VFS也有一些長時間的鎖。

JA:你的這個包進入核心2.5有多大可能性?會有寫什麼困難?

Robert Love:這将取決于Linus對這個包的評價,其他核心程式設計者的意見。Linus曾經說過他這個主意很感興趣,我希望這有所幫助。 我們有一個很大的使用者資料庫,那也将有所幫助。我們得到了很多回報包括展現其提高性能的基準測試結果。 關于可搶占核心的争論是因為它降低了系統吞吐量(system throughput)。這是很正确的觀點。也是需要我們關注的觀點。現在的測試表明會損失0-5%的吞吐量-我想對于200%的響應速度的增加還是很值得!而且,有時候還會增加吞吐量。不管如何,對于那些任何吞吐量的損失都不能接受的系統,可搶占性核心隻是一個配置參數而已。

JA:開發時你使用的主要工具?請描述一下你的環境,計算機和使用的方法。

Robert Love:我主要的機器是P3-733,384M記憶體,U2W SCSI硬碟。我也有一個IBM的ThinkPad和我較高價的電梯大廈裡各種各樣的老機器。我運作最新的RedHat Rawhide和Ximian GNOME。 我使用vi編碼因為我不想學習其他OS :-) 我一般在X裡,是以我通常使用gnome=terminal和gvim視窗打開我的project。我傾向于先廣泛的看看,如果需要做做研究,然後開始編碼。很少在紙上作設計。我經常依靠lkml和email-我喜歡其他人跳躍性的想法。

JA:你使用其他的作業系統嗎?和Linux相比,你喜歡還是不喜歡它們?

Robert Love:我有一個Windows2000的工作站,和一台運作Irix的老式SGI Indy。除此之外,任何事情都是Linus。我使用Windows是為了Powerpoint,以防AbiWord不能剪貼它。 我最不喜歡其他作業系統的原因就是它們不是open source的。我不是一個free software的狂熱者-雖然我贊成它們的優點,我認為源碼開放和圍繞它的社群是無價的。

JA:你曾經使用open source的BSD作業系統嗎?特别是,你曾經關注過它的核心嗎?

Robert Love:我曾經有一台OpenBSD的機器,但是我把它丢到垃圾箱了。(雖然不是因為OpenBSD) 其他的我所知道的就是學術性的了,我被Matt Dillon在FreeBSD的工作所打動(他寫了VM)。他們的SMPng工作進展的很不錯(在SMP擴充性方面,他們落後于Linux)并且他們甚至在考慮實作一個可搶占核心。

JA:你知道他們傾向于使用何種搶占性嗎?可能像你的更新包,或者像Andrew的更新包,或者是個結合體?

Robert Love:他們考慮一個完全搶占性核心,就象我的包一樣。我不知道對此他們會做了什麼,也許在FreeBSD Core開發組已經被讨論過了。

JA:你對目前2.4核心系列有什麼看法?你認為它很穩定嗎?

Robert Love:我想我們比2.2有很大的提高。在2.3和2.4中完成的工作太棒了。我們做的一些提高,特别是Linus和Ingo作的一些工作真的是棒極了。2.4現在可以完成一些高性能/高擴充性的工作了。 這并不是說在這點上我對2.4完全滿意,我認為拆分Rik的VM是個錯誤。如果Linus想在2.5中嘗試不同的東西,他都可以。在穩定的系列中,我認為我們需要更少的改變。我們不能就這麼丢掉了花在VM上一年多的工作,還有所有的對應文檔和理念。但是看來VM被裁減的很 好。我使用Alan的核心,這個核心還堅持Rik的VM,而且我們正在為提高它而努力。誰知道當2.4的核心被傳遞到Alan手上以後,我們會有什麼樣的核心。

JA:如果你遇到突然改變核心,你會如何處理?

Robert Love:首先,也許核心會變成不知道什麼鬼樣子,不管我如何抱怨或者其他人如何反對Linus,他不單單是一個不可思議的高手(hacker)而是一個很棒的管理者,Linux需要他。 對于VM的問題,我将跟随Alan上司的2.4核心。測試和文檔化Rik的VM。我想我們需要更好的測試。太多Rik的主意和包都被忽略了。其他包被合并而不複存在了。我們需要一點一點的進行合并VM的工作,同時需要沒有沖突的包,測試和結果。我們現在在Alan的代碼樹中需要這些。 對于2.5,當然了,任何事都在發展。丢棄任何可以丢掉的。我認為Andrea的VM性能很好,可能它更好。It is just a bad time to find out, IMHO。

JA:對于2.5核心,你最希望看到什麼?從這裡你打算何時開始?

Robert Love:當然是一個可搶占的核心 :-) 除了那個,我将繼續探索更好粒度的鎖(finer-grained locking)和整體清除(overall cleanup)。我想塊裝置,SCSI層和控制台層需要重寫。我們關注NAPI and/or 某種形式的中斷扼殺(IRQ throtting)。Ben LaHaise的異步I/O工作合并。Keith的新的kbuild看上去不錯。我期待這所有這些。 我真的認為我們需要重寫tty系統,但是我不知道誰會做這個-我肯定不會做的。 我想沒有人,包括Linus對于2.5開始有一個明确的線索。我最初認為是2.4.0釋出(2001/01/04)幾個月後-可能是3月,或5月,可是現在還這樣,一年又過去了,我猜不到。我懷疑等VM被證明是穩定的并且Alan和Linus可以完全同步的時候,我們将看到2.5.0。我希望這很快發生。

JA:你遇到到Linus嗎?或者其他核心開發者?

Rebort Love:我沒有遇到國任何“著名”的高手。我希望遇到他們,也許某天,在一個會議或是寵物公園吧。

JA:對于希望稱為核心高手的人你有什麼竅門和靈感?

Rebort Love:讀代碼,“玩”代碼(譯者:其實文中多次提到“玩(play with)”這個詞),并且要經常洗澡。對于初學者,O'Reilly有幾本很棒的書(“Understanding the Linux Kernel”-Bovet and Cesati,和“Linux Device Driver 2ed“-Rubine and Corbet非常棒)。但是打開核心的鑰匙還是度代碼。你有整個系統的代碼-讀它,修改它,學習它。 我一年前加入了lkml,但是直到2.3我才第一次真的做出了貢獻。在lkml旁觀(Lurking on lkml)是觀看高手出招的最好辦法,你能學到很多。

JA:謝謝你有時間回答所有的問題,由于這次談話,我一定要下載下傳你的包并更新我的系統

Rebort Love:太好了!請讓我知道它工作的如何并且也同時感謝MontaVista的夥計們(可搶占核心最初的開發者)。 

繼續閱讀