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. 내 컴퓨터에는 CPU가 2개 있는데 왜 내 CPU보다 많은 CPUs_allowed가 3인가요?

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는 프로세스 ID와 동일한 7761이고 다른 스레드 ID는 7762입니다.

관련 정보