如何理解cpus_allowed和线程id号?

如何理解cpus_allowed和线程id号?

环境:操作系统--debian + python3。
下面的所有输出信息都忽略不重要。
使用 cat /proc/cpuinfo 获取我的计算机的 cpu 信息:

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()

在终端中运行它python3 mthreads.py,得到输出3455,即 的进程 ID python3 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,为什么cpus_allowed是3个,比我的cpu多?

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

2.现在有2个线程在运行,3455是进程id,3456是线程id,哪个是另一个线程id?如何获取第二个线程的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包含两个线程,一个线程id为7761,与进程id相同,另一个线程id为7762。

相关内容