인터넷에서 cpio가 tar보다 빠르다고 들었습니다.
그래서 쉘 스크립트를 사용하여 확인해 보았습니다.
#1/bin/bash
rm ct.tar ct.cpio
sync && sudo sh -c "/usr/bin/echo 3 > /proc/sys/vm/drop_caches" #nocache
start="$(date -u +%s.%N)"
tar cf cpiotar.tar
end="$(date -u +%s.%N)"
elipsed="$(bc <<<"$end-$start")"
echo "tar $elapsed"
sync && sudo sh -c "/usr/bin/echo 3 > /proc/sys/vm/drop_caches" #nocache
start="$(date -u +%s.%N)"
find $1 -depth | cpio -o > ct.cpio
end="$(date -u +%s.%N)"
elapsed="$(bc <<<"$end-$start")"
echo "cpio $elapsed"
이 쉘 스크립트는 "parameters" 디렉토리를 보관하고 경과 시간을 확인합니다.
크기가 1GB에 가까운 디렉터리로 스크립트를 실행하고 있습니다. 결과는 다음과 같습니다.
tar 74.157502069
cpio 10.269119009
스크립트를 다시 실행하면 결과는 다음과 같습니다.
tar 3.335409300
cpio 7.097516017
결과가 정말 이상하네요.
cpio가 아무런 차이를 보이지 않기 때문에 tar가 갑자기 매우 빨라집니다.
왜 이런 일이 발생합니까?
답변1
아마도 쓰기 캐싱을 다루고 있을 것입니다.
파일 시스템 성능을 측정하려면 항상 다음을 수행하십시오.
$ echo 3 | sudo tee /proc/sys/vm/drop_caches
$ time ( your_commands; sync )
귀하의 예에서는 전화를 걸지 않는 것 같습니다.sync
뒤쪽에파일 쓰기/생성.
쓰기 버퍼링은 파일 시스템에 파일을 생성할 때 기본 스토리지에 즉시 자동으로 기록되지 않음을 의미합니다. 상당한 지연이 있을 수 있습니다.
더 많은 관련 콘텐츠: