Best Practices for Host-VM Communication in Hyper-V Environments

Seungsoo Lee·2024년 10월 22일
0
post-thumbnail

1. 들어가며

  • 기존 대신증권 Creon API 활용한 트레이딩 시스템 개발 보유
  • 실시간 시세 데이터와 주문 처리를 한 시스템에서 처리하는 것이 목표였음

2. 문제 상황 및 초기 해결방안

  • Creon API의 실시간 시세 제한: PC당 400종목

  • VM 다중화 + MAC Address Spoofing으로 우회 가능성 확인

    • 실제 테스트에서 요청 제한 걸리지 않음

3. 새로운 도전과제

  • VM에서 수집한 시세 데이터를 실시간으로 Host에 전송 필요
  • 최소한의 지연시간으로 안정적인 데이터 전송이 핵심 과제

4. Hyper-V 아키텍처 이해

기본 구조

파티션 구조

  • Parent Partition (부모 파티션)

    • Windows Server 구동
    • 하드웨어 직접 접근 권한
    • 자식 파티션 관리 담당
  • Child Partition (자식 파티션)

    • 게스트 OS 실행
    • 가상화된 하드웨어 접근
    • VSC를 통한 자원 요청

통신 구조

  • VMBus (Virtual Machine Bus)
    • 파티션 간 고속 통신 채널
    • 메모리 공유 방식 사용
  • VSP/VSC 구조
    • VSP: 부모 파티션의 자원 제공자
    • VSC: 자식 파티션의 자원 소비자
    • VMBus를 통한 요청/응답 처리

5. 시도한 통신 방식들

1. Hyper-V Socket

  • VMBus 기반의 고속 통신 방식
  • MS에서 제공하는 공식 API
  • 커널 모드 접근 없이 VMBus 기능 활용 가능
  • 가장 효율적인 통신 방식으로 확인

2. TCP/IP & UDP

  • 기본적인 네트워크 통신
  • 구현은 쉬우나 상대적으로 느림

3. Memory Mapping File

  • 직접적인 공유 메모리 사용 불가
    • 각 파티션이 격리된 메모리 공간 사용
    • 하이퍼바이저가 직접 접근 제한
  • 우회 방법 구현
    • Host에서 네트워크 공유 폴더 생성
    • 공유 폴더에 Memory Mapping File 생성
    • VM에서 네트워크 경로로 접근

4. Named Pipe

  • 직접 연결 불가 (보안 격리)
  • COM 포트 통한 우회 구현
    • Hyper-V 가상 COM 포트 활용
    • COM 포트 내부적으로 Named Pipe 사용

5. VMBus Direct

  • 커널 모드 접근 필요
  • 높은 특권 수준(ring 0) 요구
  • 커널 드라이버 개발 필요
  • 일반 개발자 접근 어려움

6. KVP (Key Value Pair)

  • Hyper-V Data Exchange Service 활용
  • 문자열 형태의 키-값 데이터 교환
  • VMBus 통한 기본 통신 방식
  • 네트워크 연결 불필요

6. 성능 비교

Note : named pipe 관련 코드에는 오류가 있어 해당 결과는 참고하지 마시기 바랍니다.

7. 결론 및 향후 계획

  • 테스트 결과 Hyper-V Socket이 가장 빠른 성능 보여줌
  • 그러나 새로운 발견
    • 전 종목 데이터 수집의 현실적 한계 인식
    • 이베스트 증권의 xing API 발견
      • 실시간 시세 제한 없음
      • VM 구성 없이 직접 처리 가능
    • 향후 xing API 기반으로 시스템 재구성 예정

8. 시사점

  • 기술적 우회 방법을 찾는 것도 중요하지만
  • 근본적인 해결책을 위한 대안 탐색도 필요
  • 때로는 복잡한 구조보다 단순한 해결책이 더 효과적

0개의 댓글