ソフトウェア

コアを多数搭載するCPUは「POSIX」によって能力を制限されているとの指摘

by Rudolf Schuba

UNIX系のOSに共通する機能の呼び出し方法などを定めたPOSIXは、「POSIXに準拠するならばどんな環境でも動作する」ことを保証する規格です。POSIXは長年移植可能なアプリケーションの開発を支えてきましたが、システム管理者のチャールズ・フィッシャー氏は「POSIXがマルチコアCPUの能力を制限する要因となっている」と指摘し、「xargs」コマンドを例として具体的な説明を行っています。

Parallel shells with xargs: Utilize all your cpu cores on UNIX and Windows | Linux Journal
https://www.linuxjournal.com/content/parallel-shells-xargs-utilize-all-your-cpu-cores-unix-and-windows

POSIX.2に準拠したシェルには、リソースが利用可能になったことを通知する機能や、統合的なタスクスケジュール管理機能が存在しません。この現状は、POSIX.2制定にあたり、当時の業界が対称型マルチプロセッシングを前提としない保守的な判断を下したことが由来であるとフィッシャー氏は指摘しています。

UNIX系のOSでマルチコアCPUの性能を引き出す場合、一般的には「POSIXスレッド」と呼ばれるマルチスレッド技術を用います。しかし、GNU版の「xargs」コマンドを用いると、メモリ空間を共有するスレッドではなく、メモリ空間を隔離したプロセス単位での並列処理が可能であり、POSIXによる構造的な制限を超えることができるとのこと。POSIXに準拠したシェルでプロセス単位でのタスク管理を行うには、「bg」「fg」「jobs」コマンドなどを用いてプロセスを手動管理する必要があります。

xargsは標準入力から値を読み込み、複数のコマンドラインで処理を実行できるコマンドで、大量のファイルを処理する場合などに利用されます。


GNU版xargsには、同時に実行するプロセス数の上限を指定する「P」オプションと、1回のコマンドラインで使用する入力行数の上限を指定する「L」オプションが存在します。これらのオプションを利用することで、すべての入力に対する処理を別プロセスで立ち上げることが可能。フィッシャー氏はxargsを用いたgzipによるファイル圧縮と、マルチスレッドに対応したgzipコマンドにあたる「pigz」によるファイル圧縮の性能を比較しています。

pigzでファイル圧縮を実行すると、画像のように単一のプロセスが起動します。


xargsを用いると、ファイルごとにプロセスを起動させることが可能です。


プログラムの実行から終了にかかる時間を比較すると、pigzをそのまま用いた場合は「45分51秒.904」、xargsで複数プロセスを立ち上げた場合は「44分42秒.107」と、xargsを用いた場合の方が処理時間が短いという結果になったとのこと。POSIXスレッドによるマルチスレッド処理よりも、xargsでプロセスを分けマルチコアを利用した方が、パフォーマンスが高いということを意味します。この結果についてフィッシャー氏は「ファイル数がCPUのコア数で割り切れることが、xargsによる処理のパフォーマンス向上につながった」とコメントしています。

POSIXによって並列処理の制限を受けることは「現代において異質」なことだとフィッシャー氏は指摘。POSIXは多くの分野で絶対の標準とみなされていますが、SELinuxやsystemdなどの新しい技術を見ると、前世代から続く制限を克服できるかもしれないという希望が湧いてくるとのこと。「移植性は機能性に勝るという主張があるかもしれませんが、技術革新もまた、最終的には伝統に勝る必要があります」とフィッシャー氏は語っています。

この記事のタイトルとURLをコピーする

・関連記事
Linuxディストリビューションの系統図 - GIGAZINE

Linuxはどのようにして生まれたのかをリーナス・トーバルズの述懐から紐解く - GIGAZINE

IntelがIce Lake世代のCPUに施した「目立たないパワーアップ」とは? - GIGAZINE

一つのCPUで複数のスレッドを実行する技術「SMT」が合理的でなくなってきているとの指摘 - GIGAZINE

in ソフトウェア, Posted by log1n_yi

You can read the machine translated English article here.