Linux
 Computer >> コンピューター >  >> システム >> Linux

LinuxのtasksetコマンドでCPUコアを割り当てる方法|CPUアフィニティ設定ガイド

LinuxのtasksetコマンドでCPUコアを割り当てる方法|CPUアフィニティ設定ガイド

マルチコア処理にはメリットとデメリットの両方があり、場合によってはプログラムに手動でCPUコアを割り当てる(いわゆる「CPUアフィニティ」)ことで、最高のパフォーマンスを引き出せます。Linuxでそのために使われる代表的なツールが「taskset」です。名前だけ聞くと難しそうですが、この記事では手順を細かく分解して、誰でもわかるように解説していきます。

tasksetの基本

tasksetの使い方は大きく分けて2つあります。1つは「これから起動するプログラム」へのCPUアフィニティ設定、もう1つは「すでに実行中のプログラム」への設定です。前者の方が簡単なので、まずはそちらから見ていきましょう。基本的なコマンドの形式は次のとおりです。

taskset -c cpu-core-number(s) application

コア番号を指定する前に注意したいのが、Unix系OSでは番号が0から始まるという点です。つまり、最初のコアは「0」、2番目のコアは「1」となります。デュアルコアマシンならコアは0と1、クアッドコアマシンなら0・1・2・3の4つになります。

例として、デュアルコアシステムでAudacityを2番目のコア(=1)で実行したい場合は、次のコマンドになります。

taskset -c 1 audacity

複数のコアを使う

筆者の環境では、Chromeが動画ストリーミング中にフレーム落ちすることがありましたが、2つのコアに割り当てると安定して動作するようになりました。クアッドコアシステムで同じことを試し、Chromeを3番目と4番目のコア(=2と3)に割り当てたい場合は、次のように入力します。

taskset -c 2,3 google-chrome

CPUアフィニティは連続したコアに限定されません。任意のコアを自由に組み合わせられます。たとえば6コアマシンでChromeを2番目と6番目のコア(=1と5)で使いたい場合は、次のコマンドです。

taskset -c 1,5 google-chrome

ハイフン(“-”)を使えば、アプリケーションを複数のコアにまたがらせることもできます。古いプログラムやシステム機能の多くは、デフォルトで最初のコアを使う傾向があります。そこで、最初のコアはできるだけ空けておき、大きなアプリケーションをそれ以外のすべてのコアに分散させたい場合はどうすればよいでしょうか。

8コアシステムでSteamを2番目から8番目のコア(=1〜7)で実行したい場合は、次のコマンドになります。

taskset -c 1-7 steam

実行中のプログラムのアフィニティを変更する

tasksetはアプリの起動時に使えるだけでなく、すでに実行中のプログラムのCPUアフィニティを後から変更することもできます。ただし、その前にアプリケーションのプロセスID(PID)を調べておく必要があります。

PIDを確認するには、デスクトップ環境のシステムモニターを使っても構いませんが、最も手軽なのはtopコマンドです。

top

画面の右側に実行中のコマンド名が表示され、左側に対応するプロセスIDが表示されます。

LinuxのtasksetコマンドでCPUコアを割り当てる方法|CPUアフィニティ設定ガイド

PIDはメモしておきましょう。ここでは例として、6コア搭載のやや古めのPCでVLCが高解像度のMatroska動画を再生している場面を使います。VLCから最高のパフォーマンスを引き出すべく、さまざまなCPUアフィニティを試してみましょう。

既存プロセスのアフィニティを変更する構文は次のとおりです。

taskset -cp core-numbers PID

上のスクリーンショットでは、VLCのプロセスIDは20485です。4番目〜6番目のコア(Unix番号では3〜5)でVLCを実行してみます。コマンドは以下のようになります。

taskset -cp 3-5 20485

変更する前に現在のアフィニティを確認したい場合は、コア番号を指定せずに実行します。すると、現在の割り当て状況が表示されます。先ほどのコマンドを次のように変えると:

taskset -cp 20485

VLCがすべてのコアに分散されていることがわかります。

LinuxのtasksetコマンドでCPUコアを割り当てる方法|CPUアフィニティ設定ガイド

別のプログラムでも試してみましょう。今度はSMPlayerで大きなMatroskaファイルを再生します。SMPlayerはすでに起動済みで、topによるとPIDは16058です。

LinuxのtasksetコマンドでCPUコアを割り当てる方法|CPUアフィニティ設定ガイド

まずは現在のアフィニティを確認します。-cpオプション付きでコア番号を指定しなければ、現状がすべてのコアに分散していることがわかります。

LinuxのtasksetコマンドでCPUコアを割り当てる方法|CPUアフィニティ設定ガイド

それでは、VLCの実験と同じ3つのコアにSMPlayerを割り当ててみましょう。

taskset -cp 3-5 16058

とても簡単ですね。PCのベンチマークを計画している方は、「CPUストレステストに役立つ8つの便利ツール」のガイドもぜひチェックしてみてください。


  1. LinuxでMicrosoft OneDriveを同期する方法!CLIクライアント「onedrive」の使い方

    近年、プロプライエタリな製品を使わざるを得ない場面は少なくありません。オープンソース愛好家なら、クラウドストレージもオープンなものを選びたいところですが、現実にはGoogle、Amazon、Dropbox、Microsoftといった大手企業がクラウドストレージ市場をほぼ独占しています。これらのサービスは無料で信頼性の高い製品を提供する一方、法的要請への対応や広告配信のためにファイルをスキャン・読み取りする可能性があるのも事実です。しかし、だからといって利用を避ける必要はありません。 OneDriveはMicrosoftが提供するクラウドストレージサービスです。Windowsプラットフォーム向

  2. CinebenchでCPUをベンチマークする方法|R23の使い方と温度管理のコツ

    Ryzen 7 5800Xや5900Xといった高性能な新型CPUを手に入れたなら、その実力をしっかり確かめてみたくなるはずです。新しいCPUのポテンシャルを最大限に引き出して確認する最良の方法がベンチマークテストです。ベンチマークツールは数多く存在しますが、PC愛好家の間で最も人気があるのが「Cinebench」です。 Cinebenchは、約10分という比較的短いテスト時間の中で、独自の画像レンダリング処理によってCPUの全コアに高負荷をかけます。これにより、PC内部の処理能力を正確に把握できます。合成的な計測が中心の他のベンチマークツールと比べ、「実使用環境」に近い、より信頼性の高いスコ