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
블록 크기 보다 크지 않은 청크 단위로 할당 해야합니다. 잘 모르겠습니다). 이 때문에 메모리를 할당하여 해당 블록을 저장하기 위해 모든 블록에 오버 헤드가 발생합니다.