Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
維護自己的開源專案 EZIO的心路歷程 黃宇強 Date Huang @ COSCUP 2023/07/30
Slide 2
Slide 2 text
⚠WARNING⚠ 基本只講經驗跟故事,零技術內容 時間序也有點忘記了 所以有可能會有一些倒置 2
Slide 3
Slide 3 text
開始前先感謝以下單位 - 交通大學資工系 - 國家高速網路與計算中心 - 以及各路好夥伴 3
Slide 4
Slide 4 text
開始之前幫我的專案按個星 https://github.com/tjjh89017/ezio 4 訂閱,按讚,開啟小鈴鐺!
Slide 5
Slide 5 text
自作孽不可活 5
Slide 6
Slide 6 text
About me ● 黃宇強 Date Huang ●
[email protected]
● EZIO Maintainer ● 不會寫Modern C++,但是用了Modern C++ 6
Slide 7
Slide 7 text
Agenda ● 起源 - 碩士初期 ● Clonezilla整合時期 ● 平原期 ● 崩潰的函式庫大變動 ● 現在 7
Slide 8
Slide 8 text
起源 8
Slide 9
Slide 9 text
交大資工系計中電腦教室 9 這是某日在電腦教室看到的情況
Slide 10
Slide 10 text
10 我們放大一點看看
Slide 11
Slide 11 text
11 幫各位換算一下 879.86 / 60 = 14.664MB/s 插著1Gbps的線,速 度只有14MB/s
Slide 12
Slide 12 text
為什麼? ● 我跟系計中幾個朋友聊聊討論的時候 ● 大家普遍認為硬碟反應速度開始出現速度上的落差 ● 每台電腦速度之間落差太大,所以必須要等最慢的那一台 ● 所以就慢到不行 12
Slide 13
Slide 13 text
總之 ● 總之就開始想這到底是什麼問題? ● 然後想到學長小飛機用Bittorrent來管理一些電腦教室檔案等等的,提 供我了靈感 ● 然後又Google到Twitter也使用BT相關技術的演講 https://vimeo.com/11280885 ● 概念有了,接下來就開始研究這樣 ● 順帶一提,之所以命名成EZIO,不是因為Easy Input/Output,而是某個 遊戲角色,只是後來大家都誤會成Easy Input/Output 13
Slide 14
Slide 14 text
所有東西都是檔案 ● 這邊最初的想法就是,反正所有東西在Linux內都是檔案,那我直接寫 一個寫檔案的軟體,把整個硬碟都做成Torrent,然後幫我把整個硬碟 當作一個檔案傳送過去可不可行? 14
Slide 15
Slide 15 text
最初版 ● 結果是可行的!寫個最初版就做測試了 ● 跟系計中的朋友兼碩士室友芒果王在某個 假日做了個測試來玩玩這樣 ● 雖然帳面上速度很快,但是其實還是有個 問題,我們是整顆硬碟傳送的,Clonezilla則 是只傳送有資料的部分 ● 所以整體來說Clonezilla還是比較實用 15
Slide 16
Slide 16 text
還是遇到困難 ● 一般Bittorrent都是需要一個檔案系統來存「檔案」的,所以如果是要轉 硬碟內容過去,目標的機器上面的硬碟是沒辦法暫存的。因為那個硬 碟就是我們目標啊! ● 那另外就是記憶體能暫存,但是記憶體通常比硬印象檔來的小,所以 沒辦法整包塞上去 ● 那能不能只塞部分進去? 16
Slide 17
Slide 17 text
那能不能只塞部分進去? ● 可以,但是這部分要怎麼確保下一個還原軟體就有足夠資料能夠還原 或是解壓縮? ● 你到底該怎麼確保先傳過去的資料是就是最需要的部分? ● 例如說解壓縮需要傳送順序,那這樣依然跟Multicast一樣,中間掉資 料就必須要重傳,所以並沒有比較好,從一開始用Bittorrent就是為了 要平行化且無序傳輸 17
Slide 18
Slide 18 text
靈光乍現! ● 第一天測試完之後很成功啊,但是劣勢還是太明顯了 ● 所以我當天就在實驗室思考這玩意能怎麼改進,讓他有Clonezilla的優 勢 ● 晚上還真的被我想到一個解方,這邊我不提解法,需要技術細節的,請 讀我的論文或是去找我跟國網中心發表的期刊論文 ● 然後回到宿舍跟芒果王講了一下改進方案的概念之後,我就去睡覺了 18
Slide 19
Slide 19 text
室友會變魔法 隔天睡醒芒果王跟我說他做出來了! 還把partclone的部分code也改好了,但是有幾個bug還沒解 換他去睡覺,我來幫他找找問題在哪了 總之,會變魔法的室友真好! 19
Slide 20
Slide 20 text
室友會變魔法 總之花了點時間跟芒果王把bug找出來修好了之後 那段code就成為了經典,最少持續4~5年沒有人敢去動他 基本上到這邊,我們第一個版本就出來了,而且測試妥當 20
Slide 21
Slide 21 text
系計中 從這版開始,系計中的電腦教室就開始利用EZIO的方式來部署電腦了 從原本的Clonezilla Multicast的方式可能需要三天才能完成 現在變成3~4小時就可以結束,而且成功率上升了 21
Slide 22
Slide 22 text
PoC完後的發想 ● 這時已經開始思考可以拓展到其他的項目上面了 ● 然後找到一篇Mirantis發表的部落格[1]說,他們用Bittorrent方式來加 速OpenStack Ironic的效率 ● 驚為天人啊,但是又很難過有人已經想出類似的東西了 22
Slide 23
Slide 23 text
但是! ● 花時間研究了Mirantis的方案,發現他們使用我們最早期的方案,就是 整個硬碟分割區直接傳送,無論有無資料都傳送,所以效率上還是有 一點差距 ● 而且更關鍵的,方案中是暫時先將QCOW2映像檔暫存在記憶體中,然 後再透過QEMU硬碟工具轉換到實體硬碟上面 ● 所以依然受到記憶體大小限制! ● 簡而言之,我的EZIO方案依然是目前的先驅 23
Slide 24
Slide 24 text
啊~可是 ● 可是整合OpenStack Ironic好麻煩喔,這件事就放著了 24
Slide 25
Slide 25 text
後來發表成果 ● 在Facebook上面發表了成果,結果有朋友直接把國網中心Clonezilla團 隊 ● 然後就開始跟Clonezilla團隊喝茶聊天,然後介紹EZIO的成果 ● 後來開始聊聊整合兩者,畢竟原本我們就有利用到Clonezilla部分的元 件了 25
Slide 26
Slide 26 text
國網中心Clonezilla整合時期 26
Slide 27
Slide 27 text
國網中心Clonezilla團隊 27 ● 國研院國網中心自由軟體實驗室 ● https://free.nchc.org.tw ● 開發並維護再生龍Clonezilla, Partclone, DRBL等等自由軟體 ● Steven Shiau ● Ceasar Sun ● Thomas Tsai
Slide 28
Slide 28 text
快速簡介下國網中心再生龍Clonezilla 28 ● 通常是拿來備份/還原電腦的資料 ● 很多學校都拿來做電腦教室的部署 ● 也有單位拿來做HPC的部署 ● 主要元件分成兩個部分Clonezilla以及Partclone這兩個大項目 ● Partclone是負責分析硬碟使用狀況跟產生映像檔 ● Clonezilla負責剩下的備份還原還有部署
Slide 29
Slide 29 text
美國彈珠台中的Clonezilla ● 順帶一提 ● Clonezilla在業界也是滿常 被使用在業界也是滿常被 使用,例如美國某家彈珠 台的更新包用Clonezilla包 裝的 29
Slide 30
Slide 30 text
Clonezilla大整合 ● 一開始整合也是滿痛苦的,畢竟Clonezilla有既有的設計跟格式 ● 但是這些格式並不相容EZIO的設計 ● 所以開始得先設計轉換模式,然後把Clonezilla的流程也修正一下 ● 已經都忘記花了多少時間跟他們一起調整跟測試了 30
Slide 31
Slide 31 text
Clonezilla大整合 ● 整合完畢之後 ● 幾乎EZIO就跟Clonezilla直接綁定了 ● 因為Clonezilla整包太方便了,原本EZIO要會動還要去包其他東西跟一 堆開發,現在全部靠Clonezilla 31
Slide 32
Slide 32 text
Clonezilla大整合 32
Slide 33
Slide 33 text
33
Slide 34
Slide 34 text
平原期 34
Slide 35
Slide 35 text
平原期 35 ● 跟Clonezilla整合完畢之後 ● 突然的就想說把EZIO專案變成我跟芒果王的論文題目
Slide 36
Slide 36 text
碩士論文 ● 所以變成開始忙跟指導教授們討論 ● 做各種的其他既有方案的研究 ● 做了一堆測試等等等的 36
Slide 37
Slide 37 text
碩士論文 ● 我們倆還真的用EZIO這個題目畢業了! ● 學歷GET! ● 順帶一提,在做這份投影片的時候,還回去翻了下我的畢業論文 ● 還發現錯字😂 37
Slide 38
Slide 38 text
德國 ● 畢業之後,國網中心Clonezilla團隊也拿EZIO的成果去投了個德國研討 會的海報 ● 我也一起就跟他們飛去德國法蘭克福參加研討會了 ● 那時候的德國超熱,差點融化 ● 順帶一提,我當初以為我英文滿爛的,但是發現只要敢講就行了啦,反 正德國人也不講英文 38
Slide 39
Slide 39 text
39
Slide 40
Slide 40 text
40
Slide 41
Slide 41 text
41
Slide 42
Slide 42 text
還發現個超好喝的汽水 ● 據說是可口可樂跟芬達的混合 42
Slide 43
Slide 43 text
43
Slide 44
Slide 44 text
SourceForge的第一次使用者測試經驗! ● 這時候我們收到一個Clonezilla EZIO mode使用者的Bug回報 ● 他描述了他的環境,簡單說就非常的異質,有1G網路的,也有100M的 ,SSD跟HDD混合的環境 ● 這是EZIO首次證明在異質架構下面的穩定跟速度,不然之前都還停在 理論階段而已 ● 總之繼續修Bug,但是第一次有使用者回報,非常感動啊 44
Slide 45
Slide 45 text
TANET 2018年底 ● 指導教授黃世昆教授也把我這篇論文投稿到TANET研討會中 ● 然後也發現了崑山科大的蔡德明教授(鳥哥)也有一位指導學生也發表 了類似的題目,當然就實際內容來說,我們兩個走了完全不一樣的方 向 ● 花了超長時間把該同學的論文整包讀完 45
Slide 46
Slide 46 text
期刊論文 ● 同時間國網中心Clonezilla團隊認為可以就這個主題發一些期刊論文 ● 所以也開始做一堆測試 ● 然後審稿人的一堆問題也一一的重新測試跟驗證 ● 雖然我只負責改改code而已 ● 不過也就這個機會,整理出了更完整的數據 46
Slide 47
Slide 47 text
47
Slide 48
Slide 48 text
48
Slide 49
Slide 49 text
體感上 ● 國網中心的電腦教室品質比較好一點,所以數據看不出來 ● 但是體感很明顯的比Multicast的方案更好 ● 尤其是交大資工系的電腦教室,體感上差超多 49
Slide 50
Slide 50 text
HKOScon 2019 ● 也投稿了COSCUP的跨國計畫,所以2019年的時候飛去香港HKOScon 2019演講相關的主題! 50
Slide 51
Slide 51 text
51
Slide 52
Slide 52 text
52
Slide 53
Slide 53 text
53
Slide 54
Slide 54 text
第二篇期刊! ● 後來我對Clonezilla EZIO的設計提出了一個新的改進 ● 可以不需要製作映像檔,直接把電腦做複製 ● 然後就再多一篇論文了 ● 賺! 54
Slide 55
Slide 55 text
專利 ● 2019年左右,自由軟體桌面環境GNOME被專利蟑螂提出訴訟 ● 國網中心Clonezilla團隊建議我們要申請專利,作為保護自己的方案 ● 我也藉這機會得到了人生中第一項專利發明! 55
Slide 56
Slide 56 text
然後~ ● 又過了很久很久 56
Slide 57
Slide 57 text
崩潰的函式庫大變動 57
Slide 58
Slide 58 text
晴天霹靂 58 ● Libtorrent在這個時期出了2.0版,然後一堆API全部大改動,而且開始大 量使用Modern C++的設計模式 ● 改到我都不知道怎麼辦 ● 然後開始花時間研究,但是同時間已經在工作中了,其實時間很少很 少 ● 我們只好先死守Libtorrent v1.2,所以也就死撐在v1.2版一年以上
Slide 59
Slide 59 text
大改版 ● 因為這件事,還去Libtorrent那邊發問題問作者 ● 還去把Libtorrent相關的code全部都trace一遍 ● 還去讀了一下Modern C++的新東西 59
Slide 60
Slide 60 text
葉家郡(xnum)學長救命 ● 直到我有天在Facebook上面求救,我學長葉家郡(xnum)跳出來救我 ● 葉家郡(xnum)學長是個Modern C++專家 ● 就花了些時間幫我看了下那些C++的部分,以及把框架轉換成新版API 的架構 60
Slide 61
Slide 61 text
葉家郡(xnum)學長救命 ● 學長發現了Libtorrent有POSIX的方式,比較貼近我們當初的設計,改起 來也比較容易,就從那邊下手 ● 也花了些時間,但終於搞定了絕大部分的API轉移 ● 感恩學長!讚嘆學長! 61
Slide 62
Slide 62 text
轉移到Modern C++了 ● 轉移完畢之後問題其實沒有完全解決 ● 後來發現,變成用同步IO的方式在執行 ● 所以效能比當初的還要低一些 ● 所以我就在花了一兩個月時間研究,才終於改成現在的非同步IO 62
Slide 63
Slide 63 text
你以為問題就這些嗎? ● 當初改動成Libtorrent 2.0的時候,實際上還為了更彈性的使用EZIO ● 所以對EZIO做了一系列的使用者體驗的修正 ● 也正因為這些修正更動了EZIO的執行方式 ● 所以也跟Clonezilla團隊花了很多時間在重新調整原本的設計方式 63
Slide 64
Slide 64 text
以為都完成了 ● 原本以為都完成了 ● 結果SourceForge論壇上面又有其他國外使用者直接壓力測試,又用一 個超大的映象檔來測試,然後就炸了 ● 所以又在debug了幾天 64
Slide 65
Slide 65 text
現在 65
Slide 66
Slide 66 text
最近的機會 ● 值得一提的是,我也因為EZIO專案,在Linkedin上面被其他人看到 ● 甚至有位國外的SI廠商,考慮拿EZIO作為方案其中的設計之一 ● 且正在跟我商討合作事宜 66
Slide 67
Slide 67 text
維護 ● 維護就繼續做,遇到bug就解這樣,功能面大概都不會在本體上面做改 動了,大架構掉之後,就滿多設計都能在外部處理了,因為小修改遇到 的Bug也比較容易解決 67
Slide 68
Slide 68 text
未來計畫 ● 未來計畫大概有兩個方向會開始研究 ● 一個是OpenStack Ironic整合方面 ● 另外一個是,利用Kubernetes來製作一個類似Metal3.io的demo專案, 來展示EZIO的火力,順便蹭一下Cloud Native的聲勢 68
Slide 69
Slide 69 text
最後有什麼問題嗎? 69 訂閱,按讚,開啟小鈴鐺! https://github.com/tjjh89017/ezio
[email protected]