從Linux核心升級的必要性說開去

來源:互聯網
上載者:User

標籤:使用   io   for   問題   re   代碼   

Linux核心更新超級頻繁,但是有必要時刻升級嗎?
個人感覺沒有必要,但是你要時刻關注新特性列表,然後把自己的核心升級到離最新版本差一兩個月發布的版本而不是最新版本,以保證穩定性,因為一兩個月的時間足夠多的慧眼會發現足夠多的問題,既然自己不是Alan Cox那個梯隊的大牛,最好不要在自己的生產版本上使用最新核心,當然,做實驗或者Just play例外。
       為什麼要升級核心?是的,很多人並不同意這種觀點,可能他們認為使用核心提供的最持久最穩定的介面就已經足夠,多數的定製特性需要自己在使用者空間開發,當然這也符合UNIX的哲學,並且,他們認為使用者態寫自己的so而不是bash,python指令碼會提高自己軟體的競爭力,因為你看不到原始碼,一個so就能實現OpenVPN的負載平衡,你又不知道他是怎麼做的,所以這種神秘感的背後,人們會認為其技術及其高深。反之,如果使用了核心提供的特性,他們便會認為這種技術誰都可以使用,並不是自己獨佔獨享的,做出來的東西便失去了競爭力。
       這種觀點是徹頭徹尾錯誤而且及其錯誤且幼稚的!
       關鍵不是你保留了多少別人不知道的技術細節,關鍵在於你能多快推出一個可以使用的五髒俱全的最簡版本,並且能以多快的頻率持續更新,持續最佳化,而這一切很大的分量上並不是你自己閉門頓悟的,而是來自使用者的反饋。快,才是根本!
       怎麼才能快?簡單,能不自己寫的就直接拿來,能利用的現成特性就直接用,這樣就節省了自己很大的工作量。要把心思花在如何簡單地擴充功能滿足需求上,而不是花在鑽研某個技術細節上。難道你用C寫so的時候,不也是調用了人家C庫以及第三方(甚至是你的同事寫的)庫提供的API嗎?這不也是拿來?你隱藏的僅僅是如何組裝這一切的細節,而這隻是一條路而已,沒人在乎你是如何將組件組裝成功能的,使用者在乎的是可以使用。
       舉例來講,我在Linux 2.6.32核心上吭哧幾個星期也搞不定如何讓多個OpenVPN進程共用一塊TUN網卡,事實上我改寫過TUN驅動,但是沒有經過穩定性壓力測試,所以能不能用還不知道,我所完成的可能僅僅是可行性預研罷了,後來由於沒有項目或者個人原因推動,這種成果也只能停留在紙面上。但是那畢竟消耗了我的時間和精力,雖然我沒有佔用我的工作時間(到了後期就不一樣了),那個時候老婆和女兒又長期不在身邊,就我自己在家,我下班後或者周末有的是時間,但是畢竟因為搞這個東西讓我直到現在還欠了幾部關於古羅馬的紀錄片沒有看!我花了很長時間研究如何?UDP服務的並發,《UNIX網路編程》上的方案也看過,對於OpenVPN這樣的服務而言根本不切實際,我想過通過fork讓子進程繼承父進程的UDP描述符,但是會有驚群問題,我知道有SO_REUSEPORT這個option,但是Linux的實現並不能滿足我的需求(這是實現問題,而不是介面問題),於是我又花了很長實現寫出了UDP多連接埠的負載平衡核心模組,同時想出了利用iptables的random DNAT方案,然而只要我將核心版本升級到3.9.6這個版本或者以上,所有問題都解決了,我只需要在UDP socket上設定一個SO_REUSEPORT選項即可,同時我也不再需要寫代碼了。
       高版本的核心具有三方面的效用,更高效,更多新的特性,曾經bug的修複,但是對於新引入的特性,可能會引入新的bug,不過你僅僅需要謹慎使用新特性就可以了。舉例來講,我實際中會使用到的功能,比如TCP的Fast open,網路的命名空間,多隊列的TUN網卡,這些在2.6.32核心上就不支援(命名空間有是有,但是介面使用時太不方便)。你是想花一月時間自己寫一個多隊列的TUN驅動呢?還是希望有一個直接可以用的呢?誠然,高版本核心內建的TUN驅動不是你寫的,不能代表你的實力,不能給你帶來競爭力,但是你的目的決不僅僅是用上一個多隊列的TUN而已,你的目標可能是搞一個另類的OpenVPN,別人不曾想到的那些易用的功能,你自己提煉出來的可能的新的需求,這些才是競爭力,而不是其實現。我通過阿皮亞大道到達羅馬,而你輾轉阿爾卑斯山,是的,你比我更能體現什麼是力量和毅力,但是,我先到了。
       升級核心有什麼問題呢?沒有免費的午餐,升級核心也不例外。升級後,所有的應用軟體還能正常嗎?這就是說,兩個版本的核心的API規範變了嗎?一般而言,相容性是核心API的本質特徵之一,可是卻不是絕對的,萬事都不絕對。因此,不到出問題的時候,你可能永遠都不知道它有問題,你能很容易證明一件事情是錯誤的,但是卻很難證明它是正確的。既然這樣,那還怕什麼,升級是唯一的選擇,因為即便你不升級,你也不能證明現在的核心和應用程式之間的配合就一定沒有問題,雖然它們至少經過了測試,但是你難道不能在新核心上做同樣的測試嗎?不能因為懼怕錯誤而停止前進。
       也許你可以堅持所有東西都自己開發以保持自己的原創性以及競爭力,同時小心翼翼守護自己的戰果,生怕被別人搶去,並心甘情願為以上所有這些付出成本,因為每個人都是這麼乾的。但是我卻堅持我的觀點,四處搜羅線索,最小化工作量滿足最大的需求,東西可以不是我做的,但是一定是我交到你手上的。Linux核心是多麼大的一座寶庫,隨時都有新的東西供你使用,你可以使用它的最新的介面實現新的想法,你也可以抽取它的內部演算法,迄今為止,我使用過很多從Linux核心拿來的演算法,比如嵌入式list,hlist,比如路由尋找的hash演算法,trie演算法,紅/黑樹狀結構,AVL樹,radix樹等容器,還借鑒其CFS以及O(1)調度演算法實現過一個訊息輸出系統,從Linux核心說開去,任何的開原始碼其價值不僅僅是最終形成的軟體本身的自由使用分發,它內部實現本身就是一座寶庫,你可以從中得到很多的東西。不過,僅僅拿來是無恥的,必須保持一顆時刻分享的心。升級核心的意義就在於,在你眼前,很多的好玩的東西讓你可以所見即所得 (WYSIWYG),不管是工作中,還是平時的周末折騰。當然如果你是一個企業的總監層級的人,或者你有深深的包袱,可以將我所說的當成廢話一堆,因為你可能有更重要的因素要考慮,比如客戶升級之類的,比如相容性之類的,而不僅僅是圖個純技術性的痛快。但是即便對於這些高大上的所謂圈子正中央的人,如果你已經擺脫了包袱,也請考慮一下我的觀點,時刻保持最新。
PS:我為何學不會Python
學不會嗎?也許。不想學嗎?不。人們都說Python簡單,但是我為何好幾次都沒有系統地學習它。因為我把關注點集中在問題本身而不是如何?它上了。我想通過買一個樹莓派把家裡的電視機改成網路播放器,同時用Python實現管理UI,通過這麼一個動作來學習Python,我本以為做這麼一個UI可以讓我掌握Python,然而,我一心想早日通過我的電視機給小小放愛探險的朵拉,於是我在網上找到了現成的代碼,複製粘貼,少量修改,任務很快完成了,Python沒有學會...我很沮喪,可是小小卻很高興。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.