Onload 사용

이 페이지에서는 초저지연 시간 (ULL) Compute Engine 인스턴스에 Onload를 사용하는 방법을 설명합니다.

Onload는 매우 짧은 지연 시간, 최소한의 지터, 일관된 성능이 필요한 지연 시간에 민감한 애플리케이션을 위한 고성능 네트워크 스택입니다. Onload는 운영체제 커널을 우회하고 사용자 공간에서 직접 실행되는 TCP/IP 구현을 제공하는 동시에 애플리케이션이 표준 BSD 소켓 API를 사용할 수 있도록 지원합니다.

ULL 솔루션과 함께 Onload를 사용하면 다음이 지원됩니다.

  • 흐름 조향: ULL 네트워크 인터페이스를 사용하면 수신 큐 (RX)에 직접 특정 트래픽 흐름을 조향하여 기본 수신 측 확장 (RSS) 해싱을 우회할 수 있습니다. ULL 유니캐스트 및 멀티캐스트 트래픽의 경우 3튜플 흐름 조향이 지원됩니다 (프로토콜, 대상 IP 주소, 대상 포트).

필수 인스턴스 유형 및 OS 이미지

Onload를 사용하려면 ULL Compute Engine 인스턴스 만들기에 설명된 대로 테스트를 위해 Google에서 제공하는 이미지 프로젝트와 이미지를 사용하여 ULL Compute Engine 인스턴스 (U4P 또는 U4C)를 만들어야 합니다.

필수 이미지를 사용하면 Onload가 사전 설치되고 부팅 시 로드됩니다. 그런 다음 이 페이지의 절차에 설명된 대로 Onload로 프로세스를 실행할 수 있습니다.

onload 시작 및 중지

이 섹션에서는 Onload를 시작하고 중지하는 방법을 설명합니다. 다음 섹션의 절차를 완료하려면 Onload를 시작해야 합니다.

Onload를 시작하려면 다음 명령어를 실행합니다.

sudo /opt/gcp_tp-scripts/load-onload-and-tune

Onload를 중지하려면 다음 명령어를 실행합니다.

sudo /opt/gcp_tp-scripts/unload-onload

busy polling 사용 설정

매우 짧은 지연 시간을 달성하고 지터 현상을 최소화하려면 비지 폴링을 사용 설정하세요.

활성 폴링을 사용 설정하려면 다음을 실행하세요.

  1. 아직 인스턴스에 연결하지 않았다면 SSH를 사용하여 인스턴스에 연결합니다.

  2. 모든 대기열 또는 더 세부적인 수준에서 busy polling을 사용 설정할 수 있습니다. 사용 사례에 해당하는 옵션을 선택합니다.

    • 모든 대기열:

      sudo /opt/gcp_tp-scripts/busypoll-all-queues
      
    • Onload 스택이 사용하는 특정 RX 대기열:

      1. 아직 시작하지 않았다면 다음 명령어를 실행하여 Onload 스택을 시작합니다.

        gcp_tp-onload /opt/neper/tcp_rr &
        
      2. 시작한 스택의 stack-id를 가져오려면 다음 명령어를 실행합니다.

        onload_stackdump
        
      3. 네트워크 인터페이스의 색인 번호를 가져오려면 다음 명령어를 실행합니다.

        cat /sys/class/net/NIC_NAME/ifindex
        

        NIC_NAME을 게스트 OS의 네트워크 인터페이스 이름(예: eth1, eth2)으로 바꿉니다.

      4. busy polling을 사용 설정하려면 다음 명령어를 실행하세요.

        sudo /opt/gcp_tp-scripts/busypoll-onload-stack STACK_ID enable NIC_INDEX CPU_ID
        

        다음을 바꿉니다.

        • STACK_ID: 이전에 가져온 스택 ID입니다.
        • NIC_INDEX: 활성 폴링을 사용 설정하려는 네트워크 인터페이스의 색인 번호입니다(예: 1 또는 2).
        • CPU_ID: 활성 폴링을 사용 설정할 CPU의 ID입니다.

          • CPU 0 또는 애플리케이션에서 사용 중인 CPU는 사용하지 않는 것이 좋습니다.
          • 지정한 네트워크 인터페이스의 NUMA 노드에 로컬인 CPU 코어를 사용해야 합니다. 예를 들면 다음과 같습니다.

            • eth1는 CPU 코어 0-29를 사용하는 NUMA 노드 0를 사용합니다.
            • eth2는 NUMA 노드 2를 사용합니다. CPU 코어 60-89를 사용합니다.

다음 명령어를 사용하여 busy polling을 사용 중지할 수 있습니다.

sudo /opt/gcp_tp-scripts/busypoll-onload-stack STACK_ID disable NIC_INDEX CPU_ID

다음 단계

  • 인스턴스 시스템 시계를 호스트 서버의 실제 NIC 시계와 동기화하려면 정확한 시간 구성을 참고하세요.