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が実行されていることが確認できました。