네트워크 어댑터의 성능

네트워크 어댑터에서 구현할 하드웨어 기능을 결정하는 데는 항상 단점이 있습니다. 인터럽트 조정을 허용하는 작업 오프로드 기능을 추가하고, 하드웨어에서 동적 튜닝을 수행하고, PCI 버스의 사용을 개선하고, 점보 프레임을 지원하는 것을 고려하는 것이 점점 더 중요해지고 있습니다. 이는 최고 성능이 필요한 구성에 사용되는 고급 네트워크 어댑터에 특히 중요합니다.

TCP 및 IP 체크섬 오프로드 지원

가장 일반적인 네트워크 트래픽의 경우 체크섬 계산을 네트워크 어댑터 하드웨어로 오프로드하면 바이트당 필요한 CPU 주기 수를 줄임으로써 상당한 성능 이점을 제공합니다. 체크섬 계산은 다음 두 가지 이유로 네트워킹 스택에서 가장 비용이 많이 드는 함수입니다.

  • 긴 경로 길이에 기여합니다.
  • 캐시 변동 효과가 발생합니다(일반적으로 보낸 사람).

보낸 사람에게 체크섬 계산을 오프로드하면 호스트 CPU의 부하를 줄이고 캐시 효율성을 높여 전반적인 시스템 성능을 향상시킵니다.

Windows Performance Lab에서는 네트워크 집약적 워크로드 중에 체크섬이 오프로드되었을 때 TCP 처리량 향상을 19%로 측정했습니다. 이 개선 사항에 대한 분석에 따르면 전체 개선의 11%는 경로 길이 감소로 인한 것이며 8%는 캐시 효율성을 높이기 때문입니다.

수신기에서 체크섬을 오프로드하면 보낸 사람의 체크섬을 오프로드하는 것과 동일한 이점이 있습니다. 향상된 혜택은 소켓 프록시 서버와 같이 클라이언트와 서버 모두의 역할을 하는 시스템에서 볼 수 있습니다. 클라이언트 시스템과 같이 CPU가 반드시 사용량이 부족하지 않은 시스템에서 체크섬을 오프로드하는 이점은 눈에 띄게 향상된 처리량보다는 더 나은 네트워크 응답 시간에 나타날 수 있습니다.

LSO(대규모 송신 오프로드 지원)

Windows는 네트워크 어댑터/드라이버가 MTU보다 더 큰 MSS(최대 세그먼트 크기)를 최대 64K까지 TCP로 보급할 수 있는 기능을 제공합니다. 이를 통해 TCP는 최대 64K의 버퍼를 드라이버에 할당할 수 있으며, 이 버퍼는 네트워크 MTU 내에 맞는 패킷으로 나눕니다.

TCP 분할 작업은 호스트 CPU 대신 네트워크 어댑터/드라이버 하드웨어에서 수행됩니다. 이로 인해 네트워크 어댑터 CPU가 추가 작업을 처리할 수 있는 경우 성능이 크게 향상됩니다.

테스트된 많은 네트워크 어댑터의 경우 호스트 CPU가 네트워크 어댑터 하드웨어보다 더 강력할 때 순수 네트워킹 활동에 대한 개선 사항이 거의 없었습니다. 그러나 일반적인 비즈니스 워크로드의 경우 호스트 CPU가 대부분의 주기를 사용하여 트랜잭션을 실행하기 때문에 처리량의 최대 9%에 대한 전반적인 시스템 성능 향상이 측정되었습니다. 이러한 경우 TCP 구분을 하드웨어로 오프로드하면 호스트 CPU가 분할 부하에서 해제되므로 추가 주기가 더 많은 트랜잭션을 수행할 수 있습니다.

IPSec(IP 보안) 오프로드 지원

Windows는 IPSec의 암호화 작업을 네트워크 어댑터 하드웨어로 오프로드하는 기능을 제공합니다. 암호화, 특히 3 DES(삼중 DES라고도 함)는 주기/바이트 비율이 매우 높습니다. 따라서 IPSec을 네트워크 어댑터 하드웨어로 오프로드하는 것이 보안 인터넷 및 VPN 테스트에서 30% 성능 향상을 측정한 것은 놀라운 일이 아닙니다.

인터럽트 조정 개선

간단한 네트워크 어댑터는 패킷이 도착하거나 패킷 보내기 요청이 완료되었음을 알리기 위해 호스트에서 하드웨어 인터럽트 를 생성합니다. 인터럽트 대기 시간 및 결과 캐시 변동 효과는 전체 네트워킹 성능에 오버헤드를 추가합니다. 많은 시나리오(예: 시스템 사용량이 많거나 네트워크 트래픽이 많은 경우)에서는 각 인터럽트마다 여러 패킷을 처리하여 하드웨어 인터럽트 비용을 줄이는 것이 가장 좋습니다.

네트워크 워크로드가 많은 경우 네트워크 집약적 워크로드를 통해 최대 9%의 처리량 성능 향상이 측정되었습니다. 그러나 처리량 향상을 위해서만 인터럽트 조정 매개 변수를 조정하면 응답 시간에 성능이 저하될 수 있습니다. 최적의 설정을 유지하고 다양한 워크로드를 수용하려면 이 문서의 뒷부분에 나오는 자동 조정에 설명된 대로 동적으로 조정된 매개 변수를 허용하는 것이 가장 좋습니다.

PCI 버스를 효율적으로 사용

네트워크 어댑터 하드웨어 성능에서 가장 중요한 요소 중 하나는 PCI 버스를 얼마나 효율적으로 사용하는가하는 것입니다. 또한 네트워크 어댑터의 DMA 성능은 동일한 PCI 버스에 있는 모든 PCI 카드의 성능에 영향을 줍니다. PCI 사용을 최적화할 때 다음 지침을 고려해야 합니다.

  • 적절한 경우 대상 페이지를 집계하여 DMA 전송을 간소화합니다.

  • 큰 청크(최소 256바이트)에서 DMA를 수행하여 PCI 프로토콜 오버헤드를 줄입니다. 가능하면 전체 패킷이 단일 PCI 트랜잭션에서 전송되도록 데이터 흐름 시간을 지정합니다. 그러나 전송이 수행되어야 하는 방법을 고려합니다. 예를 들어 대기하면 대기 시간이 증가하고 추가 버퍼 공간이 사용되므로 전송을 시작하기 전에 모든 데이터가 도착할 때까지 기다리지 마세요.

  • 패킷의 마지막 몇 바이트를 전송하여 "클린"로 짧은 추가 전송을 요구하는 대신 DMA 패킷 전송을 추가 바이트로 패딩하는 것이 좋습니다.

  • PCI 사양에서 권장하는 대로 메모리 읽기, 메모리 읽기 줄 및 메모리 읽기 여러 트랜잭션을 사용합니다.

  • 네트워크 어댑터 버스 인터페이스 하드웨어는 호스트 메모리 컨트롤러의 제한을 감지하고 그에 따라 동작을 조정해야 합니다. 예를 들어 네트워크 어댑터 버스 인터페이스 하드웨어는 DMA 메모리 읽기에 대한 메모리 컨트롤러 사전 페치 제한 사항을 검색하고 트랜잭션을 다시 시도하기 전에 짧은 기간 동안 기다려야 합니다. 하드웨어는 네트워크 어댑터 부분에서 과도한 재시도를 감지하고 호스트가 차단할 때 이후 트랜잭션에 대한 첫 번째 재시도 전 시간을 늘려야 합니다. 다음 순차적 데이터 집합을 가져오는 데 여전히 사용 중이라고 확신하는 경우 메모리 컨트롤러에 트랜잭션을 계속 제출할 필요가 없습니다.

  • 특히 데이터 전송 중에 대기 상태 삽입을 최소화합니다. 하나 또는 두 개 이상의 대기 상태가 삽입될 경우 버스를 포기하고 버스를 사용하는 다른 PCI 어댑터가 일부 작업을 수행하도록 하는 것이 좋습니다.

  • 프로그래밍된 I/O 대신 메모리 매핑 I/O를 사용합니다. 드라이버의 경우에도 마찬가지입니다.

점보 프레임 지원

MTU(최대 전송 단위) 및 더 큰 프레임 크기, 특히 점보 프레임을 지원하면 바이트당 발생하는 네트워크 스택 오버헤드가 줄어듭니다. MTU가 1514에서 9000으로 변경되었을 때 20% TCP 처리량 증가가 측정되었습니다. 또한 네트워크 스택에서 네트워크 드라이버로의 호출 수가 적기 때문에 CPU 사용률이 크게 감소합니다.