저는 현재 성능 최적화 tar -xf
, 즉 파일 압축 해제 작업을 하고 있습니다.
tar -xf
기본 설정에서 s를 호출하면 write
한 번에 10KiB의 출력이 청크로 기록된다는 것을 알았습니다 . 그러나 현재 설정( O_DIRECT
플래시 저장소에 대한 I/O와 함께 플래그 사용)에서는 이로 인해 심각한 저장소 손실이 발생합니다.
tar
출력 파일에 기록되는 블록 크기를 늘리는 방법이 있습니까 ? 매개변수를 사용하고 있는데 이렇게 하면 성능이 향상된다는 -b
것을 알았습니다 . 이 경우에 이것이 유효한 사용법입니까? (해당 파일은 기본 설정으로 생성됩니다.)tar -b 512 -xvf
2x
tar
처리량을 향상시키기 위해 제가 할 수 있는 다른 방법이 있습니까 tar
?
답변1
tar의 옵션은 -b
tar가 장치에 쓰는 블록 크기를 제어하므로 이것이 원하는 것입니다. 그러나 -b 512
tar(1)에 대한 매뉴얼 페이지는 블록 크기가 512*512 = 262144임을 의미합니다. 모든 블록 크기는 유효하며 tar 출력을 작성하는 장치가 처리할 수 있습니다. 역사적으로 tar 명령은 원래 다른 테이프 드라이브용으로 작성되었으므로 이 명령이 필요했습니다.
답변2
모든 tar 구현에는 성능 문제가 있지만 1990년 이후 star에 내장된 구현은 star
해결되었습니다.FIFO
Star는 기본적으로 8MB FIFO를 생성합니다. 이는 Star가 두 개의 프로세스로 분기되기 때문에 성능 향상에 도움이 됩니다. 한 프로세스는 아카이브를 읽고 다른 프로세스는 tar
추출 작업을 수행합니다. 최신 운영 체제와 최신 테이프 장치를 사용하는 경우 머신의 물리적 메모리의 최대 절반에 해당하는 더 큰 FIFO 크기를 지정하는 것이 좋습니다. 옵션을 봅니다 star fs=
. 최신 테이프 드라이브의 경우 더 많은 것을 권장합니다 fs=256M
. 이렇게 하면 스트리밍 테이프 모드가 불가능할 때 테이프 위치를 변경하여 발생하는 일반적인 테이프 마모 문제가 크게 줄어듭니다.
실제 테이프 장치를 사용하는 경우 생성 시 블록 크기를 늘려야 합니다. 테이프 이식성을 위해 6kB보다 큰 블록 크기를 사용하면 안 됩니다. 로컬 운영 체제 및 드라이브가 더 큰 블록 크기(단순히 FIFO 크기 증가가 아닌)를 지원하는 경우 더 큰 값을 사용하십시오(Asterisk 매뉴얼 페이지 참조).
ZFS와 같은 쓰기 시 복사 파일 시스템을 사용하거나 느린 파일 시스템 버퍼 구현(예: Linux)을 사용하는 경우 Do 에서만 작동하는 파일 시스템 star
으로 전환할 수 있습니다 . . Solaris 및 스타 기본 보안 모드에서는 성능이 10% 미만으로 감소했으며 ZFS 및 느린 Linux 버퍼 구현에서는 이 보안 모드로 인해 성능이 400% 감소했습니다.insecure mode
gtar
-no-fsync
ufs