[파이썬] os `os.sched_setaffinity()`, `os.sched_getaffinity()`로 프로세스 CPU 어핀니티 설정 및 조회

1. 프로세스와 CPU 어핀니티

프로세스의 CPU 어핀니티(Affinity)는 해당 프로세스가 사용할 수 있는 CPU의 집합을 나타냅니다. 운영체제는 다중 코어 시스템에서 여러 프로세스를 실행할 때 각 프로세스를 어떤 CPU에 할당할지 결정합니다.

특정 프로세스에 CPU 어핀니티를 설정하면 해당 프로세스는 지정된 CPU들 중에서만 실행될 수 있습니다. 이는 프로세스 성능 향상을 위해 사용되기도 하며, 특정 CPU에 대한 리소스 독립성을 제공하는 데 유용합니다.

Python에서는 os 모듈을 사용하여 프로세스의 CPU 어핀니티를 설정하고 조회할 수 있습니다. os.sched_setaffinity() 함수는 프로세스의 CPU 어핀니티를 설정하고, os.sched_getaffinity() 함수는 현재 프로세스의 CPU 어핀니티를 조회합니다.

2. os.sched_setaffinity()

os.sched_setaffinity() 함수는 프로세스의 CPU 어핀니티를 설정하는 데 사용됩니다. 이 함수는 다음과 같은 형식으로 사용됩니다.

import os

# pid: 대상 프로세스의 ID
# cpus: 어핀할 CPU들의 집합 (list 혹은 set)
os.sched_setaffinity(pid, cpus)

예를 들어, 다음 코드는 현재 프로세스에 CPU 0과 1에 대한 어핀니티를 설정하는 예입니다.

import os

pid = os.getpid()

# CPU 0과 1에 대한 어핀니티 설정
os.sched_setaffinity(pid, {0, 1})

3. os.sched_getaffinity()

os.sched_getaffinity() 함수는 현재 프로세스의 CPU 어핀니티를 조회하는 데 사용됩니다. 이 함수는 다음과 같은 형식으로 사용됩니다.

import os

# pid: 조회할 프로세스의 ID
cpus = os.sched_getaffinity(pid)

예를 들어, 다음 코드는 현재 프로세스의 CPU 어핀니티를 조회하여 출력하는 예입니다.

import os

pid = os.getpid()

# 현재 프로세스의 CPU 어핀니티 조회
cpus = os.sched_getaffinity(pid)
print("CPU Affinity:", cpus)

4. 예외 처리

CPU 어핀니티 설정은 운영체제의 지원 여부에 따라 다를 수 있습니다. 또한, 올바르지 않은 CPU 번호를 지정하는 경우 예외가 발생할 수 있습니다. 따라서 os.sched_setaffinity()os.sched_getaffinity() 함수를 사용할 때는 예외 처리를 해주는 것이 좋습니다.

import os

try:
    pid = os.getpid()

    # CPU 0과 1에 대한 어핀니티 설정
    os.sched_setaffinity(pid, {0, 1})

    # 현재 프로세스의 CPU 어핀니티 조회
    cpus = os.sched_getaffinity(pid)
    print("CPU Affinity:", cpus)

except OSError as e:
    print("Error:", e)

이렇게 예외 처리를 함으로써, 어핀니티 설정 및 조회 중에 발생하는 오류를 처리할 수 있습니다.

5. 결론

Python의 os 모듈을 사용하여 프로세스의 CPU 어핀니티를 설정하고 조회할 수 있습니다. os.sched_setaffinity() 함수는 프로세스의 CPU 어핀니티를 설정하고, os.sched_getaffinity() 함수는 현재 프로세스의 CPU 어핀니티를 조회합니다. 이를 통해 다중 코어 시스템에서 프로세스의 성능 향상과 리소스 독립성을 조절할 수 있습니다.

참고 자료: