시작
성능 튜닝의 중요성에 대해 정리하고자 합니다.
본문
몇 가지 성능 용어 정리
- 지연 시간(Latency): 요청을 보낸 후 응답을 받을 때까지 걸리는 시간
- 처리량(Throughput): 단위 시간당 처리할 수 있는 요청의 수
- 활용도(Utilization): 시스템의 자원을 얼마나 사용하고 있는지를 나타내는 지표
- 효율성(Efficiency): 시스템이 자원을 얼마나 효율적으로 사용하고 있는지를 나타내는 지표
- 용량(Capacity): 시스템이 처리할 수 있는 요청의 수
- 확장성(Scalability): 시스템이 요청이 증가할 때 얼마나 많은 자원을 추가로 사용할 수 있는지
- 성능 저하(Degradation): 시스템이 요청을 처리하는 데 걸리는 시간이 증가하는 현상
성능 튜닝에서의 시간
- 시간의 정밀도: 최소 시간의 단위
- 시간의 정확도: 시간의 측정값이 실제 시간과 얼마나 차이가 나는지
- 시간의 측정값의 이해: 항상 시간의 측정값을 이해하고 분석해야 함(시간의 정밀도, 정확도)
- 시간의 입상도(granularity) or 구별력(distinguishability): 다른 값과 구별할 수 있는 가장 짧은 시간
- 분산 네트워크에서의 시간: 네트워크의 지연 시간, 분산 시스템 각각의 시간의 차이 등
성능 분석
성능 분석의 핵심은 아래와 같습니다.
- 측정 대상 알기 - 어떤 부분을 측정할 것인지 결정 (예: 응답 시간, 처리량)
- 측정 방법 알기 - 어떻게 측정할 것인지 결정 (예: 로그 분석, 모니터링)
- 성능 목표 알기 - 어떤 성능을 달성할 것인지 결정 (예: 동시 접속자 90명 이상, 응답 시간 1초 이하)
- 언제 멈춰야 할지 알기 - 언제 성능 튜닝을 멈출 것인지 결정 (예: 90%의 성능 목표 달성)
- 성능 튜닝 비용 알기 - 얼마나 비용을 투자할 것인지 결정 (예: 튜닝하는데 1주일, 1억 원, 1명의 개발자)
- 위험성 알기 - 성능 튜닝을 했을 때 발생할 수 있는 위험성을 알아야 함 (예: 성능 튜닝을 했을 때 시스템이 불안정해질 수 있음)
성능 문제가 무엇인지 알기
성능 문제는 하드웨어와 소프트웨어의 성능 간의 불균형, 폰 노이만 병목 현상 등이 있습니다. 뿐만 아니라 네트워크, 디스크, 데이터베이스, 알고리즘 등도 성능 병목의 원인이 될 수 있습니다.
하드웨어와 소프트웨어 성능 간의 불균형
- 무어의 법칙은 인텔의 공동 설립자인 고든 무어가 1965년에 제시한 법칙으로 집적 회로(IC)의 트랜지스터 수가 약 2년마다 두 배로 증가한다는 관찰 결과입니다.
- 무어의 법칙에 따라 성능도 두 배로 증가해야 하는 것 같지만 하드웨어의 성능은 소프트웨어의 성능을 대표할 수 없습니다.
- 소프트웨어의 성능은 조금 더 복잡한 원인이 있습니다. 소프트웨어의 성능은 하드웨어의 성능과는 다르게 무한히 증가할 수 없습니다.
폰 노이만 병목 현상
폰 노이만 구조는 CPU와 메모리가 분리되어 있어 CPU가 메모리에 접근할 때 지연 시간이 발생하는 구조입니다. 이러한 구조적 한계로 인해 메모리 대역폭이 성능 병목의 주요 원인이 될 수 있습니다.
- 레지스터: CPU 내부에 있는 메모리
- L1 캐시: 0.5ns
- L2 캐시: 7ns (14x L1 캐시)
- 메인 메모리: CPU 외부에 있는 메모리
- RAM: 100ns (20x L2 캐시, 200x L1 캐시)
- 솔리드 스테이트 드라이브(SSD): 하드 디스크 대용으로 사용되는 저장 장치
- SSD: 1ms ~1GB/s (4x 메인 메모리)
- 하드 디스크: 데이터를 저장하는 저장 장치
- HDD: 20ms (80x 메인 메모리, 2000x L1 캐시)
캐시 미스
캐시 미스는 캐시에 데이터가 없어서 메인 메모리에서 데이터를 가져오는 현상입니다. 새로 가져온 데이터를 저장하기 위해 기존 있던 캐시 항목 중 하나를 제거해야 합니다. 이때 교체할 캐시 항목을 결정하는 널리 사용되는
알고리즘은 다음과 같습니다.
- LRU(Least Recently Used): 가장 오랫동안 사용하지 않은 캐시 항목을 제거
- LFU(Least Frequently Used): 가장 적게 사용된 캐시 항목을 제거
- FIFO(First In First Out): 가장 먼저 들어온 캐시 항목을 제거
하지만 그래도 캐시 미스가 발생하면 성능 저하가 발생할 수 있습니다.
자바 성능 튜닝의 어려움
자바는 가비지 컬렉션, 스레드 스케주링, JIT 컴파일 등의 기능을 제공하는 관리형 언어입니다. 이러한 기능은 개발자의 생산성을 높이지만 다른 C, C++과 같이 직접 관리하지 않기 때문에 성능 튜닝이 어려울 수
있습니다.
마무리
성능 분석 방법 및 성능 문제에 대해 알아보았습니다. 아직 성능 튜닝의 대행 깊이 있는 내용은 다루지 않았지만 성능 튜닝의 필요성을 알 수 있었습니다.
댓글