RAM 속도보다 느린 Linux tmpfs 쓰기 속도


1

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).


1
개수를 줄이면서 블록 크기를 늘리면 어떻게됩니까? Tmpfs는 스왑 메모리로 백업됩니다. 데이터가 페이징 아웃되지 않아 속도가 느려지는 것이 얼마나 확실합니까? vm.swappiness0 또는 1로 설정 했습니까 ?
Mokubai

@ Mokubai, swappiness가 기본값 (60)으로 설정되었습니다. RAM에 완전히 들어갈 수 있도록 파일을 충분히 작게 만들어 스와핑을 피하고 있다고 생각했습니다. 나는 swappiness를 비활성화하려고 시도하고 결과를 포함한 게시물을 업데이트합니다. 감사.
atreyu

tmpfs에 테스트를 반복적으로 작성하면 일반적으로 속도가 달라 지지만 일반적으로 더 작은 크기를 사용하고 있으므로 원인이 확실하지 않은 경우 tmpfs의 메모리에서 비워 질 수 있습니다. 동일한 테스트를 몇 번 연속 실행할 때 변경 사항이 있습니까? 아니면 램프를 사용합니까? (참고로, ramfs는 실제로 ram에 머물면서보다 정확한 "ramdisk"여야하지만 크기 제한이 없으므로 조심하십시오)
Xen2050

답변:


3

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

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


dd는 그렇지 않지만 파일의 크기를 알고 있기 때문에 파일 복사 속도가 더 빠를 것이라고 생각하십니까? 또는 cp속도 를 측정 하거나 tmpfs / ramfs에 다른 파일을 복사하지 않고 / dev / zero와 같은 고정 크기 파일을 만드는 방법 (판독을 추가하여 테스트 속도를 늦추는 방법)?
Xen2050

자신의 핵심, cp그리고 dd본질적으로 같은 일을하고, 그들은 소스에서 데이터를 읽고 다음 대상에 씁니다. cp일반적으로 조금 더 빠르지 만 작업하기에 가장 적합한 블록 크기를 자동으로 파악하기 때문입니다. cp매우 특수한 상황에서도 다양한 복사 오프로드 메커니즘 (예 : 파일 시스템의 참조 링크 또는이를 지원하는 하드웨어의 SCSI XCOPY 명령)을 사용할 수 있기 때문에 훨씬 더 빠를 수 있습니다.
Austin Hemmelgarn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.