기본/개발/shm

기본/개발/shm

저는 현재 빠른 프로세스 간 및 임시 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/shmdd벤치마킹의 소스로 사용하는 것이 "합법적"입니까? /proc/kcore아니면 /proc/kcore어떤 방식으로든 벤치마크를 제한하시겠습니까?

내가 얼마나 노력했는지 정확히 말할 수는 없다.진짜정말 필요하지만 읽기 및 쓰기 속도가 1GB/s 이상이기를 바랍니다(읽거나 쓸 수 있는 최대 데이터 양은 1GB이고 1초 이내에 완료되기를 원하기 때문입니다).


저는 주로 다음과 같은 방식으로 대규모 배열(50MB~1GB)을 저장합니다.HDF5.

관련 정보