Google Cloud のローカル SSD を使用した fsync が遅い (Postgresql)

Google Cloud のローカル SSD を使用した fsync が遅い (Postgresql)

単純な「pgbench」テストを使用して、GCE の「ローカル SSD」オプション (SSD 永続ディスクと比較して) で 1 秒あたりのトランザクション数が予想外に低くなっています。

# With Local SSD
# /dev/mapper/vg0-data on /data type xfs (rw,noexec,noatime,attr2,inode64,noquota)
pg-dev-002:~$ pgbench -c 8 -j 2 -T 60 -U postgres
starting vacuum...end.
transaction type: TPC-B (sort of)
scaling factor: 1
query mode: simple
number of clients: 8
number of threads: 2
duration: 60 s
number of transactions actually processed: 10765
tps = 179.287875 (including connections establishing)
tps = 179.322407 (excluding connections establishing)

# With SSD Persistent Disk
# /dev/mapper/vg1-data on /data1 type xfs (rw,noexec,noatime,attr2,inode64,noquota)
pg-dev-002:/data$ pgbench -c 8 -j 2 -T 60 -U postgres
starting vacuum...end.
transaction type: TPC-B (sort of)
scaling factor: 1
query mode: simple
number of clients: 8
number of threads: 2
duration: 60 s
number of transactions actually processed: 62457
tps = 1040.806664 (including connections establishing)
tps = 1041.012782 (excluding connections establishing)

「fio」ベンチマークは、ローカル SSD の宣伝されている IOPS とスループットを示しています。ただし、ローカル SSD マウントで「pg_test_fsync」を実行すると、fsync の遅延が原因であると考えられます。ローカル SSD の数値は、Google の IRQ スクリプトを適用した後のものです。ここ:

# Local SSD
open_datasync                     319.738 ops/sec    3128 usecs/op
fdatasync                         321.963 ops/sec    3106 usecs/op

# Persistent SSD
open_datasync                    1570.305 ops/sec     637 usecs/op
fdatasync                        1561.469 ops/sec     640 usecs/op
  • Ubuntu 14.04およびDebian 7イメージでテスト済み
  • インスタンスタイプ: n1-highmem-4
  • マウントオプションは両方のボリュームタイプで同一です

fsync とローカル SSD の制限については何も見たことがありませんが、他にどこで確認またはテストすればよいかわかりません。

答え1

比較するシングルローカル SSD/HDD などを SAN タイプの RAID コントローラーと比較するのは、VW ビートルと Audi RS10 Le-mans カーを比較するようなものです。確かに、どちらも同じ工場で製造され、どちらも 4 ストローク エンジン/SSD/HDD を使用していますが、チューニングなどはまったく異なります。

経験から得た例をいくつか挙げることができますが、答えは簡単です。SA​​N ベースのストレージには、ローカル SSD/HDD の非ローカル SSD/HDD に比べて、大量のバッテリ バックアップ RAM キャッシュが搭載されていることです。SSD でさえ、データがディスクに「コミット」されたことを確認するという点では、バッテリ バックアップ DDR3 RAM に太刀打ちできません。さらに、単一のローカル ディスクでは、ブロックを「ディスク」に書き込む操作を一度に 1 つしか処理できません (現実的に)。一方、バッテリ バックアップ SAN システムでは、複数の要求を同時に処理して「ディスクに書き込む」ことができます (バッテリ バックアップ DDR3 RAM にデータをコミットするため)。

最後に、質問はどれのローカルSSDディスクが使用されているため、異なるディスク間で書き込みパフォーマンスに大きな違いが見られました。サイズ同じ SSD ファミリー (大きいほど高速) のさまざまな SSD ディスクの速度は言うまでもありません。

はい、SSD は HDD よりも高速ですが、バッテリー バックアップの DDR3 RAM ほど高速ではありません ;)

答え2

Googleは、ローカルSSDでの書き込みキャッシュのフラッシュがかなり遅いことを認めており、その遅延を回避するためにファイルシステムマウントで書き込みキャッシュを無効にする手順を提供しています(ユースケースに適している場合)。ドキュメントはここ

関連情報