프로세서가 초당 10 기가비트 이상의 데이터 속도를 어떻게 처리 할 수 ​​있습니까?


11

그것이 올바른 장소인지 모르겠습니다. 매우 어리석은 질문 일 수 있습니다. 일부 프로세서는 스위칭 / 라우팅을 위해 데이터 프레임을 처리해야한다고 가정합니다. 최신 프로세서의 속도는 몇 GHz입니다. 운영 속도보다 빠른 속도로 들어오는 데이터를 어떻게 처리합니까?

답변:


16

비트 당 명령 사이클을 사용해야한다면 10Gbps를 달성 할 수 없을 것입니다. 가장 먼저 알아 두어야 할 것은 CPU 명령어 당 64 비트의 워드를 처리한다는 것입니다.

그럼에도 우리가 성능을 위해 할 수있는 최악의 일은 CPU가 패킷의 모든 단어에 액세스하도록하는 것입니다. 따라서 패킷의 "제로 카피"처리에 중점을 둡니다. 이러한 속임수 중 일부는 인터페이스 자체에 있습니다. 이더넷 컨트롤러 칩이 데이터를 RAM에 복사 할 수 있도록 DMA ( "직접 메모리 액세스")가 있습니다. CPU가 패킷의 모든 단어에 액세스 할 필요가 없도록 체크섬을 계산합니다. 그 중 일부는 데이터 구조 설계에 있습니다. 페이지 버퍼 항목의 소유권을 변경하여 패킷 버퍼를 이동할 수 있도록 패킷 버퍼를 조심스럽게 정렬합니다. 그중 일부는 패킷 데이터가 최소 횟수로 액세스되도록하고 수신 응용 프로그램까지는 전혀 액세스하지 않는 것이 가장 신중한 프로그래밍입니다.

이 모든 작업을 완료하면 다음 제한은 한 번에 하나씩 패킷을 처리하는 오버 헤드입니다. 따라서 이더넷 컨트롤러와 커널 모두에 "세그먼트 오프로드"기능이 있으므로 패킷 그룹을 처리 할 수 ​​있습니다. 이더넷 컨트롤러에서 데이터 검색을 지연시켜 이러한 그룹이 더 커졌습니다.

마지막으로 커널의 sendfile () 호출과 같은 특수한 바로 가기가 있습니다.이 파일은 최소한의 작업으로 디스크에서 네트워크로가는 경로입니다.

네트워크 인터페이스 카드의 하드웨어 기능을 사용하고 PCI 버스를 CPU가 아닌 카드 사이의 버스로 취급하는 특수한 경우의 라우팅 (한 인터페이스에서 다른 인터페이스로 패킷 전달)도 가능합니다. 일반적인 운영 체제에서는 불가능하지만 인텔과 같은 공급 업체는 이더넷 컨트롤러에서 이러한 기능을 구현하기위한 소프트웨어 라이브러리를 제공합니다.

우리는 CPU에서 멀어지면서 하드웨어에서 모든 전달 작업이 발생하는 특수 목적 라우터를 구축 할 수도 있습니다. PCI 버스는 제한적이기 때문에 여러 병렬 버스를 실행합니다. 또는 여러 개의 병렬 크로스바 스위치 어셈블리에 대한 여러 개의 병렬 버스. 시장의 한쪽 끝에서 작은 TCAM 기반 이더넷 스위치가 그 예입니다. 시장의 다른 쪽 끝에서 Juniper M40은 표준 설계입니다.

일반적인 스위치는 패킷 수신을 시작하고 TCAM에서 대상 주소를 조회하고 송신 포트가있는 태그를 패킷에 첨부 한 다음 여전히 들어오는 패킷을 송신 포트의 컨트롤러에 DMA합니다. 출력 포트가 정체 된 경우이 간단한 스위치에서 수행 할 수있는 모든 것은 수신 패킷을 버리는 것입니다. 따라서 간단한 스위치는 링크 속도가 변경되고 일부 대기열이 필요한 경우에 적합하지 않습니다. 물론 더 많은 비용을 지불하는 더 정교한 스위치가 있습니다.

일반적인 라우터는 패킷을 수신하여 짧은 대기열에 보관합니다. 대상 IP 주소는 정적 RAM에서 조회 된 다음 패킷이 셀로 분해되어 대기 시간이 단축되고 각 셀이 송신 카드의 크로스바 스위치로 전송됩니다. 이 카드는 셀을 패킷으로 재 조립하고 패킷을 송신 인터페이스에 대기시킵니다. 송신 인터페이스의 큐잉은 정교 할 수 있습니다.


좋은 대답입니다. 자세히 설명해 주 the packet will then be exploded into cells to reduce latency시겠습니까?
Eddie

라우터 설계에서는 간단히 크로스바 전환 (또는 다른 종류의 카드 간 버스)을 통해 한 라인 카드에서 다른 라인 카드로 패킷을 보낼 수 있습니다. 그러나 대기 시간은 패킷 길이에 따라 달라집니다. 크로스바 전환을 통해 패킷이 전송 될 때 다른 완전한 패킷 전송 지연이 발생합니다. 크로스바 스위칭에 여러 개의 병렬 링크가있을 수 있으므로 이러한 링크를 통해 패킷을 분할 할 수 있습니다. 그러면 큰 패킷의 대기 시간이 크게 줄어 듭니다. 분할 패킷의 일부를 '셀'이라고합니다.
vk5tu

나는이 답변이 2 년 전에 온 것임을 알고 있지만, 감사합니다. 나는 원래 포스터와 같은 질문을했고 내 검색에서 당신의 답을 찾았습니다. 매우 잘 작성되고 철저합니다. 감사!
loneboat

0

오늘날 거의 모든 스위칭과 많은 라우팅이 하드웨어에서 처리되므로 프로세서 속도가 예외로 작용합니다. 서버와 같은 경우 프로세서 속도가 충분하지 않을 수 있습니다. 이것은 과거의 경우였습니다. 1Gbps 이더넷이 처음 나왔을 때 PC와 서버에서 사용되는 버스는 400Mbps 만 처리 할 수있었습니다.

프로세서가 충분히 빠르지 않은 경우 트래픽이 줄어 듭니다. 어쨌든, 정체가 올바르게 처리되면 혼잡이 처리되는 방식이므로 많은 트래픽이 손실 될 수 있습니다. RED (Random Early Detection)는 임의의 대기열에서 패킷을 무작위로 삭제하여 패킷이 채워지거나 꼬리가 떨어지지 않도록하는 방법입니다. 이것은 TCP 동기화를 방지하는 데 도움이 될 수 있습니다. 여러 포트 속도가 동일한 속도의 다른 단일 포트로 보내야하는 스위치에서 많은 손실이 발생합니다.


1
이로 인해 수신 삭제와 송신 삭제가 혼동됩니다. 폐기는 일반적으로 이더넷 인터페이스의 링 버퍼가 과도하게 채워질 때 발생합니다. CPU가 데이터의 도착 속도와 보조를 맞출 수 없을 때 발생합니다. 이 링 버퍼는 너무 작아서 RED를 구현할 수 없습니다.
vk5tu

@ vk5tu, 수신 또는 발신 여부에 관계없이 트래픽이 항상 삭제된다는 요점을 놓쳤습니다. 시스템의 일부가 트래픽 양을 처리 할 수 ​​없으면 일부는 삭제되고 일부는 의도적으로 삭제됩니다.
Ron Maupin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.