답변:
비트 당 명령 사이클을 사용해야한다면 10Gbps를 달성 할 수 없을 것입니다. 가장 먼저 알아 두어야 할 것은 CPU 명령어 당 64 비트의 워드를 처리한다는 것입니다.
그럼에도 우리가 성능을 위해 할 수있는 최악의 일은 CPU가 패킷의 모든 단어에 액세스하도록하는 것입니다. 따라서 패킷의 "제로 카피"처리에 중점을 둡니다. 이러한 속임수 중 일부는 인터페이스 자체에 있습니다. 이더넷 컨트롤러 칩이 데이터를 RAM에 복사 할 수 있도록 DMA ( "직접 메모리 액세스")가 있습니다. CPU가 패킷의 모든 단어에 액세스 할 필요가 없도록 체크섬을 계산합니다. 그 중 일부는 데이터 구조 설계에 있습니다. 페이지 버퍼 항목의 소유권을 변경하여 패킷 버퍼를 이동할 수 있도록 패킷 버퍼를 조심스럽게 정렬합니다. 그중 일부는 패킷 데이터가 최소 횟수로 액세스되도록하고 수신 응용 프로그램까지는 전혀 액세스하지 않는 것이 가장 신중한 프로그래밍입니다.
이 모든 작업을 완료하면 다음 제한은 한 번에 하나씩 패킷을 처리하는 오버 헤드입니다. 따라서 이더넷 컨트롤러와 커널 모두에 "세그먼트 오프로드"기능이 있으므로 패킷 그룹을 처리 할 수 있습니다. 이더넷 컨트롤러에서 데이터 검색을 지연시켜 이러한 그룹이 더 커졌습니다.
마지막으로 커널의 sendfile () 호출과 같은 특수한 바로 가기가 있습니다.이 파일은 최소한의 작업으로 디스크에서 네트워크로가는 경로입니다.
네트워크 인터페이스 카드의 하드웨어 기능을 사용하고 PCI 버스를 CPU가 아닌 카드 사이의 버스로 취급하는 특수한 경우의 라우팅 (한 인터페이스에서 다른 인터페이스로 패킷 전달)도 가능합니다. 일반적인 운영 체제에서는 불가능하지만 인텔과 같은 공급 업체는 이더넷 컨트롤러에서 이러한 기능을 구현하기위한 소프트웨어 라이브러리를 제공합니다.
우리는 CPU에서 멀어지면서 하드웨어에서 모든 전달 작업이 발생하는 특수 목적 라우터를 구축 할 수도 있습니다. PCI 버스는 제한적이기 때문에 여러 병렬 버스를 실행합니다. 또는 여러 개의 병렬 크로스바 스위치 어셈블리에 대한 여러 개의 병렬 버스. 시장의 한쪽 끝에서 작은 TCAM 기반 이더넷 스위치가 그 예입니다. 시장의 다른 쪽 끝에서 Juniper M40은 표준 설계입니다.
일반적인 스위치는 패킷 수신을 시작하고 TCAM에서 대상 주소를 조회하고 송신 포트가있는 태그를 패킷에 첨부 한 다음 여전히 들어오는 패킷을 송신 포트의 컨트롤러에 DMA합니다. 출력 포트가 정체 된 경우이 간단한 스위치에서 수행 할 수있는 모든 것은 수신 패킷을 버리는 것입니다. 따라서 간단한 스위치는 링크 속도가 변경되고 일부 대기열이 필요한 경우에 적합하지 않습니다. 물론 더 많은 비용을 지불하는 더 정교한 스위치가 있습니다.
일반적인 라우터는 패킷을 수신하여 짧은 대기열에 보관합니다. 대상 IP 주소는 정적 RAM에서 조회 된 다음 패킷이 셀로 분해되어 대기 시간이 단축되고 각 셀이 송신 카드의 크로스바 스위치로 전송됩니다. 이 카드는 셀을 패킷으로 재 조립하고 패킷을 송신 인터페이스에 대기시킵니다. 송신 인터페이스의 큐잉은 정교 할 수 있습니다.
오늘날 거의 모든 스위칭과 많은 라우팅이 하드웨어에서 처리되므로 프로세서 속도가 예외로 작용합니다. 서버와 같은 경우 프로세서 속도가 충분하지 않을 수 있습니다. 이것은 과거의 경우였습니다. 1Gbps 이더넷이 처음 나왔을 때 PC와 서버에서 사용되는 버스는 400Mbps 만 처리 할 수있었습니다.
프로세서가 충분히 빠르지 않은 경우 트래픽이 줄어 듭니다. 어쨌든, 정체가 올바르게 처리되면 혼잡이 처리되는 방식이므로 많은 트래픽이 손실 될 수 있습니다. RED (Random Early Detection)는 임의의 대기열에서 패킷을 무작위로 삭제하여 패킷이 채워지거나 꼬리가 떨어지지 않도록하는 방법입니다. 이것은 TCP 동기화를 방지하는 데 도움이 될 수 있습니다. 여러 포트 속도가 동일한 속도의 다른 단일 포트로 보내야하는 스위치에서 많은 손실이 발생합니다.
the packet will then be exploded into cells to reduce latency
시겠습니까?