目次


IBM Power Systems 上で稼働する場合の Scylla のパフォーマンス

Intel 上の Apache Cassandra と比較した、IBM POWER9 プロセッサー・ベースのサーバー上での Scylla Enterprise リリース 2018.1 のテスト結果

Comments

IBM エキスパートと ScyllaDB エキスパートからなるチームで、ScyllaDB のテストに着手しました。このテストは Intel Xeon SP プロセッサー・ベースのサーバー上で Apache Cassandra を実行する場合と比べ、IBM POWER9 プロセッサー・ベースのサーバー上で ScyllaDB を実行する価値を明らかにするためのものです。

テスト結果により、読み取り処理と書き込み処理の両方で、IBM POWER9 プロセッサー・ベースのサーバー上で稼働する Scylla のほうが Cassandra よりもスループットが上回ることが実証されています。

この記事では、テストで使用した環境とハードウェア構成、テスト結果とそれを裏付けるデータ、POWER9 の推奨されるチューニングとサイジング例について説明します。また、Scylla の卓越したパフォーマンスに貢献する POWER9 の機能についても説明します。

Scylla の紹介

Scylla は、Apache Cassandra の代替手段として使用できるオープンソースの NoSQL データベースです。Scylla と Cassandra はどちらもワイド・カラム・ストアです。Scylla は Cassandra の選り抜きの機能を利用しながらも、そのパフォーマンスは Cassandra よりも最大 10 倍優れています。また、ワークロードによってはレイテンシーも低くなります。Scylla の極めてスケーラブルなアーキテクチャーでは、1 台のサーバー上で 1 秒あたり 100 万回のデータベース・トランザクションを実行することができます。Cassandra と同様に、可用性と信頼性を最大限に高めるため、Scylla には複数のノード間での自動フェールオーバー機能とレプリケーション機能が備わっています。ワークロードの調整では、一連の動的スケジューリング・アルゴリズムによって、データベース処理のレイテンシー変動を最小限に抑えるとともに、圧縮のストリーミングおよび修復時間を削減します。Scylla のアーキテクチャーでは、データベースがハードウェアおよびプロセッサー・モデルをスケールアップすることもスケールダウンすることもできます。

詳細については、このリンク先の資料「Scylla Architecture」を参照してください。

このリンク先の資料「Scylla Apache Cassandra Compatibility」では、Scylla がいかに Cassandra との互換性に優れているかを説明しています。

Scylla にとっての IBM Power Systems の価値

Scylla は IBM POWER9 サーバー上で実行することで、その能力を発揮します。この相性の良さには、いくつかの決定的な理由があります。まず、Scylla 内のシャーディング機能では並列処理を最適化するために、IBM Power アーキテクチャー上の同時マルチスレッド化 (SMT) を最大限利用します。Seastar フレームワークで採用しているシェアード・ナッシング・モデルでは、すべてのリクエストを個々の CPU にシャーディングして、時間のかかるロックを使わずに CPU 間で効率的にメッセージを受け渡せるようにします。

キャッシュ階層が拡張されている POWER9 コアは、合計 120 MB の L3 キャッシュを持ち、20 とおりの結合領域と高度な配置ポリシーを使用します。L3 キャッシュは、7 TBps のオンチップ帯域幅によってフィードされます。80 GBps のピーク I/O 帯域幅に加え、(Gen3 との互換性を持つ) PCIe Gen4 で駆動されることから、POWER9 は x86 に勝る、極めて高帯域幅のデータ環境となっています。

また、POWER9 ではより多くのメモリー容量を使用できるため、より大規模なインメモリー・データベースをサポートできます。

テスト環境

2 つのテスト環境をセットアップしました。1 つは Intel Xeon SP 上で Apache Cassandra を実行するための環境、もう 1 つは POWER9 上で Scylla を実行するための環境です。どちらのサーバーも同じように構成し、それぞれのサーバーに、テスト用に同等のリソースを割り当てました。POWER9 サーバー環境と Intel サーバー環境の両方で、同じパフォーマンス・ベンチマークを使用してテストを実行しました。

ベンチマーク

ベンチマーキングと負荷テストには、オープンソースの cassandra-stress ツールを使用しました。cassandra-stress は、テスト・データを取り込んで各種のワークロード負荷テストを実行する組み込みメソッドを提供する、Java ベースのツールです。

重要な 2 つのデータベース処理として、読み取り処理と書き込み処理をテストしました。それぞれのテストを実行するごとに、スループットを測定しました。スループットは、1 秒あたりの読み取り (または書き込み) 処理の回数として測定します。読み取り処理と書き込み処理の両方で、テストを複数回実行し、平均スループットを計算しました。さらに、読み取り処理 (80%) と書き込み処理 (20%) の両方を混合したテストも実行しました。

cassandra-stress テストでの書き込みテストは、均一モデルを使用して実行しました。読み取りテストと混合処理テストで使用したのは、ガウス分布モデル (9,000,000/4,500,000/10,000) です。

このテストでは、56 個の cassandra-stress ローダーを使用しました。

書き込みテストの各イテレーションは、クラスターにデータがなくなった時点で開始します (各イテレーションの前に、データがクリアされてデータベースが再起動されます)。

テストで使用したデータ・セットのサイズは 156 GB です。データ・セットには、パーティションごとにデータ行が 1 つあります。データ行の平均サイズは 310 バイトです。以下に、使用したスキーマを記載します。

cqlsh>  DESC  KEYSPACE ks1

CREATE KEYSPACE ks1 WITH replication = {'class': 'NetworkTopologyStrategy', 'datacenter1': '1'} AND
                                        durable_writes  =  true;

CREATE TABLE ks1.standard1 
    ( key blob PRIMARY 
      KEY, "C0"   blob,
      "C1" blob,
      "C2" blob,
      "C3" blob, "C4" blob
)WITH COMPACT STORAGE AND bloom_filter_fp_chance =   0.01
      AND caching = {'keys': 'ALL',  'rows_per_partition':  'ALL'} 
      AND comment = ''
      AND compaction = {'class': 'SizeTieredCompactionStrategy'} 
      AND compression = {}
      AND crc_check_chance  =  1.0
      AND dclocal_read_repair_chance = 0.1 
      AND default_time_to_live   =   0
      AND gc_grace_seconds = 864000 
      AND max_index_interval    =  2048
      AND memtable_flush_period_in_ms = 0 
      AND min_index_interval   =   128
      AND read_repair_chance   =  0.0
      AND speculative_retry   =  '99.0PERCENTILE';

各サーバー上でデータベースが稼働状態になった後、以下のコマンド呼び出しを使用して cassandra-stress ツールを呼び出し、それぞれ書き込みテスト、読み取りテストを行います。

書き込みテストの場合:

        /home/user1/scylla-tools-java/tools/bin/cassandra-stress write no-warmup n=9000000 -node <IP> 
        -rate threads=100 -mode native cql3 -pop seq=<key_range> 
        -schema keyspace=ksx replication\(strategy=NetworkTopologyStrategy, datacenter1=1\)

読み取りテストの場合:

        /home/user1/scylla-tools-java/tools/bin/cassandra-stress read no-warmup n=9000000 -node <IP> 
        -rate threads=400 -mode native cql3 -pop dist=gaussian\(key_range,midpoint,10000\) 
        -schema keyspace=ksx replication\(strategy=NetworkTopologyStrategy, datacenter1=1\)

読み取り (80%) 書き込み (20%) テストの場合:

        /home/user1/scylla-tools-java/tools/bin/cassandra-stress mixed ratio\(write=2,read=8\) no-warmup n=9000000 
        -node <IP> -rate threads=400  -mode native cql3 -pop dist=gaussian\(key_range,midpoint,10000\) 
        -schema keyspace=ks1 replication\(strategy=NetworkTopologyStrategy, datacenter1=1\)

ソフトウェア構成

表 1 に、POWER9 プロセッサー・ベースのサーバーと Intel Xeon プロセッサー・ベースのサーバーにインストールした主なソフトウェアを記載します。これらのテスト用に、サーバーのオペレーティング・システムはそれぞれベア・メタルの非仮想化モードで構成しました。

表 1. POWER9 および Intel Xeon データベース・サーバーのソフトウェア構成
コンポーネントIBM POWER9 サーバーIntel Xeon SP サーバー
データベース・ソリューションScylla Enterprise 2018.1.0Apache Cassandra 3.11.2
オペレーティング・システムRHEL 7.5 LE for POWER9RHEL 7.5

ハードウェア構成

表 2 に、POWER9 プロセッサー・ベースのサーバーと Intel Xeon プロセッサー・ベースのサーバーの構成を記載します。どちらの構成でも、同じコア数、メモリー容量、ストレージ容量を使用しました。

表 2. POWER9 および Intel Xeon データベース・サーバーのハードウェア構成
コンポーネントIBM POWER9 サーバーIntel Xeon SP サーバー
モデルIBM Power System LC922Intel Xeon SP Gold 6140
プロセッサー2x 22 コア、2 ソケット、2.6 GHz2x 18 コア、2 ソケット、2.3 GHz
メモリー256 GB256 GB
ストレージ2 基の内部 HDD ドライブ
PCI を接続した 1.6 TB の NVMe
2 基の内部 HDD ドライブ
PCI を接続した 1.6 TB の NVMe

ネットワーク構成

cassandra-stress テスト・ドライバーは、表 2 に記載されているデータベース・サーバーとは別のサーバー上にインストールして実行しました。40 Gbps のネットワーク・スイッチを使用しました。負荷テスト・サーバーとテスト対象の各データベース・サーバーの間では、まったく同じネットワーク構成を使用しました。

テスト結果

テスト結果には、Scylla は POWER9 上において、スループットという点で Intel プロセッサー・ベースのサーバー上で稼働する Cassandra よりもパフォーマンスに優れていることが示されています。どちらのテストでもテスト・サーバーのサイズは 2U (2 ユニット) であったため、これらのテスト結果は、POWER9 システムのほうが同じフットプリント・スペースでより多くの Scylla データベース処理を完了できるということを意味します。また、個々の処理にかかる時間が短いことから、ユーザーが処理結果により短時間でアクセスできることも意味します。

スループット

POWER9 上の Scylla の書き込みスループットは、1 秒あたりの処理数という点で、Intel Xeon SP 上の Apache Cassandra よりも 5.83 倍優れています。図 1 に、書き込みスループットの結果を示します。

図 1. IBM POWER9 と Intel Xeon SP の書き込みスループットの比較

POWER9 上の Scylla の読み取りスループットは、Intel Xeon SP 上の Apache Cassandra よりも 2.13 倍優れています。図 2 に、読み取りスループットの結果を示します。

図 2. IBM POWER9 と Intel Xeon SP の読み取りスループットの比較

POWER9 上の Scylla の混合処理のスループットは、Intel Xeon SP 上の Apache Cassandra よりも 3.16 倍優れています。混合処理のスループットは、80% の読み取り処理と 20% の書き込み処理の結果です。図 3 に、このスループットの結果を示します。

図 3. IBM POWER9 と Intel Xeon SP の混合処理スループットの比較

チューニング

ScyllaDB に用意されているシステム構成ガイドに、さまざまな環境要素 (ハードウェア、ストレージ、ファイル・システム、ネットワーキング、Scylla ソフトウェアなど) に推奨される構成が説明されています。また、簡単に構成できるよう、いくつかのスクリプトも用意されています。これらの構成の他に、データベースと POWER9 のチューニングを行うことが推奨されます。

データベースのチューニング

ScyllaDB と Cassandra データベースのいくつかの重要な側面を、テスト環境に合わせて調整しました。

POWER9 プロセッサー・ベースのサーバー上で Scylla を起動するために使用したコマンド呼び出しは、以下のとおりです。

        /home/user1/.ccm/scylla-1/node1/bin/scylla --options-file /home/user1/.ccm/scylla-1/node1/conf/scylla.yaml 
        --log-to-stdout 1 --memory 200G --default-log-level info --smp 172 --cpuset 4-175 --max-io-requests 480 
        --num-io-queues 120 --developer-mode false --collectd 0 --prometheus-address 172.31.254.91 
        --background-writer-scheduling-quota 0.5 --auto-adjust-flush-quota 1 --load-balance none 
        --api-address 10.13.116.2 --collectd-hostname bsnode16-1.node1

Intel Xeon プロセッサー・ベースのサーバー上で Cassandra を起動するために使用したコマンド呼び出しは、以下のとおりです。

        java -Xloggc:/home/scylla/.ccm/cassandra-1/node1/logs/gc.log -ea
          -XX:+UseThreadPriorities -XX:ThreadPriorityPolicy=42 -XX:+HeapDumpOnOutOfMemoryError
          -Xss256k -XX:StringTableSize=1000003 -XX:+AlwaysPreTouch -XX:-UseBiasedLocking
          -XX:+UseTLAB -XX:+ResizeTLAB -XX:+UseNUMA -XX:+PerfDisableSharedMem
          -Djava.net.preferIPv4Stack=true -XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCDateStamps
          -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime
          -XX:+PrintPromotionFailure -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10
          -XX:GCLogFileSize=10M -Xms64G -Xmx64G
          -XX:CompileCommandFile=/home/scylla/.ccm/cassandra-1/node1/conf/hotspot_compiler
          -javaagent:/home/scylla/.ccm/repository/3.11.2/lib/jamm-0.3.0.jar
          -Dcassandra.jmx.local.port=7100 -Dcom.sun.management.jmxremote.authenticate=false
          -Dcom.sun.management.jmxremote.password.file=/etc/cassandra/jmxremote.password
          -Djava.library.path=/home/scylla/.ccm/repository/3.11.2/lib/sigar-bin
          -Dcassandra.migration_task_wait_in_seconds=2 -XX:OnOutOfMemoryError=kill -9 %p
          -Dlogback.configurationFile=logback.xml
          -Dcassandra.logdir=/home/scylla/.ccm/repository/3.11.2/logs
          -Dcassandra.storagedir=/home/scylla/.ccm/repository/3.11.2/data
          -Dcassandra-pidfile=/home/scylla/.ccm/cassandra-1/node1/cassandra.pid -cp
          /home/scylla/.ccm/cassandra-1/node1/conf:/home/scylla/.ccm/repository/3.11.2/build/classes/main:/home/scylla/.ccm/repository/3.11.2/build/classes/thrift:/home/scylla/.ccm/repository/3.11.2/lib/airline-0.6.jar:/home/scylla/.ccm/repository/3.11.2/lib/antlr-runtime-3.5.2.jar:/home/scylla/.ccm/repository/3.11.2/lib/apache-cassandra-3.11.2.jar:/home/scylla/.ccm/repository/3.11.2/lib/apache-cassandra-thrift-3.11.2.jar:/home/scylla/.ccm/repository/3.11.2/lib/asm-5.0.4.jar:/home/scylla/.ccm/repository/3.11.2/lib/caffeine-2.2.6.jar:/home/scylla/.ccm/repository/3.11.2/lib/cassandra-driver-core-3.0.1-shaded.jar:/home/scylla/.ccm/repository/3.11.2/lib/commons-cli-1.1.jar:/home/scylla/.ccm/repository/3.11.2/lib/commons-codec-1.9.jar:/home/scylla/.ccm/repository/3.11.2/lib/commons-lang3-3.1.jar:/home/scylla/.ccm/repository/3.11.2/lib/commons-math3-3.2.jar:/home/scylla/.ccm/repository/3.11.2/lib/compress-lzf-0.8.4.jar:/home/scylla/.ccm/repository/3.11.2/lib/concurrentlinkedhashmap-lru-1.4.jar:/home/scylla/.ccm/repository/3.11.2/lib/concurrent-trees-2.4.0.jar:/home/scylla/.ccm/repository/3.11.2/lib/disruptor-3.0.1.jar:/home/scylla/.ccm/repository/3.11.2/lib/ecj-4.4.2.jar:/home/scylla/.ccm/repository/3.11.2/lib/guava-18.0.jar:/home/scylla/.ccm/repository/3.11.2/lib/HdrHistogram-2.1.9.jar:/home/scylla/.ccm/repository/3.11.2/lib/high-scale-lib-1.0.6.jar:/home/scylla/.ccm/repository/3.11.2/lib/hppc-0.5.4.jar:/home/scylla/.ccm/repository/3.11.2/lib/jackson-core-asl-1.9.13.jar:/home/scylla/.ccm/repository/3.11.2/lib/jackson-mapper-asl-1.9.13.jar:/home/scylla/.ccm/repository/3.11.2/lib/jamm-0.3.0.jar:/home/scylla/.ccm/repository/3.11.2/lib/javax.inject.jar:/home/scylla/.ccm/repository/3.11.2/lib/jbcrypt-0.3m.jar:/home/scylla/.ccm/repository/3.11.2/lib/jcl-over-slf4j-1.7.7.jar:/home/scylla/.ccm/repository/3.11.2/lib/jctools-core-1.2.1.jar:/home/scylla/.ccm/repository/3.11.2/lib/jflex-1.6.0.jar:/home/scylla/.ccm/repository/3.11.2/lib/jna-4.2.2.jar:/home/scylla/.ccm/repository/3.11.2/lib/joda-time-2.4.jar:/home/scylla/.ccm/repository/3.11.2/lib/json-simple-1.1.jar:/home/scylla/.ccm/repository/3.11.2/lib/jstackjunit-0.0.1.jar:/home/scylla/.ccm/repository/3.11.2/lib/libthrift-0.9.2.jar:/home/scylla/.ccm/repository/3.11.2/lib/log4j-over-slf4j-1.7.7.jar:/home/scylla/.ccm/repository/3.11.2/lib/logback-classic-1.1.3.jar:/home/scylla/.ccm/repository/3.11.2/lib/logback-core-1.1.3.jar:/home/scylla/.ccm/repository/3.11.2/lib/lz4-1.3.0.jar:/home/scylla/.ccm/repository/3.11.2/lib/metrics-core-3.1.0.jar:/home/scylla/.ccm/repository/3.11.2/lib/metrics-jvm-3.1.0.jar:/home/scylla/.ccm/repository/3.11.2/lib/metrics-logback-3.1.0.jar:/home/scylla/.ccm/repository/3.11.2/lib/netty-all-4.0.44.Final.jar:/home/scylla/.ccm/repository/3.11.2/lib/ohc-core-0.4.4.jar:/home/scylla/.ccm/repository/3.11.2/lib/ohc-core-j8-0.4.4.jar:/home/scylla/.ccm/repository/3.11.2/lib/reporter-config3-3.0.3.jar:/home/scylla/.ccm/repository/3.11.2/lib/reporter-config-base-3.0.3.jar:/home/scylla/.ccm/repository/3.11.2/lib/sigar-1.6.4.jar:/home/scylla/.ccm/repository/3.11.2/lib/slf4j-api-1.7.7.jar:/home/scylla/.ccm/repository/3.11.2/lib/snakeyaml-1.11.jar:/home/scylla/.ccm/repository/3.11.2/lib/snappy-java-1.1.1.7.jar:/home/scylla/.ccm/repository/3.11.2/lib/snowball-stemmer-1.3.0.581.1.jar:/home/scylla/.ccm/repository/3.11.2/lib/ST4-4.0.8.jar:/home/scylla/.ccm/repository/3.11.2/lib/stream-2.5.2.jar:/home/scylla/.ccm/repository/3.11.2/lib/thrift-server-0.3.7.jar:/home/scylla/.ccm/repository/3.11.2/lib/jsr223/*/*.jar
          -Dcassandra.join_ring=True -Dcassandra.logdir=/home/scylla/.ccm/cassandra-1/node1/logs
          -Dcassandra.boot_without_jna=true org.apache.cassandra.service.CassandraDaemon

Cassandra のチューニングは、https://docs.datastax.com/en/cassandra/3.0/cassandra/operations/opsTuneJVM.html に掲載されている DataStax JVM チューニング・ガイドに従って行いました。

POWER9 のチューニング

テスト中に、POWER9 上で稼働する Scylla で最適なパフォーマンスを達成するために変更した、POWER9 システム・レベルの 3 つの重要な環境設定について、以下に説明します。

周波数:

周波数のパフォーマンス・モードは turbo に設定します。ベア・メタル環境内では、CPU エネルギー・ガバナーはオペレーティング・システム (OS) によって制御されます。周波数を確認および設定するには、cpupower コマンドを以下のように使用します。

cpupower -c 0-175 frequency-info

cpupower -c 0-175 frequency-set -g performance

同時マルチスレッド化 (SMT)

SMT を使用すると、同じコア上で複数のスレッドの命令ストリームを同時に実行できます。IBM POWER9 プロセッサー・ベースのサーバー上でのデフォルト設定は SMT4 です。ほとんどのワークロードは、このデフォルト設定で有効に動作します。Scylla を含め、データベースに関しては、SMT を SMT4 モードに設定することがベスト・プラクティスであると見なされています。POWER9 プロセッサー・ベースのサーバーではコアあたり最大 4 つのスレッドを使用できる一方、Intel プロセッサー・ベースのサーバーでは、コアごとに 2 つのスレッドしか使用できません。したがって、稼働中の ScyllaDB がコアごとに使用するシャードの数は、POWER9 上では 4 つ、Intel プロセッサー・ベースのサーバー上では 2 つとなります。

SMT モードを 4 または 2 に設定するには、ppc64_cpu コマンドを以下のように使用します。

SMT4: ppc64_cpu –-smt=4

SMT2: ppc64_cpu –-smt=2

ハードウェアのサイジング

表 3 に、3 つの異なるインストール・サイズに応じた POWER9 の構成例を記載します。

表 3. IBM POWER9 サーバーの Scylla インストール・サイズの例
インストール・サイズIBM Power モデルコア数メモリーディスクネットワーク
テスト (最小)LC92116 コア32 GB単一のプレーン SSD1 Gbps
本番LC92222 コア
(2 ソケットのそれぞれに 11 コア)
128 GBRAID-0、4 SSD、1-5 TB10 Gbps
アナリティクス、高負荷の処理LC92244 コア
(2 ソケットのそれぞれに 22 コア)
256 GBNVMe、10 TB10-40 Gbps

まとめ

IBM POWER9 プロセッサー・ベースのサーバーを使用して Scylla をテストしたところ、データベースの読み取り処理と書き込み処理の両方で、卓越したスループットを発揮しました。Scylla が IBM POWER9 サーバー上で極めて優れたパフォーマンスを発揮する主な理由はいくつかあります。まず、Scylla 内のシャーディング機能では並列処理を最適化するために、Power アーキテクチャー上の同時マルチスレッド化を最大限利用します。また、POWER9 は x86 に勝る、極めて高帯域幅のデータ環境です。さらに、POWER9 ではより多くのメモリー容量を使用できるため、より大規模なインメモリー・データベースをサポートできます。

その他のリソース


ダウンロード可能なリソース


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux
ArticleID=1064243
ArticleTitle=IBM Power Systems 上で稼働する場合の Scylla のパフォーマンス
publish-date=01102019