dev.Log
하이퍼스레딩 본문
엔진개발자가 엔진 객체 생성제한을 물리코어수 -1로 설정해두었는데 실제로 물리코어 수 만큼 객체가 생성되지않을뿐더러 (계산식이 이상헀다) 물리코어가 32개인 서버에서 물리코어수 -1 까지 부하테스트를 수행했음에도 충분히 서버의 자원을 활용하지 못하는 상황이 있었다..그래서 해당 이슈를 공유하고 수정요청을 드렸다
하이퍼스레딩(Hyper-Threading) 은 CPU 코어를 논리적인 코어로 분리하여 멀티스레드 성능을 향상시키는게 있는데..
모델개발자들은 연산이 많은 CPU 집약적인 작업을 하지만.. 서버 개발자들은 I/O 집약적 작업이 많기 때문에 이거를 활성화해놓는 것이 서버를 좀 더 알차게 쓸 수 있다.. (HTTP 요청/응답, 네트워크 통신..)
일단 다음 부하테스트때는 최소 엔진객체 생성기준을 논리코어 개수로 높이기로 했다.
그리고 젠킨스 서버에 이거 설정 꺼있는데 컴파일은 CPU많이쓰고 소스체크아웃은 I/O가 많이 발생하는거라 아래 설명만 보면 애매한데.
아마 키게되면 뭔가 훨씬 빌드 속도가 빨라지지 않을까 싶다. 내일 테스트해봐야징
1. 하이퍼스레딩이란?
- 물리 코어 하나당 두 개의 논리 코어를 생성하여 동시에 두 개의 스레드를 처리할 수 있도록 설계된 기술입니다.
- 예를 들어, 4개의 물리 코어를 가진 CPU에서 하이퍼스레딩이 활성화되면, 총 8개의 논리 코어를 사용할 수 있게 됩니다.
- 병렬 작업 처리 성능을 높이는 데 효과적입니다.
2. 하이퍼스레딩의 작동 방식
- CPU 코어의 유휴 자원(예: ALU, 레지스터 등)을 활용해 동시에 두 개의 스레드를 처리합니다.
- 두 개의 스레드가 번갈아 가며 실행되므로, 한 스레드가 I/O 작업이나 대기 상태일 때 다른 스레드가 실행됩니다.
- 완전한 병렬 처리는 아니지만, 단일 코어의 효율성을 극대화합니다.
3. 하이퍼스레딩의 장점
- 멀티스레드 성능 향상
- 병렬 작업 처리 효율이 높아집니다.
- 특히, I/O 대기 시간이 많은 작업에서 효과적입니다.
- 코어 활용도 증가
- 물리적 코어를 최대한 활용해 CPU 자원 낭비를 줄임.
- 멀티태스킹에 유리
- 멀티태스킹 환경에서 각 스레드가 논리 코어에서 독립적으로 실행됩니다.
4. 하이퍼스레딩의 한계
- 완전한 병렬 처리가 아님
- 두 개의 논리 코어가 물리적인 CPU 자원을 공유하기 때문에, 물리적 코어만큼의 성능 향상은 기대할 수 없습니다.
- CPU 자원 경합
- 동일한 물리 코어의 논리 스레드 간에 리소스를 공유하므로, 리소스 경합으로 인해 성능이 저하될 수도 있습니다.
- 효율성의 의존성
- 하이퍼스레딩의 성능 향상은 작업 유형에 따라 다릅니다.
- CPU-집약적인 작업(예: 복잡한 계산)에서는 성능 향상이 미미할 수 있습니다.
- I/O-집약적인 작업(예: 웹 서버, 데이터베이스 처리)에서는 큰 효과를 볼 수 있습니다.
- 하이퍼스레딩의 성능 향상은 작업 유형에 따라 다릅니다.
5. 하이퍼스레딩 활성화 방법
BIOS/UEFI 설정
- 컴퓨터 부팅 시 BIOS/UEFI로 진입합니다. (보통 Del, F2, F12 키)
- CPU 설정(CPU Configuration) 메뉴로 이동합니다.
- Hyper-Threading Technology 옵션을 찾습니다.
- 해당 옵션을 Enable로 설정합니다.
- 저장 후 재부팅.
6. 하이퍼스레딩 활성화 여부 확인
Windows
- 작업 관리자(Task Manager) 실행 (Ctrl + Shift + Esc).
- 성능(Performance) 탭 선택.
- CPU 항목에서 "논리 프로세서(Logical Processor)" 개수를 확인합니다.
- 논리 코어 수가 물리 코어 수의 두 배면 하이퍼스레딩이 활성화된 상태입니다.
Linux
bash
코드 복사
lscpu
- CPU(s):와 Core(s) per socket: 값을 비교하여 확인 가능합니다.
macOS
bash
코드 복사
sysctl hw.physicalcpu hw.logicalcpu
- 물리적 코어 수와 논리적 코어 수를 확인할 수 있습니다.
7. 하이퍼스레딩이 Java 및 서버에 미치는 영향
- Java 스레드풀에 미치는 영향
- 논리 코어 수를 기준으로 스레드 수를 설정하면, 하이퍼스레딩을 활용해 CPU 효율성을 높일 수 있습니다.
- 하지만, CPU-집약적인 작업에서는 물리 코어 기준으로 설정하는 것이 더 적합할 수 있습니다.
- 웹 서버(톰캣)와 하이퍼스레딩
- HTTP 요청 처리와 같은 I/O-집약적인 작업에서는 하이퍼스레딩이 큰 성능 향상을 제공합니다.
- 따라서, 논리 코어 수를 기준으로 maxThreads 값을 설정하는 것이 일반적입니다.
8. 하이퍼스레딩의 활용 여부
- 활성화 추천 시나리오:
- 웹 서버, 데이터베이스 서버, 비디오 렌더링 등 I/O-집약적 작업이 많은 환경.
- 비활성화 추천 시나리오:
- 고성능 계산 작업(CPU-집약적 작업)이 주를 이루는 경우.
(물리적 코어를 효율적으로 사용하기 위해 하이퍼스레딩을 끄는 경우도 있습니다.)
- 고성능 계산 작업(CPU-집약적 작업)이 주를 이루는 경우.
결론: 하이퍼스레딩은 대부분의 서버 및 작업 환경에서 성능을 향상시키는 데 유리하지만, 작업 특성과 하드웨어 자원 사용 패턴에 따라 그 효과는 달라질 수 있습니다. Java 애플리케이션이나 서버 설정 시 논리 코어를 기준으로 설정할지, 물리 코어를 기준으로 설정할지 신중하게 결정해야 합니다.
'BACKEND.* > Server' 카테고리의 다른 글
| backpressure vs RingBuffer (0) | 2024.12.26 |
|---|---|
| JIT 컴파일러 (0) | 2024.12.22 |
| Perf C2C (2) | 2024.12.15 |
| 사이드카 패턴이란? (2) | 2024.12.15 |
| False Sharing이란 (2) | 2024.12.14 |
Comments