RAM 속도보다 느린 Linux tmpfs 쓰기 속도 3.10.0-327.36.3.el7.x86_64. 다음 항목을 사용하여 서버에 tmpfs ramdisk를

HPE ProLiant DL360 Gen9 서버가 있으며 사양은 다음과 같습니다.

  • CPU : Intel Xeon 2 CPU E5-2687W v3 @ 3.10GHz, 25MB L3 캐시, 10 코어 ea
  • RAM : 8x 32GB PC4-17000 DDR4 2133MHz CAS-15 1.2V SDRAM DIMM (총 256GB)

( 여기의 전체 서버 사양 )

서버가 CentOS 7.2커널 로 실행 중 입니다 3.10.0-327.36.3.el7.x86_64.

다음 항목을 사용하여 서버에 tmpfs ramdisk를 마운트했습니다 /etc/fstab.

tmpfs  /ramdisk  tmpfs  noauto,user  0 0

이 램 디스크에 대한 쓰기를 테스트하기 위해 다음 명령을 실행합니다.

time sh -c "dd if=/dev/zero of=/ramdisk/120GB_testfile bs=4k count=30000000 && sync"

58.857 초에 122,880,000,000 바이트를 썼으며 이는 1991 MiB / sec의 쓰기 속도입니다.

이 메모리의 쓰기 속도가 17GB / sec ( 메모리 데이터 속도에 대한 설명에 따라)임을 고려할 때, tmpfs 램 디스크에 쓸 때 상당히 낮은 속도에 놀랐습니다. 누구나 불일치를 설명하고 더 빠른 메모리의 파일에 쓰는 다른 방법을 제안 할 수 있습니까?

감사.

최신 정보

나는 비활성화 vm.swappiness했지만 아무런 이익을 얻지 못했습니다 (1712 MiB / sec).

블록 크기도 늘리려 고했지만 ( bs=256k count=468750), 다시는 큰 영향을 미치지 않습니다 (2087 MiB / sec).



답변

인 메모리 파일 시스템을 사용할 때 RAM에 데이터를 넣는 것보다 더 많은 일이 있습니다. 메모리에서 파일에 대한 모든 할당 위치를 추적하는 것을 포함하여 파일과 관련된 데이터 구조를 처리해야합니다. 이 정보를 작성하는 데에도 시간이 걸립니다 (특히, 수행중인 테스트의 경우 파일 크기가 매번 업데이트 될 때마다 데이터 크기가 메모리에서 변경되는 위치 수를 두 배로 늘림).

또한 메모리 할당 속도 가 매우 느립니다. 실제로, I / O가 포함되지 않은 대부분의 시스템에서 수행 할 수있는 가장 느린 작업 중 하나이며, 새 스레드 나 프로세스를 생성하는 데있어 가장 느린 작업은 유일합니다. ramspeed시작할 때 사용할 모든 메모리를 미리 할당하는 것과 같은 도구 를 사용하여 실제 메모리 성능을 테스트 할 수 있습니다. 이에 비해 tmpfs는 얼마나 큰 파일을 생성할지 모릅니다. 따라서 주문형으로 모든 것을 할당해야하며 dd블록 크기 보다 크지 않은 청크 단위로 할당 해야합니다. 잘 모르겠습니다). 이 때문에 메모리를 할당하여 해당 블록을 저장하기 위해 모든 블록에 오버 헤드가 발생합니다.


답변