# 더 빠른 인스턴스로 옮겼는데 성능이 안 나오면 어디를 봐야 할까?

> Clean Markdown view of GeekNews topic #7911. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=7911](https://news.hada.io/topic?id=7911)
- GeekNews Markdown: [https://news.hada.io/topic/7911.md](https://news.hada.io/topic/7911.md)
- Type: news
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2022-11-29T10:05:02+09:00
- Updated: 2022-11-29T10:05:02+09:00
- Original source: [netflixtechblog.com](https://netflixtechblog.com/seeing-through-hardware-counters-a-journey-to-threefold-performance-increase-2721924a2822)
- Points: 34
- Comments: 2

## Topic Body

- 넷플릭스가 CPU-Heavy한 Java Microservice를 m5.4xl(16 vCPU)에서 m5.12xl(48 vCPU)로 이관  
- vCPU가 3배이므로 대략 3배의 성능 향상을 기대했지만, 처리량이 25%만 증가하는 상황이 발생   
  - 심지어 레이턴시가 50% 감소하고, CPU와 레이턴시 패턴 모두 '끊김'이 심해져버림(Choppy)  
- 이를 해결하기 위한 여정들을 저수준 레벨까지 정리한 글   
### 해결 과정  
- 빠른 노드와 느린 노드를 비교해 보기로 함   
- Flame Graph 와 JVM 프로파일링(JFR-Java Flight Recorder 활용) 으로는 차이를 알수가 없었음   
- 앱/OS/JVM 수준에서는 이상한게 없어서 m5.12xl 인스턴스가 제공하는 PMC(Performance Monitoring Counters, PMU Counter)를 살펴봄   
- 문제 중 하나는 "False Sharing" - 2개의 코어가 동일한 L1캐시 라인을 공유하는 관련없는 변수를 읽거나 쓸때 생기는 패턴   
  - JDK 코드에서 기능은 바꾸지 않고, 데이터 레이아웃만 변경하는 패딩 바이트를 삽입하여 요 문제를 해결   
- 또 다른 문제는 "True Sharing" - 동일한 변수를 여러 쓰레드/코어에서 읽고 쓰는 것   
  - 이를 해결하기 위해 공유 변수에 쓰지 않고 JVM의 세컨더리 슈퍼 클래스 캐시를 우회   
- 두가지 모두 패치하자 처음보다 3.5배 속도가 향상  
- 이 문제를 해결하는 동안 5년동안 휴면상태로 있던 버그인 JDK-8180450에 대해서 알게 됨   
### 결론  
- JVM이 C++ 같은 성능지향 언어와 경쟁하는 고도로 최적화된 런타임 환경이라고 생각하는 경향이 있음   
- 대부분의 워크로드에는 그렇지만, 특정 워크로드에 있어서는 애플리케이션의 구현 뿐만 아니라, JVM자체의 구현에 의해서도 영향 받을 수 있음   
- 이번 경우는 JVM의 네이티브 코드에서 병목 현상을 찾아 패치하여, 해당 워크로드의 처리량을 3배 이상 향상 시키기 위해 PMC를 활용 했음   
- 이런 종류의 성능 문제에 관해서는 CPU 마이크로아키텍처 수준에서 실행을 검사하는 능력이 유일한 해결책임   
- Intel vTune은 m5.12xl 같은 인스턴스에서 노출되는 핵심 PMC 만으로도 귀중한 통찰력을 제공   
- 클라우드의 모든 인스턴스들이 PEBS(Processor Event-Based Sampling)와 함께 포괄적인 PMC 세트를 제공한다면 더 심층적인 분석을 통해서 훨씬 더 큰 성능 향상을 할 수 있을 것

## Comments



### Comment 13595

- Author: roxie
- Created: 2022-12-05T11:20:21+09:00
- Points: 1

와 대체...

### Comment 13590

- Author: ragingwind
- Created: 2022-12-05T09:58:54+09:00
- Points: 1

가설이 검증되어 수정되었을때는 짜릿했겠네요.
