RAMFS가 Ram보다 훨씬 느린 이유는 무엇입니까?

RAMFS가 Ram보다 훨씬 느린 이유는 무엇입니까?

내 PC에는 64GB DDR4 3200MHz 메모리가 설치되어 있습니다. 이것을 실행하면 sysbench다음과 같은 결과를 얻습니다.

# sysbench memory --memory-block-size=1M --memory-total-size=10G run
sysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time


Running memory speed test with the following options:
  block size: 1024KiB
  total size: 10240MiB
  operation: write
  scope: global

Initializing worker threads...

Threads started!

Total operations: 10240 (26329.53 per second)

10240.00 MiB transferred (26329.53 MiB/sec)


General statistics:
    total time:                          0.3876s
    total number of events:              10240

Latency (ms):
         min:                                    0.04
         avg:                                    0.04
         max:                                    0.08
         95th percentile:                        0.04
         sum:                                  386.04

Threads fairness:
    events (avg/stddev):           10240.0000/0.00
    execution time (avg/stddev):   0.3860/0.00

최대 26GB/s의 속도로 작동하는 것으로 나타났습니다. 여태까지는 그런대로 잘됐다. 하지만 설치 ramfs하고 유사한 테스트를 시도했을 때 숫자가 크게 떨어졌습니다.

# mount -t ramfs -o size=11G ramfs /mnt/ramfs/
# dd if=/dev/zero of=/mnt/ramfs/zero.img bs=1G count=10  conv=fdatasync
10+0 records in
10+0 records out
10737418240 bytes (11 GB, 10 GiB) copied, 3.51899 s, 3.1 GB/s

내 쓰기 속도는 약 3GB/s에 불과한 것으로 나타났습니다. 파일 시스템에 약간의 오버헤드가 있다는 것을 알고 있지만 26GB/s에서 3GB/s로 이동하면 매우 큰 오버헤드가 됩니다.

업데이트 1 - 또 다른 테스트:

# time head -c 11G /dev/zero > /mnt/ramfs/zero.img

real    0m3.046s
user    0m0.225s
sys     0m2.808s

내가 뭐 잘못 했어요? RAMFS의 성능을 향상시킬 수 있는 방법이 있습니까? RAMFS가 RAM 자체보다 훨씬 느린 이유는 무엇입니까?

답변1

8이라는 요소가 그렇게 크지는 않지만 놀랍지는 않습니다. 벤치마크는 먼저 메모리를 할당한 다음 액세스합니다. 여기에는 파일 시스템 로직이 없으며 물론 해당 메모리를 실제로 매핑하려면 페이지 폴트가 필요하지만 sysbench는 Hugetlb를 사용하여 오버헤드 등을 최소화합니다.

ramfs에 쓰는 것은 실제로 메모리에 대한 벤치마크가 아니라 큰 테이블의 항목을 빠르게 변경하고 여유 메모리 페이지를 찾는 커널의 능력에 대한 것입니다.

관련 정보