반응형

container performance 2

4편. 스레드가 많아도 처리량이 늘지 않는 이유

Linux 공식문서로 다시 이해하는 JVM 서버 실행 환경3편에서 Linux 스케줄러는 “빠른 응답”이 아니라 공정함을 목표로 CPU를 나눈다는 점을 살펴봤다.이번 편에서는 그 공정함이 실제 서버 성능에서 어떤 비용으로 나타나는지, 즉 컨텍스트 스위칭과 run queue 관점에서 정리한다.스레드를 늘리면 왜 빨라질 것이라 기대할까서버 개발을 하다 보면 자연스럽게 이런 생각을 하게 된다.요청이 많다동시성이 부족하다그럼 스레드를 늘리자이 논리는 직관적으로는 맞아 보인다.하지만 Linux 관점에서는 이 선택이 항상 성능 향상으로 이어지지 않는다.컨텍스트 스위칭이란 무엇인가CPU는 한 시점에 하나의 스레드만 실행한다.여러 스레드가 동시에 “실행되는 것처럼” 보이는 이유는, CPU가 아주 빠르게 실행 대상을 바꾸..

3편. 리눅스 스케줄러는 공정하지 않다

Linux 공식문서로 다시 이해하는 JVM 서버 실행 환경2편에서 JVM 서버는 fork - exec를 거쳐 하나의 프로세스로 실행되고, 컨테이너 환경에서는 그 프로세스가 자연스럽게 PID 1이 된다는 것을 살펴봤다.이번 편에서는 그 프로세스가 실행된 이후의 이야기다.CPU는 어떻게 나뉘는가왜 스레드를 많이 만들어도 성능이 좋아지지 않을까이 질문의 답은 JVM이나 Spring이 아니라, Linux 스케줄러의 철학에 있다.CPU는 동시에 여러 개의 프로세스를 실행하지 않는다멀티코어 환경에서는 동시에 여러 작업이 실행되는 것처럼 보인다.하지만 단일 코어 기준으로 보면, CPU는 언제나 하나의 작업만 실행한다.Linux의 역할은 단순하다.“누구에게 지금 CPU를 줄 것인가”이 결정을 담당하는 것이 바로 스케줄..

반응형