GNU/Linux >> Linux の 問題 >  >> Linux

初心者向けのLinuxタスクセットコマンドチュートリアル(例付き)

プロセッサ親和性という用語を聞いたことがありますか?これは、プロセスを特定の中央処理装置または一連のCPUにバインドまたはバインド解除できるようにする機能です。はい、特定のプロセスを実行するためにどのCPUコアを使用する必要があるかをシステムに伝えることができます。プロセッサ親和性が存在する理由の理論的な詳細については、こちらをご覧ください。

ここでは、このチュートリアルで、タスクセットと呼ばれるユーティリティについて説明します。 -これにより、プロセッサアフィニティを実現できます。ただし、その前に、このチュートリアルのすべての例がUbuntu20.04LTSマシンとDebian10でテストされていることを言及する価値があります。

Linuxタスクセットコマンド

tasksetコマンドを使用すると、プロセスのCPUアフィニティを設定または取得できます。その構文は次のとおりです。

taskset [options] mask command [argument...]
taskset [options] -p [mask] pid

ツールのマニュアルページで説明されている方法は次のとおりです。

       taskset  is  used  to  set  or  retrieve  the CPU affinity of a running
       process given its pid, or to launch a new  command  with  a  given  CPU
       affinity.   CPU affinity is a scheduler property that "bonds" a process
       to a given set of CPUs on the system.  The Linux scheduler  will  honor
       the  given CPU affinity and the process will not run on any other CPUs.
       Note that the Linux scheduler also supports natural CPU  affinity:  the
       scheduler attempts to keep processes on the same CPU as long as practi?
       cal for performance reasons.  Therefore, forcing a specific CPU  affin?
       ity is useful only in certain applications.

       The CPU affinity is represented as a bitmask, with the lowest order bit
       corresponding to the first logical CPU and the highest order bit corre?
       sponding  to  the  last logical CPU.  Not all CPUs may exist on a given
       system but a mask may specify more CPUs than are present.  A  retrieved
       mask  will  reflect only the bits that correspond to CPUs physically on
       the system.  If an invalid mask is given (i.e., one that corresponds to
       no  valid  CPUs on the current system) an error is returned.  The masks
       may be specified in hexadecimal (with or without a leading "0x"), or as
       a CPU list with the --cpu-list option.  For example,

           0x00000001  is processor #0,

           0x00000003  is processors #0 and #1,

           0xFFFFFFFF  is processors #0 through #31,

           32          is processors #1, #4, and #5,

           --cpu-list 0-2,6
                       is processors #0, #1, #2, and #6.

       When  taskset returns, it is guaranteed that the given program has been
       scheduled to a legal CPU.

以下は、タスクセットコマンドがどのように機能するかをよりよく理解するためのQ&Aスタイルの例です。

Q1。タスクセットを使用してプロセスのCPUアフィニティを取得するにはどうすればよいですか?

タスクセットにすでに実行中のプロセスのCPUアフィニティを表示する場合は、次の方法でコマンドを使用します。

taskset -p [PID]

PIDを、CPUアフィニティを取得するプロセスのIDに置き換えるだけです。例:

taskset -p 9726

上記のコマンドは次の出力を返しました:

pid 9726's current affinity mask: f

したがって、ここでの16進値'f'は、プロセスが4つのプロセッサコア(0、1、2、3)のいずれかで実行できることを意味します。

CPU範囲で出力したい場合は、-cコマンドラインオプションを追加できます。

taskset -cp 9726

この場合の出力は次のとおりです。

pid 9726's current affinity list: 0-3

Q2。タスクセットを使用してCPUアフィニティを変更するにはどうすればよいですか?

既存のプロセスのCPUアフィニティを微調整するには、(前のセクションで行ったように)プロセスIDと、新しいアフィニティを定義する16進マスクを指定する必要があります。

たとえば、Geditプロセス(PID:9726)の現在のCPUアフィニティは「f」です。

アフィニティを0x11に変更するには、次のコマンドを使用します。

taskset -p 0x11 9726

次に、次のコマンドを使用して、新しいアフィニティを再度確認できます。

taskset -p 9726

次のスクリーンショットは、私の場合のこれらのコマンドの出力を示しています。

これで、アフィニティが変更されたことがわかります。

Q3。アフィニティを変更しながらCPUの範囲を割り当てる方法は?

これは大したことではありません。前のセクションで使用したコマンドに、入力としてCPUコア範囲とともに-cコマンドラインオプションを追加するだけです。

例を次に示します:

タスクセット-cp0,39726

この場合に生成される出力は次のとおりです:

pid 9726's current affinity list: 0
pid 9726's new affinity list: 0,3

Q4。事前定義されたCPUアフィニティを使用してプロセスを起動するにはどうすればよいですか?

はい、CPUアフィニティを設定してプロセスを起動することもできます。

たとえば、CPUアフィニティ0xaでテキストgeditエディターを起動しました。

タスクセット0xagedit

結論

同意しました。tasksetコマンドは、平均的なコマンドラインユーザー向けではありません。これは主に、マルチコア環境でのプロセス最適化のためにサーバー側の専門家によって使用されます。ここでは、ツールの基本について説明しました。詳細については、manページにアクセスしてください。


Linux
  1. Linuxは初心者向けのコマンドチュートリアルを展開します(例付き)

  2. 初心者向けのLinuxファクターコマンドチュートリアル(例付き)

  3. Linux yes初心者向けコマンドチュートリアル(例付き)

  1. 初心者向けのLinuxnprocコマンドチュートリアル(例付き)

  2. 初心者向けのLinuxtacコマンドチュートリアル(例付き)

  3. Linuxユーザー初心者向けコマンドチュートリアル(例付き)

  1. 初心者向けのLinuxsumコマンドチュートリアル(例付き)

  2. 初心者向けのLinuxsleepコマンドチュートリアル(例付き)

  3. 初心者向けのLinuxbasenameコマンドチュートリアル(例付き)