星期日, 11月 25, 2012

用 tpcc-mysql 測試 LSI 的 Nytro MegaRAID NMR 8100-4i

先說結論,這是張不錯的 RAID + Flash 加速卡。

十一月初的時候合作的 SI 廠商丟信件來,問我們對 LSI 的 Nytro MegaRAID Application Acceleration Card 有沒有興趣。架構上就是本來的 RAID 卡加上 Flash Cache,原廠說可以快 10 倍。

我的慣例是先問價錢,價錢在可能的範圍才會測試。所以就請廠商提供價錢:(因為是建議售價,這邊就直接貼出來了)
8100-4i 100GB/s SSD 建議售價NT$62,900
8110-4i 200GB/s SSD 建議售價NT$93,900
8120-4i 800GB/s SSD 建議售價NT$239,000
看了看價錢覺得 8100-4i8110-4i 應該還可以,就借 8100-4i 了。

測試的方法是以 MySQLInnoDB 為主,可以參考「用 tpcc-mysql 測試 MySQL InnoDB 效能」這篇。

硬體設備是 Intel Xeon E5620*2 + 8GB RAM,用 8100-4i 接四顆 Seagate SAS 15KRPM 300GB 硬碟跑 RAID1+0。Flash 部分是兩顆 50GB SLC Flash,跑 RAID1 後掛到本來的 RAID1+0 加速。

軟體是 Ubuntu 12.10 (64bits),MySQL 是跑 Percona Server 5.5,調成與 production 相同的 my.cnf

首先是 W=100,測試資料 10GB 的情況:
  • 有 Cache:
    • 16 threads:5443.300 TpmC
    • 32 threads:16247.400 TpmC
    • 64 threads:21203.900 TpmC
    • 128 threads:23206.100 TpmC
    • 256 threads:20845.500 TpmC
  • 沒有 Cache:
    • 16 threads:1080.500 TpmC
    • 32 threads:1434.100 TpmC
    • 128 threads:1304.800 TpmC
再來是測 W=1000,測試資料 86GB 的情況:
  • 有 Cache:
    • 64 threads:800.367 TpmC
    • 128 threads:1270.367 TpmC
    • 256 threads:1053.467 TpmC
  • 沒有 Cache:
    • 64 threads:443.567 TpmC
    • 128 threads:348.133 TpmC
    • 256 threads 在最後 Stop threading 的地方一直跑不完,重跑三次都一樣。
第一個測的是資料量超過 RAM,但還沒超過 Flash 大小。第二個測的是資料量超過 Flash 大小的情況。

可以看出來當超過 RAM 時增加的效能很不錯。

星期五, 11月 23, 2012

用 tpcc-mysql 測試 MySQL InnoDB 效能

因為跟廠商借了張 NMR8100-4i 要測試效能,而這張有兩個 50GB 的 SLC NAND Flash,想要跑看看如果拿來給 database 用的效能如何。

TPC-C 是用來模擬線上交易服務所產生的資料庫 query 藉以測試效能 (另外還有 TPC-ETPC-H 是測試不同面向)。而 tpcc-mysql 則是 Percona 維護的 open source 專案,專門拿來測試 MySQL 的效能,面向則是跟 TPC-C 接近。

所以就決定拿 tpcc-mysql 來當測試工具 (因為 Percona 的關係)。

建議第一次玩的人可以在 AWS EC2 上開一台 Ubuntu server 玩看看,反正爛掉可以重來,不用太擔心要還原...

首先先安裝 bzrbuild-essential 以及 libmysqlclient-dev,然後將 source code checkout 下來:
# apt-get install bzr build-essential libmysqlclient-dev# cd /tmp# bzr branch lp:~percona-dev/perconatools/tpcc-mysql
checkout 後要先上這個 bug report 裡面提供的 patch,雖然標題是 9.04 64bits,但在 12.04 64bits 下還是沒修正:「tpcc_start core dump on Ubuntu 9.04 64bit」。

修正完成後直接編就可以了:
# cd src# make
接下來的東西可以看 README 裡的說明。

首先先建立 database (我取 tpcc1000),然後再把 create_table.sqladd_fkey_idx.sql 倒進去。

然後用 tpcc_load 產生資料塞進資料庫:
# ./tpcc_load 127.0.0.1:3306 tpcc1000 root rootpassword 1000
上面這是單一 process 在塞,可以考慮用 load.sh 同步塞 (速度快很多,不過 script 寫死用 root 塞,密碼是空的,你可以自己改裡面的內容):
# ./load.sh tpcc1000 1000
我自己測試發現 W=100 約 10GB 資料,W=1000 約 86GB 資料。測試的時候要注意有沒有超過 memory size。通常是 fit memory 測一次,over memory 再測一次。我的例子是測 fit flash size 一次,over flash size 一次。

第一次倒測試資料進去的時候,我通常會先調整 my.cnf,讓他不要每次 flush to disk,這樣寫入速度會快很多。

雖然說快很多,W=1000 的情況下我也跑了八個小時 I/O bound 才產生出 86GB 資料。

倒完資料後要把 my.cnf 改成要測試的設定,然後重跑 mysqld,接著跑 tpcc_start 實際測試:
# ./tpcc_start -h127.0.0.1 -P3306 -dtpcc1000 -uroot -prootpassword -w1000 -c32 -r 60 -l3600
上面的 -c 是 thread 數量,-r 是 warmup 時間,-l 則是測試的時間。這個例子裡會 warmup 60 秒,再加上 3600 秒的測試 (一小時)。

最後他會給你 TpmC 數字,這數字愈大表示效能愈好。

大致上就是這樣,話說回來,NMR8100-4i 這張卡帶來的效能不錯耶...