Engineering Note

プログラミングなどの技術的なメモ

tasksetコマンドで使用するCPUを指定する

console

Linux環境であるプロセスを実行する際にCPUコアを指定して実行することができます。

これを実現するためにtasksetコマンドの使い方について学んでいきます。

 

 

CPUの数を確認する

まずは使用している環境のCPUの数を確認していきます。

今回はRaspberry Piの論理プロセッサの数について、以下コマンドで確認することができます。

 

 $ grep 'processor' /proc/cpuinfo
 processor	: 0
 processor	: 1
 processor	: 2
 processor	: 3

 

CPUの数は4つで、番号は0〜3であることが確認できました。

 

tasksetコマンドの使い方

それでは、CPUを指定してバックグラウンドでsleepコマンドを実行してみます。

コマンドは、taskset -c [cpu_number] commandになり、今回はCPU1を指定してみます。

 

 $ taskset -c 1 sleep 60 &

 

topコマンドで確認する

上記で実行したコマンドが、指定したCPUで実行されているかtopコマンドで確認していきます。

 

 $ top
 top - 20:47:58 up 33 min,  2 users,  load average: 0.00, 0.00, 0.00
 Tasks: 130 total,   1 running,  78 sleeping,   0 stopped,   1 zombie
 %Cpu(s):  0.3 us,  0.4 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
 KiB Mem :   948308 total,   682552 free,    77596 used,   188160 buff/cache
 KiB Swap:   102396 total,   102396 free,        0 used.   802392 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND    
 1005 xxx        20   0    7588   3236   2776 R   2.0  0.3   0:00.66 top        

 

top起動時のデフォルトフィールドにはCPU番号が表示されないため、キーボードのfを押下し、メニュー画面を開いてフィールドを追加していきます。

メニュー画面を開くと、左に*がついているのが現在表示されているフィールドとなり、P = Last Used Cpuの箇所にカーソル合わせSpaceキーを押下すると、同じように*が付与されます。

 

Fields Management for window 1:Def, whose current sort field is %CPU
   Navigate with Up/Dn, Right selects for move then <Enter> or Left commits,
   'd' or <space> toggles display, 's' sets sort.  Use 'q' or <esc> to end!

* PID     = Process Id      PGRP    = Process Group   OOMs    = OOMEM Score c
* USER    = Effective Use   TTY     = Controlling T   ENVIRON = Environment v
* PR      = Priority        TPGID   = Tty Process G   vMj     = Major Faults 
* NI      = Nice Value      SID     = Session Id      vMn     = Minor Faults 
* VIRT    = Virtual Image   nTH     = Number of Thr   USED    = Res+Swap Size
* RES     = Resident Size * P       = Last Used Cpu   nsIPC   = IPC namespace
* SHR     = Shared Memory   TIME    = CPU Time        nsMNT   = MNT namespace
* S       = Process Statu   SWAP    = Swapped Size    nsNET   = NET namespace
* %CPU    = CPU Usage       CODE    = Code Size (Ki   nsPID   = PID namespace
* %MEM    = Memory Usage    DATA    = Data+Stack (K   nsUSER  = USER namespac
* TIME+   = CPU Time, hun   nMaj    = Major Page Fa   nsUTS   = UTS namespace
* COMMAND = Command Name/   nMin    = Minor Page Fa   LXC     = LXC container

 

設定が完了したらqを押下しメニュー画面を閉じます。

すると、画面の右側にPのフィールドが追加され、プロセスを実行しているCPU番号が確認できます。

今回はsleepコマンドを実行したため、Shift + Lを押下し文字列検索を有効にしてsleepと入力してEnterキーを押下します。

 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND   P
 1078 xxx        20   0    2944    332    272 S   0.0  0.0   0:00.00 sleep     1

 

tasksetで指定したCPUでsleepが実行されていることが確認できました。

 

参考書籍

新しいLinuxの教科書