說到個人用的 server, 我是相當有經驗的 XD,從當年念大學開始,就開始把 PC 開著放宿舍連回去或是給同學用,這習慣一直到現在都有,只是設備從自己用的 PC,換到準備專用的 PC SERVER,再到 NAS .. 不過自從開始認真研究 docker, 加上想用 docker 認真的執行一些服務後 (例如這個 BLOG 用的 wordpress), NAS 貧弱的效能問題就被凸顯出來,所以前幾個月才弄了台要被報廢的 NoteBook 當作 Linux Server.. NB 當 server 有很多好處,但是畢竟不是長久之計,而這台 NB 的 CPU 也不怎麼樣,將來也是個瓶頸,於是就一直有在物色其他適合的替代方案,反正沒有立即的需求,就騎驢找馬有空就看看,直到....
前面幾篇,研究完記憶體管理的部分之後,接著就是來看看運算的效能了。這部分的測試方式,我想了很久,最後決定拿出老本行: 平行處理的部分來當作 .NET core 跨平台第二回合的主題!
如果單純只是要將各種平台的 .NET Core 比出個高下,那感覺有點像是拿 benchmark 在賽豬公而已,這樣的話找現成的 C# benchmark 應該比較快。因此,我把測試的目的定義清楚,我想藉由這些測試的進行,一方面了解不同平台的差異,我也想透過測試更熟悉這些環境,還有試圖從測試的結果挖出背後運作原理的不同。所以,上一個記憶體管理的主題,已經達到目的了,不這樣測試我還真的不曉得 Linux 預設會壓縮(?) 為初始化的記憶體… 算是值回票價。
測試完 windows 家族的 .NET Core CLR 之後,接下來就是 Linux 家族了。我挑了兩個環境,一個是標準安裝的 Ubuntu 15.10 server。另一個則是採用大家常用的 Boot2Docker, 它是附在 Docker Toolbox 內的一個元件,有人預先準備好的精簡型 Linux, 預先安裝了 Docker 在裡面。
為什麼要把 Linux 的部分獨立成一篇來說明? 因為 Linux 的環境是這整個測試中,意外狀況最多的一個環境了.. 有興趣的朋友請繼續看下去..
這次 .NET Core 的實驗做完,我看相關的 How To 可以寫一堆了 @@,整個過程中都在挑戰過去很少做的事情,包括 Linux, .NET Core, Docker, 現在連 Windows Container 都出動了.. 不過試完之後一整個充實啊,最後能把預期的結果弄出來,幾個晚上睡不飽是值得的…
接續上篇文章,這篇就把 windows 的兩個平台測試給搞定吧! 先快速交代一下打算當作對照組的 Windows 2012 R2~
記憶體管理,是跟底層平台高度相關的議題。對於 developer 來說,能掌控的部分很有限,developer 能做的動作,不外乎是 allocate / free memory, 頂多對於 GC (garbage collection) 的機制更明確的掌握而已。超出這個範圍以外的部分,就真的只剩下好好處理 exception 的份了…
這次 .NET Core 開源 + 支援 Linux / MacOS, 正好開創了一個新的平台支援,實際測測看,是掌握差異最快的方式。我挖出了當年的老文章探討的記憶體管理問題,在新的平台上驗證。不同平台的差異,遠比我想像的精彩,就順手把它寫成文章整理起來,給需要的人參考。