Direct GNU ソートでは、多くのメモリと多くのコアを使用します。

Direct GNU ソートでは、多くのメモリと多くのコアを使用します。

私はかなり大きなテキストファイル(19Gb、10億行)とそれをソートするためにUbuntu 12.04を実行するかなり大きなサーバー(16コア、64Gb RAM)を持っています。

コマンドラインsortユーティリティ(GNU Core Utilities)を使用してこのファイルをすばやくソートするための最良の方法は何ですか?

--parallel 15私は(コアを残して)使用できると信じています。RAMディスクに一時ファイルを保存するなどの機能を使用できます-T /run/shm/sortTmp(それで高速です)。1、使用可能なメモリを利用するために使用することができ、-S 50G一時ファイルの使用量を減らすために調整することができます--batch-size=15(ここで良い値が何であるかわかりません...)。

考慮すべき他のオプションはありますか?良いオプションは何ですか--batch-size?考慮すべき他の事項がありますか?

並べ替え時にコンピュータで他のタスクを実行する必要がないため、すべてのリソースを使用できます。

1. -S一時ファイル用のRAMディスクと一緒に使用することはお勧めできません!sortRAMディスクに書き込んでメモリがいっぱいになると、カーネルがシャットダウンする可能性があります。このコメント)

答え1

誰も答えなかったので、私はそうしました。

sort -T /mnt/tmp --parallel=14 -S 50G myBigFile.txt

どれが良い値なのか、たぶんスマートなのか確信が持て--batch-sizeず、使っていませんでした。sort

/mnt大容量の一時ディスクにインストールされます(マシンはクラウドの仮想マシンです)。/tmpスペースが十分なディスクであれば省略可能です-T。十分なスペースがあり、非常に高速なディスクであれば使用してください。

私の記憶が正しい場合は、ソートされるファイルのサイズと同じスペースが必要です。デフォルトでは、ファイルを複数のチャンクに分割します。各チャンクはメモリ内で並べ替えて一時ディスクに保存し、次の操作を行います。マージソートで最終出力を生成します。

関連情報