메뉴 건너뛰기

(*.168.0.1) 조회 수 301 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

가 크게 작게 위로 아래로 댓글로 가기
Extra Form
출처 https://m.blog.naver.com/wpdls6012/221627856473

05. 프로세스 스케줄러 2

(실습과 그림으로 배우는 리눅스 구조)

​

컨텍스트 스위치

논리 CPU 상에서 동작하는 프로세스가 다른 프로세스로 바뀌는 것을 말함

기본적으로는 타임 슬라이스를 다 소비했을 경우 발생

​

따라서 코드상에서 두 번의 함수콜이 있다고 가정할 때,

두 함수 사이에 프로세스가 멈추고 다른 프로세스가 실행 될 수도 있는 일

​

컨텍스트 스위치의 가능성을 항상 염두해 두자.

ps ax | wc -l

명령어를 통해 프로세스 개수를 셀 수 있음

​

​

프로세스의 상태

- 실행, 실행 대기 ; CPU 할당 대기

- 슬립 ; 이벤트 발생 대기

- ex) 키보드 입력, 디스크 읽기/쓰기, 네트워크 데이터 송수신 대기

- 파일 리드 요청 이후 프로세스는 슬립 상태로 빠졌다가, 읽기 완료시 실행 혹은 대기

- 유저 입력 대기 시 슬립 상태, 유저 입력시 실행 혹은 대기

- 좀비 ; 종료된 뒤 부모 프로세스가 종료 상태를 인식할 때까지 대기

- etc.

​

이러한 프로세스의 상태는 ps ax 명령어의 세 번째 필드 STAT을 통해 알 수 있다

- R ; 실행 or 실행 대기

- S or D ; 슬립

- 시그널에 따라 실행 상태로 되돌아 오는 것이 전자, 그렇지 않은 것이 후자(저장 장치 접근 대기???)

- 일반적으로 D는 수 ms 초 이후에 다른 상태로 바뀌며, 지나치게 오래 지속될 경우 disk I/O가 종료되지 않은 상태로 있거나, 커널 내의 문제를 의심해 봐야한다.

- bash가 슬립상태 인 것은 사용자로부터 입력을 기다리고 있기 때문

- ps ax는 실행 상태

- Z ; 좀비

​

​

​

프로세스의 상태 변환

그림에서 볼 수 있는 것 처럼

프로세스는 생성되는 시점부터 종료되는 시점까지 실행/실행가능/슬립 상태를 수시로 오간다.

​

​

idle 상태

- 특정 논리 CPU에서 아무 프로세스도 돌지 않을 때, CPU의 상태를 의미

- 실제로 CPU에서는 아이들(idle) 프로세스가 동작하고 있다.

- CPU의 특수 명령어를 통해서 논리 CPU를 휴식 상태로 만들어 하나 이상의 프로세스가 실행 가능한 상태가 될 때 까지 소비 전력을 낮추어 대기 상태로 있는다.

- sar 명령어를 통해 시간당 논리 CPU가 얼마나 idle 상태가 되는지 볼 수 있음 (1초마다 체크)

sar -P ALL 1 Average: CPU %user %nice %system %iowait %steal %idle Average: all 0.00 0.00 0.00 0.00 0.00 100.00 Average: 0 0.00 0.00 0.00 0.00 0.00 100.00

무한 루프를 도는 파이썬 프로그램을 데몬으로 돌린뒤 측정해보자.

taskset -c 0 python loop.py &

%user 이 100%로 바뀌는 것을 확인할 수 있다.

​

유저로부터 입력을 받고 (첫 번째 슬립)

입력에 해당하는 파일을 읽는 (두 번째 슬립)

프로세스 0이 있다고 가정하고 아래 그림을 살펴보자.

논리 CPU로 한 번에 한 개의 프로세스만 실행시킬 수 있으며,

슬립 상태에서는 CPU 시간을 사용하지 않는다.

​

​

쓰루풋(throughput)

- 단위 시간당 처리량

- 완료한 프로세스의 수 / 경과시간

레이턴시(latency)

- 각 처리의 시작 ~ 종료까지 경과시간

- 처리 종료 시간 - 처리 시작 시간

​

CPU에 idle 상태가 자주 있는 경우엔, 프로세스를 더 띄움으로써 쓰루풋을 증가시킬 수 있다.

CPU 시간을 타임 슬라이스로 잘게 쪼개어 번갈아가면서 쓰다보니 CPU가 idle한 시간을 줄일 수 있기 때문이다.

​

이전 포스팅에 나온 예제에선 레이턴시가 프로세스 개수에 따라 리니어하게 증가하는 양상을 보였는데,

이유는 논리 CPU가 idle 상태가 거의 되지 않는 상황이었기 때문이다. 이러한 경우엔 쓰루풋은 변하지 않는다.

오히려 %idle이 0일 때 프로세스 개수가 증가하면 컨텍스트 스위치가 오버헤드가 될 수 있다.

​

정리하면, 이상적인 상황에서,

idle 상태가 없고, 실행 대기 상태의 프로세스가 없을 때 쓰루풋 및 레이턴시가 최대화된다.

- 서로 번갈아 쓰면 레이턴시가 길어지니깐!

​

어쨌든 이러한 수치들을 살피면서 시스템을 튜닝 할 때

앞서 살펴본 것 처럼, sar 명령어를 활용해서 지표들을 살피자

​

추가로,

-q 옵션을 주면 runq-sz 필드에 몇 개의 실행/실행대기 프로세스가 있는지 확인할 수 있음

sar -q 1 1 08:59:37 runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked 08:59:38 0 192 0.12 0.03 0.01 0 Average: 0 192 0.12 0.03 0.01 0

​

논리 CPU가 여러 개일 때는

스케쥴러 안에 로드밸런서 및 ​글로벌 스케쥴러라는 기능이 동작.

- 여러 개의 논리 CPU에 프로세스를 공평하게 분배 (로드밸런서)

​

​

정리

- 1개의 CPU에서 동시에 처리되는 프로세스는 1개

- 여러 개의 프로세스가 실행 가능할 경우 각 프로세스를 적절한 타임 슬라이스마다 CPU에서 순차적으로 처리

- 멀티코어 CPU 환경에서는 여러 개의 프로세스를 동시에 동작 시킴으로써 쓰루풋을 올릴 수

- 당연히, 코어 개수 이상의 프로세스를 할당하면 쓰루풋은 오르지 않음

​

​

time 명령어​를 통해서

- 경과 시간 ; real

- (실제) 사용 시간 ; user(사용자 모드), sys(커널 모드; 시스템 콜 실행 시간)

두 개를 측정 가능함

* 멀티코어에서 병렬로 실행 가능성을 염두 (user가 real의 2배라면 2개의 코어에서 실행됐을 가능성)

real 0m4.109s user 0m3.052s sys 0m3.500s
time sleep 10 real 0m10.002s user 0m0.000s sys 0m0.000s

​

ps -eo 명령어!!

- 경과 시간 (elapsed)

- 사용 시간 (time)

의 측정이 가능

ps -eo pid,comm,time,etime PID COMMAND TIME ELAPSED 1 systemd 00:04:28 373-22:28:23 2 kthreadd 00:01:40 373-22:28:23 3 ksoftirqd/0 00:07:40 373-22:28:23 5 kworker/0:0H 00:00:00 373-22:28:23 8 rcu_sched 14:39:44 373-22:28:23 9 rcu_bh 00:00:00 373-22:28:23

​

우선순위 변경!

- 스케쥴러에 관련된 시스템 콜 nice() ; 특정 프로세스에게 우선순위 부여

- (-19 부터 20까지) 세팅 가능하며, 기본값은 0

- 우선순위가 높을 수록 평균보다 더 많은 cpu 시간 배정

nice -n 5 python loop.py & sar -P ALL 1 # nice 필드가 100%로 되어있음

​


List of Articles
번호 제목 날짜 조회 수
22 ps에서 pid 목록만 가져와서 kill하기 ps에서 pid 목록만 가져와서 kill하기 /* * http://sosal.kr/ * made by so_Sal */ 1. 원하는 프로세스 목록만 가져오기 - ps, grep 2. 프로세스 목록에서 pid만... 2023.06.16 820
» 05. 프로세스 스케줄러 2 05. 프로세스 스케줄러 2 (실습과 그림으로 배우는 리눅스 구조) ​ 컨텍스트 스위치 논리 CPU 상에서 동작하는 프로세스가 다른 프로세스로 바뀌는 것을 말함 기... 2023.06.16 301
20 CentOS 7 / SSH / 포트 변경하는 방법 리눅스 서버에 SSH 접속을 하는 공격이 있습니다. SSH Brute Force라고 하는데, 여러 아이디와 비밀번호로 로그인을 시도하는 공격입니다. 이 공격을 방어하는 방... file 2023.04.12 323
19 CentOS 7 / ntp로 시간 동기화 하는 방법 리눅스가 OS인 서버의 시간과 실제 시간을 동기화하는 방법 중의 하나는 ntp를 이용하는 것입니다. CentOS 7에 ntp를 설치하고 설정하는 방법을 요약합니다. ntp... file 2023.04.12 681
18 CentOS 7 / ReHat 7 / ProLinux 7 sendmail 설치 및 세팅 https://yumserv.tistory.com/186 https://yjshin.tistory.com/entry/CentOS-7-%EB%A9%94%EC%9D%BC-%EB%B3%B4%EB%82%B4%EA%B8%B0-SMTP-%EC%84%A4%EC%B9%98-%EA%B0... 2023.03.21 359
17 EOS,EOL,EOD,EOST,EOSL이란? EOS,EOL,EOD,EOST,EOSL이란? 각기 의미는 다르지만 하나의 공통된 것을 공유하고 있습니다. 벤더사(제조사)에서 만드는 '제품'에 대한 '유통 수명'에 관련된 내용... 2023.03.06 632
16 BYOL : Bring Your Own License BYOL이란 무엇입니까? BYOL은 Bring Your Own License(자체 라이선스 가져오기)의 약자입니다. Oracle BYOL을 사용하면 고객이 현재 보유하고 있는 라이선스를 동... 2023.03.06 290
15 리눅스에서 커널 버전, uname -a , cat /proc/version root@jongroinf-aiinfo:~# uname -a Linux jongroinf-aiinfo 5.4.0-144-generic #161~18.04.1-Ubuntu SMP Fri Feb 10 15:55:22 UTC 2023 x86_64 x86_64 x86_64 G... 2023.03.05 312
14 Ubuntu 20.04 LTS (Focal Fossa) 데스크탑 달라진 점과 간단 후기 우분투 20.04 LTS (Focal Fossa) 데스크탑 달라진 점과 간단 후기 2020년 4월 23일에 우분투 20.04 LTS 버전이 릴리즈 됩니다. 저는 12.04 LTS 가 나왔던 대학생 ... 2020.06.22 346
13 Ubuntu 20.04 LTS (Focal Fossa) 데스크탑 설치 후 해야하는 것들 우분투 20.04 LTS (Focal Fossa) 데스크탑 설치 후 해야하는 것들 1. Google Chrome 설치대한민국 만민의 인터넷 브라우저 Chrome 을 설치해줍니다. 우분투에는 ... 2020.06.22 343
12 Ubuntu release 일람표 버전 번호코드명배포일[2]지원 기간[3]커널 버전데스크톱서버4.10Warty Warthog2004년 10월 20일2006년 04월 30일2.6.85.04Hoary Hedgehog2005년 04월 08일2006년... file 2020.06.20 295
11 UMASK 사용법 UMASK 사용법 unix 의 파일 사용권한 --> r the file is readable --> w the file is writable --> x the file is executable * the indicated permission is not... file 2018.12.09 348
10 Ubuntu 18.04 한글 설정 Ubuntu 18.04 한글 설정 1.설치 및 한글 입력 추가설치 sudo apt-get install ibus-hanul Settings – 지역 및 언어 – 입력 소스 + 버튼으로 Korean – hangul 추가... 2018.10.10 297
9 Ubuntu 18.04를 설치한 뒤에 해야 할 6가지 Ubuntu 18.04를 설치한 뒤에 해야 할 6가지 오늘은 이번에 출시 된 우분투 18.04를 설치하고 진행해야 될 6가지를 적어보려합니다. 이 문서를 적으려고 사전 정보... 2018.10.10 308
8 Auto root Login 설정 - Ubuntu 18.04 Auto root Login 설정 - Ubuntu 18.04 1. 설정 환경 Ubuntu 18.04 LTS 64bit, root user 2. root Password 설정 passwd tool을 이용한다. # sudo passwd root Ent... 2018.10.10 462
7 Micro VAX MicroVAX MicroVAX 3600 (left) with disk drive above and printer on right The MicroVAX was a family of low-costminicomputers developed and manufactured ... 2017.03.04 337
6 Linux, Unix, AIX 명령어 비교 대분류 조회 항목 AIX LINUX(Redhat) User Accounts Create new user mkuser useradd   Delete user rmuser userdel General Commands Administrator smit linux... file 2017.02.24 385
5 Ubuntu - 우리가 함께 있기에 내가 있다 우리가 함께 있기에 내가 있다 세상의 모든 아이는 특별하답니다. 나와 내 아이의 행복에서 한 걸음 더 나아가 '우분투'의 마음으로 우리 '함께' 따뜻한 세상을 ... file 2016.05.28 313
4 유닉스 파일 디스크립터 : > /dev/null 2>&1 유닉스 파일 디스크립터 : > /dev/null 2>&1 유닉스 가이드를 읽던 중 아래와 같은 예제 구문이 나왔다. $cat notexist > /dev/null 2>&1 저 /dev/null 2... 2016.05.10 256
3 ab -n 1000 -c 3 http://home.aiinfo.co.kr/ #ab -n 1000 -c 3 / This is ApacheBench, Version 2.3 <$Revision: 1638069 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Lic... 2016.04.05 296
목록
Board Pagination Prev 1 2 3 Next
/ 3