web-dev-qa-db-ja.com

LinuxでのIntelNVMEのパフォーマンス

XeonW-2155と64GBのddr4-2400RAMを搭載したSupermicroX11SRM-FにIntel760PNVMEドライブを接続しています。このドライブの specs は、約3G/sのランダム読み取りと1.3G/sのランダム書き込みで205K-265K IOPS(8GBスパンを意味する)を要求します。

私はこのドライブをLVMレイヤーとベアパーティションの下で使用しようとしましたが、宣伝されているパフォーマンスに近づくことはできません。

ドライブで一般的なプロセスを実行すると、(iostatを介して)約75MB /秒の書き込み、約5K TPS(IOPS)が得られます。 iostatはディスク使用率も約20%を示しているため(下のグラフを添付)、どこかでまだボトルネックになっているようです。 SATAケーブルを介した通常のIntelSSDは、この時点でドライブよりもパフォーマンスが優れています。何を見るべきアイデアはありますか?

enter image description hereenter image description hereenter image description here

更新:@John Mahowaldが述べたように-アプリケーション(Ruby)のボトルネックのようです!?以下のグラフは、このfioコマンドスクリプトからのグラフです(グラフのスケーリングを増加させる必要があります。〜700MB /秒の書き込みと50K TPSをはるかに超えています:

# full write pass
fio --name=writefile --size=10G --filesize=80G \
--filename=disk_test.bin --bs=1M --nrfiles=1 \
--direct=1 --sync=0 --randrepeat=0 --rw=write --refill_buffers --end_fsync=1 \
--iodepth=200 --ioengine=libaio

# Rand read
fio --time_based --name=benchmark --size=80G --runtime=30 \
--filename=disk_test.bin --ioengine=libaio --randrepeat=0 \
--iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \
--numjobs=4 --rw=randread --blocksize=4k --group_reporting

# Rand write
fio --time_based --name=benchmark --size=80G --runtime=30 \
--filename=disk_test.bin --ioengine=libaio --randrepeat=0 \
--iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \
--numjobs=4 --rw=randwrite --blocksize=4k --group_reporting

TPS/UtilizationWrite load

3
Server Fault

元のベンチマークと比較してfioのIOPSがはるかに高いことは、ストレージシステム以外の場所に制限要因があることを示唆しています。

キャパシティプランニングでは、実際に必要なストレージパフォーマンスを見積もります。実際の負荷からTPS番号を取得し、IOPSに必要なものを推測します。

200k IOPSは、ほとんどの単一アプリケーションがこれまでに要求するよりもはるかに多いです。 (これは素晴らしい問題です。)ストレージを実行するように設計された合成負荷ジェネレーターであっても、100k IOPSをプッシュすることは簡単です。これには、複数の並列プロセス、キューの深さの調整、およびおそらく非同期I/Oが必要になる傾向があります。

2
John Mahowald