폴더 삭제가 병렬화되지 않는 이유는 무엇입니까?

폴더 삭제가 병렬화되지 않는 이유는 무엇입니까?

Shift 키를 누른 채 큰 폴더를 삭제하면 다음과 같은 CPU 사용량이 표시됩니다.

여기에 이미지 설명을 입력하세요

모든 상자가 사용되는 것은 아닙니다. 이게 비효율적인가요?

이것은 분할 정복을 통해 쉽게 병렬화할 수 있는 것 같습니다. 항목의 절반을 수동으로 선택하고 삭제한 다음 나머지 절반을 삭제하려고 시도했는데 이로 인해 더 많은 상자가 가득 찼습니다.

재활용이 다른 행동을 보인다고 들었습니다. 하지만 직접 테스트하지는 않았습니다.

답변1

최신 파일 시스템은 쓰기 중에 항상 데이터 무결성이 유지되도록 노력합니다. 과거에는 이것이 성공적으로 완료되거나 전혀 완료되지 않는다는 점에서 "원자적" 쓰기라고 불리는 것을 들었습니다.

디스크 대기열과 캐시를 무시하고 한 번에 하나의 명령만 실제 디스크에 보낼 수 있으며 삭제 작업은 디렉터리 트리에서 항목을 제거하고 표시하는 최종 쓰기 전에 여러 번의 읽기(디렉터리 스캔 등) 등이 될 것입니다. 공간은 무료입니다.

저널링(디스크 작업이 중단된 시점에 따라 앞뒤로 롤백할 수 있음)의 최신 사용과 결합하면 실제로 디스크 컨트롤러에 대한 작업(읽기/탐색/쓰기)을 대기열에 추가하는 데 병목 현상이 발생할 수 있습니다.

휴지통으로 항목을 이동하는 것은 단순히 폴더를 이동하는 것입니다. 더 이상 필요하지 않은 많은 데이터를 표시하는 대신 폴더 구조를 수정하는 것만으로 항목을 "삭제"할 수 있는 방법이 훨씬 적습니다. 휴지통을 비우면 디스크 공간을 다시 확보해야 하는 작업이 다시 시작됩니다.

답변2

이 작업은 CPU가 아니라 디스크에 의해 병목 현상이 발생합니다. 디스크가 변경 사항을 저장할 수 있는 것보다 CPU를 더 빠르게 만들 수는 없습니다. 따라서 CPU는 추가 작업을 제출하기 전에 디스크가 해당 작업을 수행할 때까지 기다립니다.

이 효과는 파일 시스템 오버헤드가 파일 자체의 크기보다 커서 처리하는 데 비정상적으로 오랜 시간이 걸리는 것처럼 보이는 많은 작은 파일에 대한 작업에서 특히 증폭됩니다.

관련 정보