dm-mapperを使用しようとしていますが、ファイルを許可しません。だからデバイスが必要です。
そのため、ram(ramfsファイルシステム)の/ dev / shm / fに1500Mファイルを作成し、それを(lostupを介して)/ dev / loop0にマップしました。
しかし、ループデバイスでのパフォーマンスはファイルに比べて約4位です。
ラムベンチマークファイル:
# dd if=/dev/shm/f of=/dev/null bs=16k
96000+0 records in
96000+0 records out
1572864000 bytes (1.6 GB, 1.5 GiB) copied, 0.379551 s, 4.1 GB/s
ループバックデバイスベンチマーク:
# dd if=/dev/loop0 of=/dev/null bs=16k
96000+0 records in
96000+0 records out
1572864000 bytes (1.6 GB, 1.5 GiB) copied, 1.62812 s, 966 MB/s
デバイスにファイルを書き込むより良い方法はありますか?
それ以外の場合、屋根ふき装置をより速くするにはどうすればよいですか?
編集1: システム仕様:ram ddr2 667およびCPU e5500
RAMディスクと/dev/shm/fを作ってみました。ランダムデータテストのためにbs = 16kをbs = 512kに変更します。結果を聞く:
- ramfsに直接ioがないファイル(直接フラグは許可されていません)3.5 GB:
# dd if=/dev/shm/f of=/dev/null bs=512K status=progress
2048+0 records in
2048+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.3091 s, 3.5 GB/s
- ダイレクトIOの有無のRAMディスク(1GB/sおよび3.4GB/s):
# dd if=/dev/ram0 of=/dev/null bs=512K status=progress
937951232 bytes (938 MB, 894 MiB) copied, 1.00036 s, 938 MB/s
2048+0 records in
2048+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 1.22576 s, 876 MB/s
# dd if=/dev/ram0 of=/dev/null bs=512K status=progress iflag=direct
2048+0 records in
2048+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.319873 s, 3.4 GB/s
3) ダイレクト・ループ・デバイスがある場合とない場合 (954MB/s および 2.5GB/s):
# dd if=/dev/loop0 of=/dev/null bs=512k status=progress
2048+0 records in
2048+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 1.1009 s, 975 MB/s
# dd if=/dev/loop0 of=/dev/null bs=512k status=progress iflag=direct
2048+0 records in
2048+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.436886 s, 2.5 GB/s
- デバイスマッパーのRAMディスク(920MB/sおよび2.4GB/s)
mount /dev/mapper/ram-snap /mnt/sta1
cat /dev/urandom >/mnt/sta1/tst
# dd if=/mnt/sta1/tst of=/dev/null bs=512K count=1500 status=progress conv=sync
1500+0 records in
1500+0 records out
786432000 bytes (786 MB, 750 MiB) copied, 0.850705 s, 924 MB/s
# dd if=/mnt/sta1/tst of=/dev/null bs=512K count=1500 status=progress iflag=direct conv=sync
1500+0 records in
1500+0 records out
786432000 bytes (786 MB, 750 MiB) copied, 0.327174 s, 2.4 GB/s
- DMのループデバイス、直接使用および無効(950MB / sおよび1.7GB / s)
# dd if=/mnt/sta1/tst of=/dev/null bs=512K count=1500 status=progress
1500+0 records in
1500+0 records out
786432000 bytes (786 MB, 750 MiB) copied, 0.827005 s, 951 MB/s
# dd if=/mnt/sta1/tst of=/dev/null bs=512k count=1500 status=progress iflag=direct
1500+0 records in
1500+0 records out
786432000 bytes (786 MB, 750 MiB) copied, 0.451071 s, 1.7 GB/s
おおまかに言えば、直接フラグを使用できますが、パフォーマンスは約30%低下しますが(ケース3、4、5)、実際の場合は直接フラグを制御できないため、実際のパフォーマンスは60%低下します。 70%(私のシステムでは、直接読み取りなしで約800-1000MB / sです)。
一部のSSDの読み取り速度が同じであると考えると、何か間違っているようです。
デフォルトでは、ループデバイス(ループデバイスに接続されているループファイルではない)から直接読み取る方法はありますか?
ベストアンサー1
ブロックデバイスサポートファイルを生成するために、ファイルシステムをRAMに入れるのは幾分奇妙である。さらに、ramfsは、近年人気が落ちて、より良い調整可能なtmpfsに置き換えられました。カーネル hugepage サポートを通じて速度に大きな差があってはならないと思います。しかし、ramfsはまだ比較的遅く、通常ramfsはtmpfsよりも速く、私のtmpfs(古いDDR3!)は同じbsです。箱>6GB/s。
ramfs/tmpfs を使用する代わりに 1 つだけを作成してください。メモリディスク。ここにあるガイドラインの多くは少し古いものです。インスタントで使用可能なデバイス(またはram1、2 ...)をbrd
作成するには、カーネルモジュールが必要な場合もあれば必要ではない場合もあります。/dev/ram0
おすすめしたいこれ答え:
sudo modprobe brd rd_nr=1 rd_size=$((4 * 1048576))
一方、16kは本当に小さいです。 512kまたは1Mブロックで作業する方が速いかもしれません。 「しかし」あなたは「私のDMは16kブロックを使用するので、これは賢明ではありません!」と言います。
まあ、それはあなたが何をしているかに応じて影響を与える可能性がありますmd
。さらに、ここではユーザ空間の速度は重要ではないかもしれない。コピー速度は、カーネルとユーザースペース間のコンテキスト切り替えの数によって大きく影響されます。
どれだけ早く取得できるかをプレビューするには、iflag=direct
RAMディスクでdd呼び出しを追加してください。
sudo dd if=/dev/ram0 of=/dev/null iflag=direct bs=16k
262144+0 records in
262144+0 records out
4294967296 bytes (4,3 GB, 4,0 GiB) copied, 0,457708 s, 9,4 GB/s
sudo dd if=/dev/ram0 of=/dev/null iflag=direct bs=1M
4096+0 records in
4096+0 records out
4294967296 bytes (4,3 GB, 4,0 GiB) copied, 0,220438 s, 19,5 GB/s