我目前正在开发一个需要快速进程间和临时 I/O 通信(图像以及大型 hdf5 数组)的软件。数据的“生命周期”是不同的,并且取决于多种因素,但在大多数情况下在几秒到几分钟之间。只有少数文件需要保存更长时间。没有任何数据需要持久保存。
因此,我认为/dev/shm
应该是要走的路。然而,我正在努力进行基准测试/dev/shm
。
我的第一次尝试是:
sudo dd if=/proc/kcore of=/dev/shm/mem count=1000000
...显示以下结果:
1000000+0 records in
1000000+0 records out
512000000 bytes (512 MB, 488 MiB) copied, 0,661147 s, 774 MB/s
但是,当我dd
使用bs
标志运行来指定一次必须读取/写入多少字节时,结果会发生很大变化:
sudo dd if=/proc/kcore of=/dev/shm/mem bs=$((1024*1024)) count=512
...结果是:
512+0 records in
512+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 0,166003 s, 3,2 GB/s
为什么读取/写入非常大的数据块(许多字节,512 次)比多次读取/写入小数据块(1.000.000 次,如第一次尝试)要快得多?
/dev/shm
使用作为源dd
进行基准测试是否“合法” ?/proc/kcore
或者/proc/kcore
以某种方式限制基准?
我无法准确说出我的表现有多少真的确实需要,但我希望有超过 1 GB/s 的读写速度(因为我读取或写入的最大数据量是 1 GB,并且我希望在不到一秒的时间内完成)。
我主要通过以下方式存储大数组(50 MB 至 1 GB)HDF5。