はじめに
Igniteの性能測定用に、「Yardstick Apache Ignite(yardstick-ignite)」というベンチマークが提供されています。
このベンチマークはYardstick Frameworkの上に書かれてます。Yardstickはベンチマークを書くためのフレームワークで、クラスター化されたシステムやその他の分散システムのベンチマークを作成するのに利用されています。
Yardstickを使ったIgniteの性能を測定してみます。
以下を参考にしています。
環境
VirtualBox上に以下の3台のサーバを構築しました。
各サーバはCentOS7で、1core、メモリ3GBにしています。
igniteserver1:Igniteクラスタ用サーバ(192.168.10.71)
igniteserver2:Igniteクラスタ用サーバ(192.168.10.72)
igniteserver3:Yardstick用サーバ(192.168.10.73)
各環境にはIgniteをインストール済みです。YardstickはIgniteに同梱されているものを利用するため、環境構築はありません。
Apache Igniteのインストール方法は以下の記事を参考にしてください。
インメモリデータグリッド Apache Igniteを始めてみる(Java)
用意されているベンチマーク
Ignite用に標準で提供されているベンチマークは以下の24個があります。
今回は試しに2~5のベンチマークを実施してみます。
実行するのは、Atomicとトランザクションの2種類×put/put+getの2種類=4種類となります。
- GetBenchmark - benchmarks atomic distributed cache get operation.
- PutBenchmark - benchmarks atomic distributed cache put operation.
- PutGetBenchmark - benchmarks atomic distributed cache put and get operations together.
- PutTxBenchmark - benchmarks transactional distributed cache put operation.
- PutGetTxBenchmark - benchmarks transactional distributed cache put and get operations together.
- SqlQueryBenchmark - benchmarks distributed SQL query over cached data.
- SqlQueryJoinBenchmark - benchmarks distributed SQL query with a Join over cached data.
- SqlQueryPutBenchmark - benchmarks distributed SQL query with simultaneous cache updates.
- AffinityCallBenchmark - benchmarks affinity call operation.
- ApplyBenchmark - benchmarks apply operation.
- BroadcastBenchmark - benchmarks broadcast operations.
- ExecuteBenchmark - benchmarks execute operations.
- RunBenchmark - benchmarks running task operations.
- PutGetOffHeapBenchmark - benchmarks atomic distributed cache put and get operations together off-heap.
- PutGetOffHeapValuesBenchmark - benchmarks atomic distributed cache put value operations off-heap.
- PutOffHeapBenchmark - benchmarks atomic distributed cache put operations off-heap.
- PutOffHeapValuesBenchmark - benchmarks atomic distributed cache get value operations off-heap.
- PutTxOffHeapBenchmark - benchmarks transactional distributed cache put operation off-heap.
- PutTxOffHeapValuesBenchmark - benchmarks transactional distributed cache put value operation off-heap.
- SqlQueryOffHeapBenchmark -benchmarks distributed SQL query over cached data off-heap.
- SqlQueryJoinOffHeapBenchmark - benchmarks distributed SQL query with a Join over cached data off-heap.
- SqlQueryPutOffHeapBenchmark - benchmarks distributed SQL query with simultaneous cache updates off-heap.
- PutAllBenchmark - benchmarks atomic distributed cache batch put operation.
- PutAllTxBenchmark - benchmarks transactional distributed cache batch put operation.
Yardstickの設定
Igniteを「/opt/apache-ignite」にインストールした場合、Yardstickは「/opt/apache-ignite/benchmarks」にあります。
IgniteクラスタはYardstickから自動起動されるため、起動しておく必要はありません。
リモートでIgniteクラスタへ接続してベンチマークを実行するため、「ignite-remote-config.xml」の設定を変更します。
cd /opt/apache-ignite/benchmarks/config
vi ignite-remote-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
Ignite Spring configuration file to startup grid.
-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<import resource="ignite-base-config.xml"/>
<bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration" parent="base-ignite.cfg">
<property name="discoverySpi">
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="ipFinder">
<bean
class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
<property name="addresses">
<list>
<!-- In distributed environment, replace with actual hosts IP addresses. -->
<value>192.168.10.71:47500</value>
<value>192.168.10.72:47500</value>
</list>
</property>
</bean>
</property>
</bean>
</property>
</bean>
</beans>
次にベンチマークの設定を変更します。
「benchmark-remote-sample.properties」というサンプルファイルがあるので、これをコピーして設定ファイルを作成します。
cp -p benchmark-remote-sample.properties benchmark-remote-test.properties
vi benchmark-remote-test.properties
プロパティファイルのSERVER_HOSTS項目に、IgniteノードのIPアドレスを入れます。
SERVER_HOSTS=192.168.10.71,192.168.10.72
実行するベンチマークを追加します。
「benchmark.properties」を参考にして作成します。
# Run configuration.
# Note that each benchmark is set to run for 300 seconds (5 min) with warm-up set to 60 seconds (1 minute).
CONFIGS="\
-cfg ${SCRIPT_DIR}/../config/ignite-remote-config.xml -nn ${nodesNum} -b ${b} -w ${w} -d ${d} -t ${t} -sm ${sm} -dn IgnitePutBenchmark -sn IgniteNode -ds ${ver}atomic-put-${b}-backup,\
-cfg ${SCRIPT_DIR}/../config/ignite-remote-config.xml -nn ${nodesNum} -b ${b} -w ${w} -d ${d} -t ${t} -sm ${sm} -dn IgnitePutGetBenchmark -sn IgniteNode -ds ${ver}atomic-put-get-${b}-backup,\
-cfg ${SCRIPT_DIR}/../config/ignite-remote-config.xml -nn ${nodesNum} -b ${b} -w ${w} -d ${d} -t ${t} -sm ${sm} -dn IgnitePutTxBenchmark -sn IgniteNode -ds ${ver}tx-put-${b}-backup,\
-cfg ${SCRIPT_DIR}/../config/ignite-remote-config.xml -nn ${nodesNum} -b ${b} -w ${w} -d ${d} -t ${t} -sm ${sm} -dn IgniteGetAndPutTxBenchmark -sn IgniteNode -ds ${ver}tx-getAndPut-${b}-backup,\
"
Yardstickを実行するサーバ(Driverと呼ぶようです)から、各IgnoreノードへSSHでログインできるようにします。
# ssh-keygen -t rsa
(パスフレーズは入力しない)
# ssh-copy-id root@192.168.10.71
# ssh-copy-id root@192.168.10.72
# ssh root@192.168.10.71
# ssh root@192.168.10.72
「benchmark-run-all.sh」でベンチマークを開始します。
[root@igniteserver3 config]# ../bin/benchmark-run-all.sh ./benchmark-remote-test.properties
<02:20:00><yardstick> Creating output directory
../bin/benchmark-run-all.sh: line 73: ifconfig: command not found
<02:20:00><yardstick> Copying yardstick to the host 192.168.10.71
Warning: Permanently added '192.168.10.71' (ECDSA) to the list of known hosts.
ベンチマークを実行すると、上のようにifconfigがないと怒られるので、net-toolsをインストールする。
# yum install -y net-tools
Ctrl-Cで強制終了した場合、Ignoreノードが起動したままになります。その状態でベンチマークを再実行すると残っていたIgnoreノードもクラスタに参加してしまうので、強制終了した場合は個別にIgnoreノードを停止する必要があります。
Visorで見てみると、サーバが3台起動しているようです。
1台がClientとなると思ったのですが、そうではないようです。
visor> top
Hosts: 3
+============================================================================================================================+
| Int./Ext. IPs | Node ID8(@) | Node Type | OS | CPUs | MACs | CPU Load |
+============================================================================================================================+
| 10.0.2.15 | 1: 0908F8F4(@n0) | Server | Linux amd64 3.10.0-693.2.2.el7.x86_64 | 1 | 02:42:4A:05:5B:CD | 55.00 % |
| 127.0.0.1 | | | | | 08:00:27:76:F3:CF | |
| 172.17.0.1 | | | | | 08:00:27:E3:4A:44 | |
| 192.168.10.71 | | | | | | |
+---------------+------------------+-----------+---------------------------------------+------+-------------------+----------+
| 10.0.2.15 | 1: 02A9366F(@n1) | Server | Linux amd64 3.10.0-693.2.2.el7.x86_64 | 1 | 08:00:27:76:F3:CF | 51.33 % |
| 127.0.0.1 | | | | | 08:00:27:7F:64:16 | |
| 192.168.10.72 | | | | | | |
+---------------+------------------+-----------+---------------------------------------+------+-------------------+----------+
| 10.0.2.15 | 1: 97EFB660(@n2) | Server | Linux amd64 3.10.0-693.2.2.el7.x86_64 | 1 | 08:00:27:64:78:7A | 90.33 % |
| 127.0.0.1 | | | | | 08:00:27:76:F3:CF | |
| 192.168.10.73 | | | | | | |
+----------------------------------------------------------------------------------------------------------------------------+
Summary:
+--------------------------------------+
| Active | true |
| Total hosts | 3 |
| Total nodes | 3 |
| Total CPUs | 3 |
| Avg. CPU load | 65.56 % |
| Avg. free heap | 83.00 % |
| Avg. Up time | 00:03:58 |
| Snapshot time | 2018-08-25 02:48:02 |
+--------------------------------------+
「cache -a」で見てみると、以下のように3サーバともにキャッシュが格納されています。
ということは、DriverのサーバもIgnoreクラスタに入っており、性能測定の対象になっているようです。
Cache 'atomic(@c0)':
+-----------------------------------------------------------+
| Name(@) | atomic(@c0) |
| Nodes | 3 |
| Total size Min/Avg/Max | 305670 / 333334.33 / 350590 |
| Heap size Min/Avg/Max | 0 / 1.00 / 3 |
| Off-heap size Min/Avg/Max | 305670 / 333333.33 / 350587 |
+-----------------------------------------------------------+
Nodes for: atomic(@c0)
+============================================================================================================+
| Node ID8(@), IP | CPUs | Heap Used | CPU Load | Up Time | Size | Hi/Mi/Rd/Wr |
+============================================================================================================+
| 02A9366F(@n1), 10.0.2.15 | 1 | 29.76 % | 40.33 % | 00:06:43.146 | Total: 305670 | Hi: 0 |
| | | | | | Heap: 0 | Mi: 0 |
| | | | | | Off-Heap: 305670 | Rd: 0 |
| | | | | | Off-Heap Memory: 0 | Wr: 0 |
+--------------------------+------+-----------+----------+--------------+----------------------+-------------+
| 0908F8F4(@n0), 10.0.2.15 | 1 | 24.59 % | 45.00 % | 00:06:43.395 | Total: 343743 | Hi: 0 |
| | | | | | Heap: 0 | Mi: 0 |
| | | | | | Off-Heap: 343743 | Rd: 0 |
| | | | | | Off-Heap Memory: 0 | Wr: 0 |
+--------------------------+------+-----------+----------+--------------+----------------------+-------------+
| 927AB38D(@n2), 10.0.2.15 | 1 | 20.24 % | 88.00 % | 00:00:34.269 | Total: 350590 | Hi: 0 |
| | | | | | Heap: 3 | Mi: 0 |
| | | | | | Off-Heap: 350587 | Rd: 0 |
| | | | | | Off-Heap Memory: 0 | Wr: 0 |
+------------------------------------------------------------------------------------------------------------+
ベンチマークの実行が終わると自動で結果がグラフ出力されます。
<03:08:51><yardstick> Driver is stopped on localhost
<03:08:51><yardstick> Server is stopped on 192.168.10.71
<03:08:51><yardstick> Server is stopped on 192.168.10.72
<03:08:52><yardstick> Collecting results from the host 192.168.10.71
<03:08:53><yardstick> Collecting results from the host 192.168.10.72
<03:08:54><yardstick> Creating charts
Moving chart directory to the /opt/apache-ignite/benchmarks/output/results-20180825-024401 directory.
HTMLファイルで出力されており、開くの以下のように表示されます。
Putだと平均38,000オペレーション(青)ですが、トランザクションを有効にすると平均11,000程度(赤)まで落ち込んでいることが分かります。
最初からベンチマークが同梱されているため、簡単に性能測定することができました。
今回はデフォルトパラメータで実行しましたが、今後、色々変更して性能の変化を確認してみたいですね。
YCSB (Yahoo Cloud Serving Benchmark)
YCSB (Yahoo Cloud Serving Benchmark)もIgniteに対応しているようです。
YCSBを使用したベンチマークの結果が以下に掲載されていました。
Apache® Ignite™ and Apache® Cassandra™ Benchmarks: The Power of In-Memory Computing
https://www.gridgain.com/resources/blog/apacher-ignitetm-and-apacher-cassandratm-benchmarks-power-in-memory-computing