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]