# 고빈도 거래를 포함한 저지연 애플리케이션을 위한 C++ 패턴

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

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=15764](https://news.hada.io/topic?id=15764)
- GeekNews Markdown: [https://news.hada.io/topic/15764.md](https://news.hada.io/topic/15764.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-07-09T17:34:13+09:00
- Updated: 2024-07-09T17:34:13+09:00
- Original source: [arxiv.org](https://arxiv.org/abs/2309.04259)
- Points: 1
- Comments: 1

## Topic Body

### C++ 저지연 애플리케이션을 위한 디자인 패턴

- **저자**: Paul Bilokon, Burak Gunduz
- **제출일**: 2023년 9월 8일
- **주제**: 저지연 코드 최적화, 특히 고빈도 거래(HFT) 시스템에 중점

#### 주요 기여
- **저지연 프로그래밍 저장소 생성**: 실용적인 가이드로, 엄격한 통계적 벤치마킹 포함
- **시장 중립 통계적 차익 거래 전략 최적화**: 속도와 수익성에서 상당한 개선
- **Disruptor 패턴의 C++ 구현**: 전통적인 큐잉 방법보다 성능 향상

#### 평가 지표
- 속도
- 캐시 활용
- 통계적 유의성 등

#### 주요 기술
- **캐시 워밍**: 캐시 초기화로 지연 시간 감소
- **Constexpr**: 컴파일 시간 상수 평가로 성능 향상

#### 미래 방향
- 저장소 확장
- 최적화된 거래 알고리즘의 실시간 거래 환경 테스트
- Disruptor 패턴과 거래 알고리즘 통합하여 종합적인 시스템 벤치마킹

#### 대상 독자
- 학계 및 산업계 실무자

### GN⁺의 정리
이 논문은 저지연 애플리케이션, 특히 고빈도 거래 시스템의 성능을 향상시키기 위한 디자인 패턴을 다룸. 저지연 프로그래밍 저장소와 Disruptor 패턴의 구현은 실무자들에게 유용한 가이드가 될 것임. 캐시 워밍과 Constexpr 같은 기술은 지연 시간 감소에 큰 기여를 함. 이 논문은 성능 최적화에 관심 있는 사람들에게 매우 유익할 것임.

## Comments



### Comment 27110

- Author: neo
- Created: 2024-07-09T17:34:14+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=40908273) 
- 주제에 대한 간단한 소개임
- 학부생들은 이미 기본적인 성능 최적화 요소를 알고 있음
  - 분기 예측, 캐시 일관성, 명령어 캐시 등의 기본 개념을 배움
- 성능 저하 요인인 false sharing에 대해 다루지 않은 점이 놀라움
- 최적화 힌트 속성([[likely]], [[unlikely]]) 등을 다루지 않은 점도 놀라움
- 고급 성능 최적화 요소는 다루지 않음
  - 특정 IO API, 동기화 원시, IPC 메커니즘, 컴파일러 내장 함수 등
- 저지연 프로그래머에게 필요한 것은 불필요한 할당, 복사 등에 대한 경계심임
  - 벤치마크를 통해 성능 저하 요소를 찾는 습관이 필요함
- 저지연 서버를 작성할 때 벡터 IO 작업이 작은 객체를 연속 버퍼에 복사하는 것보다 느리다는 것을 깨달음
  - 무료 복사는 없다는 점을 강조함

- 테스트 결과는 t-통계량과 p-값을 제공함
  - t-통계량은 잔차의 단위근 검정 결과를 나타냄
  - p-값은 검정의 귀무가설이 참일 확률을 제공함
- 이 부분은 LLM을 사용해 작성된 것 같음
- 하루 한 번의 종가를 5년 동안 분석하고 65마이크로초 지연으로 스프레드를 계산하는 예시는 이상함
  - 내부 루프에서 통계를 계산하지 않음
  - 65마이크로초는 내부 루프에 너무 느림
  - 최적화 기법을 연습하기 위한 예시로 보임

- C++로 작성된 주식 거래소 구현체를 공유함
  - LMAX disruptor 패턴을 사용함
  - Rust로 다시 작성하려고 함
  - Rust에서 메모리 관리와 종속성이 더 쉬움

- C++ 로깅 라이브러리를 작성함
  - LMAX disruptor와 유사함
  - HFT 커뮤니티에서 사용됨
  - 성능 저하 없이 상세한 로깅을 가능하게 함
  - 동료들이 성능 저하를 우려해 중요한 정보를 로깅하지 않는 문제를 해결함

- 컴파일 타임 디스패치의 효율성은 함수 호출 결정이 컴파일 단계에서 이루어지기 때문임
  - 컴파일러가 호출되는 함수를 정적으로 결정할 수 있으면, 호출된 함수의 코드를 직접 인라인할 수 있음
  - 모든 함수 호출 오버헤드를 제거하고 추가 최적화를 가능하게 함

- CppCon 2017 발표 자료를 공유함
  - 마이크로초가 영원처럼 느껴질 때라는 주제임
  - 프로 개발자라면 전체 자료를 보는 것이 좋음

- 고빈도 거래가 존재해야 하는 이유가 있는지 의문을 제기함
  - 비트코인이 에너지를 낭비한다고 불평하지만, 고빈도 거래는 사회에 순수한 부정적 영향을 미침
