성능 엔지니어링
성능은 주관적이다.
평균 디스크 I/O 응답 시간은 1ms 이다.
- 어떤 사용자에게는 빠르고, 다른 사람에겐 느리다.
- 목표를 명확하게 설정함으로써 객관화가 가능하다.
( 목표 평균 응답 시간을 정한다, 요청의 일정 비율이 특정 지연시간 이내에 처리되어야 한다.)
가장 적합한 지표는 지연 시간이다.
지연시간은 구체적인 맥락이 필요하다 (연결 지연 시간, 요청 지연 시간, … )
페이지 폴트, 컨텍스트 스위치, 기타 여러 가지 시스템 지표의 정의를 안다고 해서
활용 방안이나, 각종 징조를 해결책으로 옮겨 나가야 할지는 모른다.
S/W, H/W, 성능 도구 그리고 성능 튜닝 파라미터까지 모두 변화가 있었지만, 이론과 방법론은 변하지 않았다.
| IOPS ( Input/Output operations per second) | - 초당 입출력 연산 수 - 데이터 전송 연산에 대한 측정값 중 하나. - 디스크 I/O의 경우 IOPS는 초당 읽기와 쓰기 횟수를 의미 |
|---|---|
| 스루풋 ( throughput ) | - 단위 시간당 처리량 - 데이터 전송 속도 ( 초당 바이트, 초당 비트 수 ) - 연산 속도 ( 초당 작업 수 또는 초당 트랜잭셕 수)를 의미하기도 함 |
| 응답 시간 ( response time ) | - 연산이 완료될 때 까지 걸리는 시간 - 대기 시간, 처리에 소요되는 시간, 결과를 전송하는 데 걸리는 시간 포함 |
| 지연 시간 ( Latency ) | - 요청에 대한 처리를 받기까지 기다려야 하는 시간 - 응답 시간과의 차이 - 지연 시간이라는 단어는 모호하다. (TCP 연결 지연시간 처럼 측정 대상을 명확하게 구분해야 한다.) |
| 사용률 ( utilization ) | - 해당 자원이 얼마나 바쁜가를 측정하는 기준 - Ex. CPU, 메모리 사용률 |
| 포화도 ( saturation ) | - 큐에 처리하지 못한 작업이 얼마나 많이 남아 있는지 정도 |
| 병목 지점 ( bottleneck ) | - 전체 시스템의 성능을 제약하는 자원 |
| 워크로드 ( workload ) | - 시스템에 가해지거나 적용되는 부하 - Ex) DB에서는 클라이언트가 보낸 쿼리 |
| 캐시 ( Cache ) | - 더 느린 저장 장치와 직접 통신하지 않고도 데이터를 빠르게 처리하기 위해 사용되는 저장 공간 |
응답 시간 VS 지연 시간

Cache 관련 예시
초당 100번의 네트워크 I/O와 50번의 디스크 I/O의 성능 비교
캐시 히트율
캐시 히트율 98%, 99% 차이는 10%와 11% 사이의 차이보다 성능 향상에 더 큰 영향을 미친다.
-> 히트와 미스의 속도 차이 때문.
-> 미스 시 데이터를 읽어오는 두 저장 장치 간의 속도 차이가 클 수록, 더 가파르다.
A의 캐시 히트율 : 90%
B의 캐시 히트율 : 80%
But
A의 초당 미스가 200회, B의 초당 미스가 20회라면 ?
-> B가 훨씬 빠르게 끝남.
워크로드의 전체 실행 시간 계산.
히트 지연 시간 : 1ms, 미스 지연 시간 : 10ms
A 미스율 10%, 초당 미스 200회, 초당 액세스 2000회 => 3.8초
B 미스율 20%, 초당 미스 20회, 초당 액세스 100회 => 0.28초
파일 시스템 레코드 크기
네트워크 버퍼 크기
Application 수준의 튜닝
저장 장치 수준으로 내려가서 튜닝을 진행
Application을 튜닝하는게 가장 효과적이다.
다만, 관찰자의 시작점을 Application에 두는 게 항상 효율적이지는 않다.
느린 쿼리는 CPU 사용 시간이나 파일 시스템 및 디스크 I/O 관점과 같은 하위 계층에서 이해하는 것이 더 유리할 수 있다.
Application은 지속적으로 개발되고, 매주 또는 매일 변경된다.
운영 체제 분석을 소홀히 해서는 안된다.
조직이나 환경에 따라 성능 요구사항이 달라진다.
성능 분석에 대한 투자 대비 효용이 다르다.
분석을 언제 중단할 것인가?
큰 도전 중 하나는 언제 멈춰야 할지 결정하는 일이다.
성능 분석 중단을 고려할 수 있는 시나리오
1. 성능 문제의 주요 원인을 설명할 수 있을 때
2. 잠재적 ROI가 분석 비용보다 적을 때
3. 더 큰 ROI가 기대되는 다른 문제가 있을 때
잠재적 RIO가 일상적인 업무에서 분석 우선순위를 정하는 기준으로 가져가야 한다.
성능 개선의 한시성
인터넷에서 찾은 튜닝 파라미터 값으로 성능을 빠르게 개선할 수 있지만, 이는 일부 상황에 해당한다.
다른 사람의 벽장을 뒤져서 자신에게 적합하지 않은 아무 약이나 가져와서 먹는 행위
튜닝 파라미터를 변경할 때에는 버전 관리 시스템에 변경 이력을 상세한 설명과 함께 저장해야 한다.
퍼펫, 솔트, 셰프와 같은 설정 관리 도구
부하에 따른 스루풋 변화

자원에 대한 경쟁이 시작되는 지점에서 스루풋이 감소한다.
-> 무릎점 이라고 부름.
자원 경쟁이 심화되어 오버헤드 때문에 완료되는 작업이 줄어든다. ( 컨텍스트 스위칭 )
-> 이를 포화 지점이라고 한다.
빠른 성능 저하 : 메모리 부하 ( 메모리 페이지를 디스크로 옮길 때 )
느린 성능 저하 : CPU 부하
응답 시간 측면에서 선형 확장성을 유지하려면, 큐에 작업을 추가하는 것 말고
자원이 부족할 때 오류를 반환하는 식으로 설계되어야 한다.
-> 503 오류를 반환해서 응답 시간을 일정하게 유지
이미 알고 있는 것들
모른다는 것을 아는 것들
모른다는 것을 모르는 것들
알면 알수록 모르는 것이 더 많아진다.
분석을 어디서 시작할지 보여주고 따를 만한 효과적인 절차를 제시한다.
가로등 반방법론
어느날 밤 한 주정뱅이가 가로등 아래서 뭔가를 찾고 있었다.
경찰관이 물어보자 주정뱅이는 열쇠를 잃어버렸다고한다.
경찰도 함께 열쇠를 찾아봤지만 찾을 수가 없었다.
경찰은 물었다. "열쇠를 이 가로등 아래에서 잃어버린 것이 확실해요 ?"
주정뱅이는 대답했다. "아니요. 하지만 여기가 제일 밝거든요."
다른 사람 비난 반방법론
체크 리스트 방법론
앞 내용은 너무 이론적인 소개 느낌이었다.
3장 부터 운영체제이니, 이제 시작일 듯.