공부용 블로그

웹서버 벤치마크에서의 user mode와 kernel mode의 의미 본문

설계/WebServer

웹서버 벤치마크에서의 user mode와 kernel mode의 의미

tomato212 2018. 10. 30. 15:53


시스템 모니터링 툴인 NmonChart에서 cpu use 를 보면 System 영역과 User 영역으로 구분되어 있는 것을 볼 수 있다.

이 차이는 무엇일까?


차이점 : 시스템 보안을 위해 접근 가능한 영역을 구분


커널 모드(NmonChart에서 system 이라고 하는 부분) : 모든 자원(드라이버, 메모리, CPU 등)에 접근, 명령을 할 수 있다.

유저모드와는 달리 컴퓨터 내부에 모든 짓을 할 수 있으므로 제한적인 접근만을 허용해서 자원을 안전하게 지킨다. 



유저 모드 : 유저가 접근할 수 있는 부분을 제한적으로 두고 프로그램의 자원에 함부로 접근하지 못하는 모드

우리는 여기서 코드를 작성하고, 프로세스를 실행하는 등의 행동을 할 수 있다.

간단하게 유저 어플리케이션 코드가 유저모드에서 실행된다고 볼 수 있다. 


웹서버를 벤치마크하면서 어떤 웹서버는 CPU 사용량 중 유저부분이 많았고, 또 다른 웹서버는 커널부분이 많았다.

cpu 사용량에서 각각 차지하는 부분이 웹서버의 처리속도와 어떤 관계가 있을까?


추측으로는 kernel 모드의 사용량이 많을수록 웹서버 처리속도는 느려진다고 볼 수 있다. 

처리속도가 더 느린 것 : kernel > user


그리고 프레임워크인 netty나 vertx같은 웹서버들은 kernel 영역보다 user 영역의 사용량이 상대적(netty, vertx의 kernel 영역보다)으로 훨씬 더 높았다.

그럼 웹서버의 처리속도가 빠를 것 같지만 kernel의 사용량이 더 많은 nginx 보다 느리게 나왔다. 그 이유는 (어떻게보면 당연하지만) 절대적인 수치로 비교했을 때 nginx의 kernel사용량이 더 적었고, 전체 cpu사용량도 훨씬 낮았다. 


즉 netty 에서 kernel 3 / user 23 = 총 26 이었다면

nginx kernel 2.5 / user 2 = 총 4.5 이었다. 


그럼 kernel 부분이 user 부분에 비해서 처리속도가 훨씬 느리다는 것만 증명할 수 있다면

이것이 웹서버 처리속도에 미치는 영향 중 하나라는 것을 이해할 수 있다.



참고 http://www.cs.iit.edu/~cs561/cs450/ChilkuriDineshThreads/dinesh's%20files/User%20and%20Kernel%20Level%20Threads.html


'설계 > WebServer' 카테고리의 다른 글

in-memory DB와 디스크기반(traditional) 데이터베이스  (0) 2018.11.06
Nginx에 관한 이해  (0) 2018.10.30
Web Server 보충  (0) 2018.10.30
Jetty 설치  (0) 2018.10.27
ubuntu 16.04 $JAVA_HOME 설정  (0) 2018.10.25