저는 S3 읽기/쓰기에서 매우 기본적인 시간 명령을 실행하고 있습니다. 문제는 시스템 IO의 영향을 받지 않고 메모리에서 테스트하고 싶다는 것입니다. 한 친구가 /dev/null을 파이프로 사용하자고 제안했지만 제 폴더에는 1000개의 파일이 있고 크기는 약 1GB입니다.
내 bash 명령은 이제 다음과 같습니다.
time aws s3 cp folder s3://mybucket/folder
메모리 쓰기 시간만 측정하도록 제안할 사항이 있나요?
매우 감사합니다
답변1
디렉터리를 ramdisk에 복사하고 거기에서 업로드(및 테스트)합니다.
어떤 가상 디스크? 몇 가지 옵션이 있습니다:
아마도 운영 체제에 이미 하나가 있고 그 크기가 충분히 클 수도 있습니다. filesystem 유형 의 출력을 확인합니다
df
(보다 편리하게 지원되는 경우 ) . 아마도 . 전 세계적으로 쓰기 가능하길 원하므로 가상 디스크이고 너무 작지 않으면 사용할 수 있습니다.df -h
tmpfs
/dev/shm
/dev/shm
사용자만을 위한 별도의 램디스크가 있을 수 있습니다. 바라보다이 폴더는 무엇입니까
/run/user/1000
?내 데비안이나 쿠분투에서는df -h "$XDG_RUNTIME_DIR"
그것이 tmpfs인지 확인하고 크기와 마운트 지점을 알 수 있습니다.이 답변주문형 tmpfs(크기 16GiB, 필요와 리소스에 맞게 조정)를 생성하는 방법에 대한 예를 제공합니다.
mount -o size=16G -t tmpfs none /mnt/tmpfs
이 작업을 수행하려면 루트 액세스 권한이 필요합니다.
이런 질문이 있습니다:tmpfs의 크기는 어떻게 결정됩니까? 가득 차면 어떻게 되나요?흥미로울 수도 있습니다.
대안으로 다음을 사용할 수 있습니다.vmtouch
디렉터리의 모든 파일을 읽어 가상 메모리에 매핑합니다. 내가 당신이라면 램디스크를 선호할 것입니다. 그래도 어떤 이유로 램디스크를 사용할 수 없다면 vmtouch
무엇을 할 수 있는지 알아 보는 것이 좋습니다 .
일반 사용자는 다음을 사용할 수 있습니다 vmtouch -t
.
-t
가상 메모리 페이지를 터치하세요. 파일의 각 페이지에서 1바이트를 읽습니다. 페이지가 메모리에 없으면 페이지 부재가 생성되고 페이지가 디스크에서 파일 시스템의 메모리 캐시로 읽혀집니다.
-t
아마도 충분하지 않을 것입니다:
참고: 각 페이지는 메모리에 배치되지만
vmtouch
명령이 완료되면 페이지가 메모리에서 제거될 수 있습니다.
루트로 다음을 사용할 수 있습니다 vmtouch -l
.
-l
페이지를 실제 메모리에 잠급니다. 이 옵션은 모든 메모리 맵을-t
호출mlock(2)
하고 완료 시 설명자를 닫지 않는다는 점을 제외하면 이와 동일하게 작동합니다 . 크롤링이 끝나면 성공하면 vmtouch가 무기한 차단됩니다. 파일은vmtouch
프로세스가 종료될 때까지 실제 메모리에 잠겨 있습니다 .