병렬로 정렬할 수 있나요?

병렬로 정렬할 수 있나요?

bzip예를 들어 ,보관소, 의 병렬 버전입니다 bzip. 성능을 향상 시키는 병렬화 도구가 있습니까 sort?

답변1

coreutils 8.6(2010-10-15)부터 GNU는 sort사용 가능한 여러 프로세서를 활용하기 위해 정렬을 병렬화했습니다. 따라서 이와 관련하여 개선 pigz또는 pbzip2개선 gzip과 같은 추가 개선이 이루어질 수 없습니다 bzip2.

병렬이 아닌 경우 최신 버전의 GNU를 sort설치해 볼 수 있습니다 .sortGNU 핵심 도구.

GNU 정렬을 사용하면 옵션을 사용하여 스레드 수를 제한할 수 있습니다 --parallel.

답변2

정렬과 관련하여 가장 유용한 것 중 하나는 스와핑을 줄이기 위해 가능한 한 많은 메모리를 제공하는 것입니다. 예를 들면 다음과 같습니다.

sort -S 20G

답변3

파일이 충분히 크면 할당된 가상 메모리가 너무 커지거나 프로그램 sort자체가 블록을 디스크로 스와핑하고 있기 때문에 정렬로 인해 디스크 스와핑이 발생합니다. 이전 sort구현에서는 이러한 "디스크 버퍼별 정렬" 동작이 과거에 대용량 파일을 정렬하는 유일한 방법이었기 때문에 발생할 가능성이 더 높습니다.

sort당신을 도울 수 있는 옵션이 있습니다 -m. 파일을 덩어리로 분할하는 것이 더 빠를 수도 있습니다. 즉, split -l독립적으로 정렬한 다음 함께 병합하는 것입니다.

그렇다면 이것이 바로 "디스크 버퍼별 정렬"이 수행하는 작업일 것입니다. 도움이 되는지 확인하는 유일한 방법은 특정 테스트 부하에 대해 벤치마킹하는 것입니다. 주요 매개변수는 사용자가 제공하는 행 수입니다 split -l.

답변4

sort -n과학적 표기법을 요구하지 않고 선택한 모든 열에 숫자 값(부동 소수점 또는 정수)이 필요한 를 사용하여 매우 큰 이득을 얻었습니다 .

프로세스를 크게 개선할 수 있는 또 다른 방법은 /dev/shm중간 파일에 메모리 매핑 폴더를 사용하는 것입니다.

관련 정보