0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

インメモリデータグリッドApache Igniteの性能をYardstickを使用して測定してみた

Last updated at Posted at 2018-08-25

はじめに

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種類となります。

  1. GetBenchmark - benchmarks atomic distributed cache get operation.
  2. PutBenchmark - benchmarks atomic distributed cache put operation.
  3. PutGetBenchmark - benchmarks atomic distributed cache put and get operations together.
  4. PutTxBenchmark - benchmarks transactional distributed cache put operation.
  5. PutGetTxBenchmark - benchmarks transactional distributed cache put and get operations together.
  6. SqlQueryBenchmark - benchmarks distributed SQL query over cached data.
  7. SqlQueryJoinBenchmark - benchmarks distributed SQL query with a Join over cached data.
  8. SqlQueryPutBenchmark - benchmarks distributed SQL query with simultaneous cache updates.
  9. AffinityCallBenchmark - benchmarks affinity call operation.
  10. ApplyBenchmark - benchmarks apply operation.
  11. BroadcastBenchmark - benchmarks broadcast operations.
  12. ExecuteBenchmark - benchmarks execute operations.
  13. RunBenchmark - benchmarks running task operations.
  14. PutGetOffHeapBenchmark - benchmarks atomic distributed cache put and get operations together off-heap.
  15. PutGetOffHeapValuesBenchmark - benchmarks atomic distributed cache put value operations off-heap.
  16. PutOffHeapBenchmark - benchmarks atomic distributed cache put operations off-heap.
  17. PutOffHeapValuesBenchmark - benchmarks atomic distributed cache get value operations off-heap.
  18. PutTxOffHeapBenchmark - benchmarks transactional distributed cache put operation off-heap.
  19. PutTxOffHeapValuesBenchmark - benchmarks transactional distributed cache put value operation off-heap.
  20. SqlQueryOffHeapBenchmark -benchmarks distributed SQL query over cached data off-heap.
  21. SqlQueryJoinOffHeapBenchmark - benchmarks distributed SQL query with a Join over cached data off-heap.
  22. SqlQueryPutOffHeapBenchmark - benchmarks distributed SQL query with simultaneous cache updates off-heap.
  23. PutAllBenchmark - benchmarks atomic distributed cache batch put operation.
  24. 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ファイルで出力されており、開くの以下のように表示されます。

image.png
image.png
image.png

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?