power平台作為ibm的企業級平台,其穩定性和高效能在業界尤其是大型金融企業有着良好的口碑,mariadb作為mysql的重要開源分支,也對ibm power8平台進行了适配。
很幸運我拿到了一台power8的機器,在linux on power上成功編譯了mariadb 10.1版本,不過還沒有拿到同規格的pc伺服器用于對比,是以本期我先介紹一下mariadb on power的一些資訊,下期月報我會拿出實測對比資料,并且分析一下mariadb在power平台和x86平台上關鍵路徑的效率。
與我們常見的x86平台不同,power平台是risc架構,而intel的x86是cisc架構,早期的mac也是采用powerpc。
risc相對于cisc,把主要的設計放在最常用的指令上,盡量使這些執行執行更加簡單高效,對于不常用的指令,通過組合指令來完成。是以在實作特殊任務時,risc會比cisc更複雜,但是因為risc指令簡單,可以更輕松的實作更多核數更多流水線來彌補。而且risc單元電路少,功耗低,整體能耗水準會比cisc好很多。
資料庫業務屬于簡單業務,如果一台主機隻運作資料庫,那麼在x86下其實有很多指令集是完全用不上的,是以理論上機關面積更低功耗,更多流水線,更高頻率的power平台運作資料庫會更加高效。
同時ibm也提供了linux on power,并且同時提供了大端、小端兩種模式,而不再要求必須是aix,畢竟linux大部分人會更熟悉。
mariadb遷移到power8平台不僅僅是簡單的修改代碼讓編譯可以通過,當然這也是很重要的。
從 git log 中可以看到,官方針對power和intel平台的不同,例如<code>cache_line_size</code>的差異,intel平台是64,power平台是128。還有<code>memory_barrier</code>上的差異,也會導緻在鎖操作和部分io操作上兩個平台會有差異,mariadb在這部分也做了修改。
另外為了能使用ibm advance toolchain工具集編譯 mariadb 提升效率,也對代碼上做了不少改動以便ibm advance toolchain能使用。
總之看起來一切都很好,針對很多細節都做了針對性修改。
既然廣告看起來這麼好,那麼就親自動手試一下。
在power on linux上我下載下傳了mariadb 10.1.9的源碼用gcc編譯然而報錯了:
檢視了下報錯的代碼行:
storage/innobase/include/sync0sync.ic
storage/innobase/include/os0sync.h
可以看到,隻有在<code>have_ib_gcc_atomic_test_and_set</code>或<code>ib_strong_memory_model</code>至少有一個标簽打開的情況,<code>ib_mutex_test_and_set()</code>中調用的<code>os_atomic_test_and_set()</code>函數才會被開啟。
然而因為rhel6的原因,在power8平台上gcc隻有<code>have_atomic_builtins</code>和<code>__powerpc__</code>兩個宏(更新到rhel7可以解決)。是以就出現了這一幕,<code>ib_mutex_test_and_set</code>中調用了<code>os_atomic_test_and_set()</code>而<code>os_atomic_test_and_set()</code>在頭檔案中沒有被定義。修改很簡單啦,改成用同一個宏判斷就行了。
跟官方開發者溝通後這個fix可以解決這個問題
雖然官方也是有性能測試結果的,然而顯然我們是不能相信官方測試的。是以我還會構造場景針對cpu本身的效能進行測試,下一期大家期待測試結果吧。
最後放兩張官方的測試結果,看起來還是很牛x的!
