목차
- nice/renice
- Linux 프로세스 스케줄링
- 프로세스 우선순위
- nice 값
- nice 값 수정 권한
nice/renice
Linux의 nice 및 renice 명령어은 실행 중인 프로세스의 우선 순위를 조정하는 데 사용되므로 시스템 리소스가 다른 작업에 할당되는 방식을 제어할 수 있다. 우선 순위를 조정하여 CPU 시간을 늘리거나 줄이는 프로세스에 영향을 주어 특정 작업이나 시나리오에 대한 시스템 성능을 최적화할 수 있다. 이 명령어를 이해하기 위해 먼저 알아야할 몇가지를 아래에 정리해 놓았다.
Linux 프로세스 스케줄링
최신 컴퓨터 시스템은 여러 명령어 스레드를 동시에 실행할 수 있는 멀티 코어, 멀티 스레드 CPU를 사용한다. 가장 큰 고성능 슈퍼 컴퓨터는 CPU당 처리 코어 및 스레드 구조가 수백 개인 CPU를 수백 또는 수천 개 포함 할 수 있으며, 수백만 개의 명령어 스레드를 병렬로 처리할 수 있다.
단일 사용자가 여러 애플리케이션을 실 행하는 경우 일반적인 데스크탑 시스템이나 개인용 워크스테이션은 CPU 활동으로 포화 상태가 될 수 있지 만, 적절한 규모로 적절하게 구성된 워크스테이션은 사용자가 의도한 워크로드에 맞게 설계된다.
그러나 일반적인 엔터프라이즈 또는 인터넷 서버는 사용자 및 애플리케이션의 요청을 초당 수백 또는 수천 개씩 처리 하므로 CPU가 쉽게 포화 상태가 될 수 있다.
CPU 부하가 있는 모든 시스템은 스레드를 즉시 예약하는 데 필요한 CPU 처리 장치보다 더 많은 프로세스 스레드를 처리해야 하는 시나리오를 경험한다. Linux 및 기타 운영 체제는 타임 슬라이싱 또는 멀티태스킹이라는 기술을 사용하여 프로세스를 관리한다.
운영 체제의 프로세스 스케줄러는 사용 가능한 각 CPU 코어의 프로세스 스레드를 빠르게 전환한다. 이 동 작은 상당한 수의 프로세스가 동시에 실행되고 있다는 인상을 준다.
프로세스 우선순위
각 프로세스에는 이전에 프로세스 우선순위로 알려진 다양한 중요도 측정치가 있다. Linux에서는 CPU 처리 시간을 확보하기 위해 프로세스 구성 및 우선순위 지정 규칙을 정의하는 스케줄링 정책을 구현한다.
Linux에는 대화형 애플리케이션 요청, 비 대화형 배치 애플리케이션 처리, 실시간 애플리케이션 요구 사항을 처리하도록 설계된 다양한 스케줄링 정책이 있다. 실시간 스케줄링 정책에서는 여전히 프로세스 우선순 위와 대기열을 사용하지만, 최근의 비 실시간(일반) 스케줄링 정책에서는 CPU 시간을 기다리는 프로세스를 바이너리 검색 트리로 구성하는 CFS(완전 공정 스케줄러)를 사용한다. 이 프로세스 우선순위 소개에서는 SCHED_NORMAL 또는 SCHED_OTHER라는 기본 스케줄링 정책을 설명한다.
모든 시스템 실시간 프로세스에 일반 프로세스보다 높은 우선순위가 지정되도록 SCHED_NORMAL 정책하에 실행 중인 프로세스에는 정적 실시간 우선순위 0이 할당된다. 그러나 이 정적 우선순위 값은 CPU 스케줄링 을 위해 일반 프로세스 스레드를 구성할 때 포함되지 않는다. 대신 CFS 스케줄링 알고리즘에서 일반 프로 세스 스레드를 이전에 사용한 CPU 시간이 가장 짧은 첫 번째 항목부터 누적 CPU 시간이 가장 긴 마지막 항목 까지 시간가중 바이너리 트리로 정렬한다.
nice 값
바이너리 트리의 순서는 사용자가 수정할 수 있는 프로세스별 nice 값에 따라 추가로 영향을 받는다. 해당 값은 범위가 -20(우선순위 증가)에서 19(우선순위 감소)까지이고 기본값은 0이다. 프로세스는 해당 상위 프 로세스에서 시작 nice 값을 상속한다. nice 값이 클수록 프로세스 우선순위가 기본값에서 감소했음을 나타내며, 해당 프로세스가 다른 프로세스보 다 더 적합한 것으로 기억될 수 있다.
nice 값이 적을수록 프로세스 우선순위가 기본값에서 증가했음을 나타내며, 해당 프로세스가 다른 프로세스보다 덜 적합한 것으로 기억될 수 있다. 프로세스에서 nice 값을 수정하면 바이너리 트리에서 프로세스 스레드의 위치가 높아지거나 낮아진다. nice 값을 늘리면 스레드의 위치가 낮아지고, 값을 줄이면 스레드의 위치가 높아진다
nice 값 수정 권한
권한 있는 사용자는 프로세스의 nice 값을 줄여 프로세스 적합도를 낮출 수 있다. 그러면 프로세스가 바 이너리 트리에서 반복적으로 더 높은 위치에 배치되어 더 자주 예약된다. 포화된 시스템에서는 다른 프로세 스에서 사용할 수 있는 전체 CPU 시간이 줄어든다. 권한이 없는 사용자는 자신의 프로세스에서 nice 값을 늘릴 수만 있다. 그러면 자신의 프로세스 적합도가 높아져 프로세스가 바이너리 트리에서 더 낮은 위치에 배치된다. 권한이 없는 사용자는 중요도를 높이기 위 해 프로세스의 nice 값을 줄일 수 없으며 다른 사용자의 프로세스에 해당하는 nice 값을 조정할 수도 없습니 다.
명령어 사용예
1. nice 명령어
nice 명령어은 지정된 우선 순위("niceness" 값이라고도 함)로 새 프로세스를 시작하는 데 사용된다. 우선 순위 수준의 범위는 -20(가장 높은 우선 순위)에서 19(가장 낮은 우선 순위)까지다. 기본적으로 새 프로세스는 일반적으로 niceness 값이 0인 부모 프로세스의 우선 순위를 상속한다.
nice 명령어의 구문
nice [OPTION] [COMMAND [ARG]...]
예를 들어 우선 순위가 낮은(높은 niceness 값) 프로세스를 시작하려면 다음을 사용한다.
nice -n 10 command_name
2. renice 명령어
renice 명령어은 이미 실행 중인 프로세스의 우선 순위를 수정하는 데 사용된다. 프로세스 ID(PID), 프로세스 그룹 ID(PGID) 또는 사용자 ID(UID)를 지정하여 프로세스의 우선 순위를 조정할 수 있다.
renice 명령어의 구문은 다음과 같다.
renice [-n] PRIORITY [-g|-p|-u] IDENTIFIER...
옵션
-n: 새로운 우선순위(niceness) 값을 지정한다.
-g: 주어진 IDENTIFIER는 PGID다.
-p: 주어진 IDENTIFIER는 PID다(옵션이 제공되지 않은 경우 기본 동작).
-u: 주어진 IDENTIFIER는 UID다.
예를 들어 PID가 12345인 프로세스의 우선 순위를 niceness 값 5로 변경하려면 다음을 사용한다.
renice -n 5 -p 12345
특정 사용자가 소유한 모든 프로세스의 우선 순위를 조정하려면 사용자의 UID와 함께 -u 옵션을 사용한다.
renice -n 5 -u 1001
'Linux > Linux 명령어' 카테고리의 다른 글
[Linux 명령어] swap이란? (+ swap 관련 명령어) (0) | 2023.03.24 |
---|---|
[Linux 명령어] 파티션과 파티션 분할 (parted) (0) | 2023.03.24 |
[Linux 명령어] 연결 및 소켓 정보 확인 (ss) (0) | 2023.03.19 |
[Linux 명령어] 어려운 명령어를 간단하게! (alias) (0) | 2023.03.15 |
[Linux 명령어] 방화벽 관련 명령어 (firewall) (0) | 2023.03.14 |