dev.Log

하이퍼스레딩 본문

BACKEND.*/Server

하이퍼스레딩

초코푸딩 2024. 12. 22. 19:08

엔진개발자가 엔진 객체 생성제한을 물리코어수 -1로 설정해두었는데 실제로 물리코어 수 만큼 객체가 생성되지않을뿐더러 (계산식이 이상헀다) 물리코어가 32개인 서버에서 물리코어수 -1 까지 부하테스트를 수행했음에도 충분히 서버의 자원을 활용하지 못하는 상황이 있었다..그래서 해당 이슈를 공유하고 수정요청을 드렸다

하이퍼스레딩(Hyper-Threading) 은 CPU 코어를 논리적인 코어로 분리하여 멀티스레드 성능을 향상시키는게 있는데..
모델개발자들은 연산이 많은 CPU 집약적인 작업을 하지만.. 서버 개발자들은 I/O 집약적 작업이 많기 때문에 이거를 활성화해놓는 것이 서버를 좀 더 알차게 쓸 수 있다.. (HTTP 요청/응답, 네트워크 통신..)
일단 다음 부하테스트때는 최소 엔진객체 생성기준을 논리코어 개수로 높이기로 했다. 

 

그리고 젠킨스 서버에 이거 설정 꺼있는데 컴파일은 CPU많이쓰고 소스체크아웃은 I/O가 많이 발생하는거라 아래 설명만 보면 애매한데.

아마 키게되면 뭔가 훨씬 빌드 속도가 빨라지지 않을까 싶다. 내일 테스트해봐야징

 

1. 하이퍼스레딩이란?

  • 물리 코어 하나당 두 개의 논리 코어를 생성하여 동시에 두 개의 스레드를 처리할 수 있도록 설계된 기술입니다.
  • 예를 들어, 4개의 물리 코어를 가진 CPU에서 하이퍼스레딩이 활성화되면, 총 8개의 논리 코어를 사용할 수 있게 됩니다.
  • 병렬 작업 처리 성능을 높이는 데 효과적입니다.

2. 하이퍼스레딩의 작동 방식

  • CPU 코어의 유휴 자원(예: ALU, 레지스터 등)을 활용해 동시에 두 개의 스레드를 처리합니다.
  • 두 개의 스레드가 번갈아 가며 실행되므로, 한 스레드가 I/O 작업이나 대기 상태일 때 다른 스레드가 실행됩니다.
  • 완전한 병렬 처리는 아니지만, 단일 코어의 효율성을 극대화합니다.

3. 하이퍼스레딩의 장점

  1. 멀티스레드 성능 향상
    • 병렬 작업 처리 효율이 높아집니다.
    • 특히, I/O 대기 시간이 많은 작업에서 효과적입니다.
  2. 코어 활용도 증가
    • 물리적 코어를 최대한 활용해 CPU 자원 낭비를 줄임.
  3. 멀티태스킹에 유리
    • 멀티태스킹 환경에서 각 스레드가 논리 코어에서 독립적으로 실행됩니다.

4. 하이퍼스레딩의 한계

  1. 완전한 병렬 처리가 아님
    • 두 개의 논리 코어가 물리적인 CPU 자원을 공유하기 때문에, 물리적 코어만큼의 성능 향상은 기대할 수 없습니다.
  2. CPU 자원 경합
    • 동일한 물리 코어의 논리 스레드 간에 리소스를 공유하므로, 리소스 경합으로 인해 성능이 저하될 수도 있습니다.
  3. 효율성의 의존성
    • 하이퍼스레딩의 성능 향상은 작업 유형에 따라 다릅니다.
      • CPU-집약적인 작업(예: 복잡한 계산)에서는 성능 향상이 미미할 수 있습니다.
      • I/O-집약적인 작업(예: 웹 서버, 데이터베이스 처리)에서는 큰 효과를 볼 수 있습니다.

5. 하이퍼스레딩 활성화 방법

BIOS/UEFI 설정

  1. 컴퓨터 부팅 시 BIOS/UEFI로 진입합니다. (보통 Del, F2, F12 키)
  2. CPU 설정(CPU Configuration) 메뉴로 이동합니다.
  3. Hyper-Threading Technology 옵션을 찾습니다.
  4. 해당 옵션을 Enable로 설정합니다.
  5. 저장 후 재부팅.

6. 하이퍼스레딩 활성화 여부 확인

Windows

  1. 작업 관리자(Task Manager) 실행 (Ctrl + Shift + Esc).
  2. 성능(Performance) 탭 선택.
  3. CPU 항목에서 "논리 프로세서(Logical Processor)" 개수를 확인합니다.
    • 논리 코어 수가 물리 코어 수의 두 배면 하이퍼스레딩이 활성화된 상태입니다.

Linux

bash
코드 복사
lscpu
  • CPU(s):와 Core(s) per socket: 값을 비교하여 확인 가능합니다.

macOS

bash
코드 복사
sysctl hw.physicalcpu hw.logicalcpu
  • 물리적 코어 수와 논리적 코어 수를 확인할 수 있습니다.

7. 하이퍼스레딩이 Java 및 서버에 미치는 영향

  1. Java 스레드풀에 미치는 영향
    • 논리 코어 수를 기준으로 스레드 수를 설정하면, 하이퍼스레딩을 활용해 CPU 효율성을 높일 수 있습니다.
    • 하지만, CPU-집약적인 작업에서는 물리 코어 기준으로 설정하는 것이 더 적합할 수 있습니다.
  2. 웹 서버(톰캣)와 하이퍼스레딩
    • HTTP 요청 처리와 같은 I/O-집약적인 작업에서는 하이퍼스레딩이 큰 성능 향상을 제공합니다.
    • 따라서, 논리 코어 수를 기준으로 maxThreads 값을 설정하는 것이 일반적입니다.

8. 하이퍼스레딩의 활용 여부

  • 활성화 추천 시나리오:
    • 웹 서버, 데이터베이스 서버, 비디오 렌더링 등 I/O-집약적 작업이 많은 환경.
  • 비활성화 추천 시나리오:
    • 고성능 계산 작업(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