SSDをテストしていますが、2つの質問があります。
SNIAで仕様を公開しました。PTS(スニア)SSDをテストします。多くの場合、機器はbs = 0.5Kiでテストする必要があります!これの根拠は何ですか?私が正しく理解した場合、ここでの目的は、1ブロックサイズ未満のIOパフォーマンスを評価することです。私が理解した内容が間違っている場合は、訂正してください。
fioを使用してこのシナリオをテストするには? fioは、bsがファイルシステムのブロックサイズに合わせてソートされると予想しているためだと思います。たとえば、私の場合、次のエラーで失敗しました。
[root@system pwd]# /bin/fio --name=iops-wdpc --direct=1 --ioengine=libaio --bs=512 --size=1024Gi --numjobs=1 --thread=1 --iodepth=1 --output=op --allow_mounted_write=1 --filename=/dev/nvme2n1 --rw=write
fio: io_u error on file /dev/nvme2n1: Invalid argument: write offset=6295552, buflen=512
(私のファイルシステムのブロックサイズは4Kiです。)
[root@system pwd]# tune2fs -l /dev/nvme2n1 | grep -i 'block size'
Block size: 4096
(fioはbs = 512、1024、2048には適用されませんが、bs = 4096には適用されます)
[root@system ~]# /bin/fio --name=iops-wdpc --direct=1 --ioengine=libaio --bs=512 --size=1024Gi --numjobs=1 --thread=1 --iodepth=1 --output=op --allow_mounted_write=1 --filename=/dev/nvme2n1 --rw=write
fio: io_u error on file /dev/nvme2n1: Invalid argument: write offset=6295552, buflen=512
[root@system ~]#
[root@system ~]# /bin/fio --name=iops-wdpc --direct=1 --ioengine=libaio --bs=1024 --size=1024Gi --numjobs=1 --thread=1 --iodepth=1 --output=op --allow_mounted_write=1 --filename=/dev/nvme2n1 --rw=write
fio: io_u error on file /dev/nvme2n1: Invalid argument: write offset=6295552, buflen=1024
[root@system ~]#
[root@system ~]# /bin/fio --name=iops-wdpc --direct=1 --ioengine=libaio --bs=2048 --size=1024Gi --numjobs=1 --thread=1 --iodepth=1 --output=op --allow_mounted_write=1 --filename=/dev/nvme2n1 --rw=write
fio: io_u error on file /dev/nvme2n1: Invalid argument: write offset=6295552, buflen=2048
[root@system ~]#
[root@system ~]# /bin/fio --name=iops-wdpc --direct=1 --ioengine=libaio --bs=4096 --size=1024Gi --numjobs=1 --thread=1 --iodepth=1 --output=op --allow_mounted_write=1 --filename=/dev/nvme2n1 --rw=write
^C[root@system ~]# ^C3%][r=0KiB/s,w=147MiB/s][r=0,w=37.7k IOPS][eta 01h:57m:58s]
(パイオバージョン)
[root@smartiops ~]# /bin/fio --version
fio-3.1
ベストアンサー1
(この記事を書いて設定が心配され始めました。最後に太字を参照してください)
使用direct=1
O_DIRECT
このフラグは、スタックの低レベルがフラグを無視しない場合、ソートとサイズ制限のあるLinuxでオンになります(参照:詳細については、マニュアルページO_DIRECT
の情報を参照してください。open(2)
)。ブロックデバイスに対してI / Oを実行する場合は、O_DIRECT
ディスクの論理ブロックサイズの倍数であるブロックサイズを使用する必要があります。 NVMeの場合、通常4096バイトですが、デバイス構成によっては異なる値を使用できます。
多くの場合、機器はbs = 0.5Kiでテストする必要があります!これの根拠は何ですか?
SSDが最初に導入されたときに模倣されることが多かった(参照:512e)512バイトの論理ブロックサイズ/セクタを想定した以前のソフトウェアの損傷を防ぐために、ハードドライブの論理ブロックサイズを変更しましたが、I / Oが正しく整列しないとパフォーマンスが低下する可能性があります(次を参照)。Solarisの4Kセクターサポートのスライド)。時間の経過とともに、多くのデバイスは基本的にこれらの小さなブロックサイズをエミュレートしませんでした。 SNIA/ガイドライターと最新の最小ブロックサイズについて話し合うことができます(512バイトのパフォーマンスは時間の経過とともに興味深くなります)。
私がここで何を間違っているのか?
あなたが間違ったことはありません。与えられたブロックデバイスの使用規則に違反することはできませんO_DIRECT
。
fio:ファイルシステムのブロックサイズが1より小さいbsをテストする方法は?
filename=/dev/nvme2n1
fioタスクの説明にブロックデバイス()を使用することを示しており、Linuxファイルシステムに対処しないでください。あなたのコマンドは混乱した結果を返すかもしれません(ファイルシステム情報を返すからです!)。最上位にext *ファイルシステムがある項目に対してのみそのままtune2fs
使用したいようです.../sbin/blockdev --getss <device>
tune2fs
...今設定が心配です。余裕があるよりも多くのデータを持つシステムでブロックデバイスに対してI / Oを実行する場合永久的で元に戻せないように破壊された停止そして、「アクティブ」ファイルシステムを持つブロックデバイスに対してfioブロックデバイスアクセスを実行しない理由を理解するのに時間を費やしてください。警告して申し訳ありません。おっしゃった内容の一部は深刻な混乱を暗示しており、データが危険にさらされている場合...--allow_mounted_write=1
。私が言えることはあなたがすることがまるで危険奇妙な結果やシステムの競合が発生する可能性があります。セキュリティバリアを越えるときは、続行する前にいくつかの背景情報を読んでよりよく理解することをお勧めします。
コマンドの意図が正しいと仮定し、「どのように直接ターゲットを指定するのか」を意味する場合装備ブロックサイズがデバイスの論理ブロックサイズより小さいです。」答えは次のとおりです。できない。デバイスの論理ブロックサイズは、デバイスがオペレーティングシステムに公開するアドレス指定可能な最小単位であり、論理ブロックサイズは4096バイトです。 512バイトブロックを宣伝するようにデバイスを再設定できますが、これを行う方法についてはデバイスベンダーに連絡する必要があります(パフォーマンスコストが発生する可能性があります)。