cpus_allowedとスレッドID番号を理解する方法は?

cpus_allowedとスレッドID番号を理解する方法は?

環境:オペレーティングシステム--debian + python3。
以下のすべての出力情報は重要ではなく無視されます。
マイコンピュータのCPU情報を取得するには、cat /proc/cpuinfoを使用します。

cat /proc/cpuinfo
processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model name  : Intel(R) Celeron(R) CPU G1840 @ 2.80GHz
physical id : 0
siblings    : 2
core id     : 0
cpu cores   : 2

processor   : 1
vendor_id   : GenuineIntel
cpu family  : 6
model name  : Intel(R) Celeron(R) CPU G1840 @ 2.80GHz
physical id : 0
siblings    : 2
core id     : 1
cpu cores   : 2

テストするmthreads.pyは次のとおりです。

import os
import threading
print(os.getpid())
def dead_loop():
    while True:
        pass

t = threading.Thread(target=dead_loop)
t.start()


dead_loop()

t.join()

端末で実行し、のプロセスIDであるpython3 mthreads.py出力を取得します。3455python3 mthreads.py

cat  /proc/3455/status
Name:   python3
Umask:  0022
State:  S (sleeping)
Tgid:   3455
Ngid:   0
Pid:    3455
PPid:   2205
Threads:    2
Cpus_allowed:   3
Cpus_allowed_list:  0-1

端末で実行してください。

python3 mthreads.py
3455

1. 私のコンピュータには2つのCPUがありますが、なぜ私のCPUよりも多くのCPUs_allowedが3つですか?

pstree  3455 -p
python3(3455)───{python3}(3456)

2. 現在 2 つのスレッドが実行中です。 3455はプロセスIDであり、3456はスレッドIDである。どちらが別のスレッドIDですか? 2番目のスレッドのID番号を取得する方法は?

3.どのプロセスIDがどのCPU(cpu0、cpu1)で実行されているかを知りたいです。

ここに画像の説明を入力してください。

答え1

  1. http://man7.org/linux/man-pages/man5/proc.5.html
  • cpus_allowed:このプロセスを実行できるCPUマスク
    (Linux 2.6.24以降、cpuset(7)を参照)。

これは、CPUの数ではなく、単にプログラムスレッドがどのCPUで実行されているかを示します。

  1. PPID は親プロセス ID を表します。確認中のプロセスの親プロセスです。

  2. http://linuxcommand.org/lc3_man_pages/ps1.html

psr現在このプロセスに割り当てられているPSRプロセッサ。

参照用のマニュアルページから直接インポートした例:ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm

この情報のほとんどはマニュアルページで見つけることができますが、ここに含まれるものはわかっています。たくさん情報を追跡するのは難しいかもしれません。

答え2

時にはプロセスID =スレッドIDです。
私のコードを見せてください。

python3 mthreads.py
7761
cat /proc/7761/status|grep Threads
Threads:    2

pstree -p  7761
python3(7761)───{python3}(7762)

LWPは予約可能エンティティの軽量プロセス(スレッド)ID(エイリアスspid、tid)を表し、NLWPはman psページのプロセスのlwps(スレッド)数を表します。

ps -p 7761   -f -L
UID        PID  PPID   LWP  C NLWP STIME TTY          TIME CMD
user   7761  2305  7761 48    2 19:28 pts/1    00:00:09 python3 mthreads.py
user   7761  2305  7762 51    2 19:28 pts/1    00:00:09 python3 mthreads.py

プロセスID--7761には2つのスレッドが含まれています。一方のスレッド ID はプロセス ID と同じ 7761、もう一方のスレッド ID は 7762 です。

関連情報