
我目前正在開發一個需要快速進程間和臨時 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。