提高多处理器 Sun Solaris 机器上 sort 命令的性能

提高多处理器 Sun Solaris 机器上 sort 命令的性能

我有一堆(相当大的,即>100MB)逗号分隔的文件,需要在装有 SunOS 5.10 的 4 处理器盒上进行排序

排序似乎运行得相当慢(几分钟)

我想知道是否有任何方法可以加快速度,例如使用多个处理器/核心或者仅使用一些巧妙的排序选项?

PS:我使用整行作为键,因此sort filename > filename.sorted

答案1

答案2

这是我为此目的编写的脚本。在一台 4 处理器的机器上,它将排序性能提高了 100%!(感谢 Bash 提供的提示!)

#! /bin/ksh

MAX_LINES_PER_CHUNK=1000000
ORIGINAL_FILE=$1
SORTED_FILE=$2
CHUNK_FILE_PREFIX=$ORIGINAL_FILE.split.
SORTED_CHUNK_FILES=$CHUNK_FILE_PREFIX*.sorted

usage ()
{
     echo Parallel sort
     echo usage: psort file1 file2
     echo Sorts text file file1 and stores the output in file2
     echo Note: file1 will be split in chunks up to $MAX_LINES_PER_CHUNK lines
     echo  and each chunk will be sorted in parallel
}

# test if we have two arguments on the command line
if [ $# != 2 ]
then
    usage
    exit
fi

#Cleanup any lefover files
rm -f $SORTED_CHUNK_FILES > /dev/null
rm -f $CHUNK_FILE_PREFIX* > /dev/null
rm -f $SORTED_FILE

#Splitting $ORIGINAL_FILE into chunks ...
split -l $MAX_LINES_PER_CHUNK $ORIGINAL_FILE $CHUNK_FILE_PREFIX

for file in $CHUNK_FILE_PREFIX*
do
    sort $file > $file.sorted &
done
wait

#Merging chunks to $SORTED_FILE ...
sort -m $SORTED_CHUNK_FILES > $SORTED_FILE

#Cleanup any lefover files
rm -f $SORTED_CHUNK_FILES > /dev/null
rm -f $CHUNK_FILE_PREFIX* > /dev/null

答案3

不久前我发现了这个脚本:排序工具

我不记得我用它做什么或者它是否有效,所以如果它对你有用,请告诉我。

相关内容