나는 약간의 문제를 해결하기로 결정했고 btrfs
몇 가지 이상한 성능 이상 현상을 발견했습니다. 제가 수행한 테스트는 두 개의 외장 하드 드라이브를 사용하는 것이었습니다 . 하나는 ext4
다른 하나 는 .btrfs
ext4
실적 결과는 다음과 같습니다.
$ sudo dd if=/dev/zero of=/media/Backup/out.img count=1024 bs=1024k
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 24.1959 s, 44.4 MB/s
$ sudo dd if=/dev/zero of=/media/Backup/out.img count=1024 bs=1024k
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 24.1619 s, 44.4 MB/s
나에게는 44.4MB/s가 일반적이지만 지금은 btrfs
(참고: 파일을 삭제한 직후 항상 3.1GB/s의 높은 IO를 얻는 것 같습니다):
$ sudo dd if=/dev/zero of=/tmp/test/out.img count=1024 bs=1024k
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.347933 s, 3.1 GB/s
$ sudo dd if=/dev/zero of=/tmp/test/out.img count=1024 bs=1024k
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 1.1732 s, 915 MB/s
$ sudo dd if=/dev/zero of=/tmp/test/out.img count=1024 bs=1024k
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 1.21539 s, 883 MB/s
$ sudo dd if=/dev/zero of=/tmp/test/out.img count=1024 bs=1024k
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 1.25093 s, 858 MB/s
내 질문은 여기서 무슨 일이 일어나고 있는 걸까요 btrfs
? 성능 IO가 왜 그렇게 더 높은가요? 심지어 한 번만 실행했는데 sync
즉시 완료되었습니다.
저는 최신의 안정적인 커널을 실행하고 있습니다.
답변1
Brtfs는 전통적인 파일 시스템 이 dd
아니라 대부분의 작업이 하드 드라이브에서 직접 수행되기보다는 메모리에서 수행되는 쓰기 시 복사 및 트랜잭션 파일 시스템입니다.
따라서 삭제 명령을 실행하고 파일을 다시 생성하면 메모리에 있는 내용을 재사용할 뿐입니다. 0으로만 초기화된 파일을 생성한다는 사실을 잊지 마십시오. BRTFS는 시간 초과 후 또는 충분한 페이지에 도달한 경우에만 디스크에 씁니다.
꼭 살펴보시길 권합니다이 파일(PDF). 문제에 대한 더 자세한 설명과 가능한 설명을 제공합니다.
답변2
이 동작은 BTRFS가 지원하기 때문입니다.스파스 파일. 기본적으로 "빈 공간"(0비트)의 충분히 긴 문자열은 실제로 디스크에 0을 쓰는 대신 "이 지점부터 다음 지점까지 모두 0입니다"라고 말하는 메타데이터로 저장됩니다. 이 경우 입력 스트림은 /dev/zero이므로모두파일은 0이므로 디스크의 실제 크기는 메타데이터의 일부에 불과합니다.
하지만 파일을 먼저 삭제한 후 처리량이 눈에 띄게 증가하는 이유는 확실하지 않습니다.