2012년 5월 16일 수요일

TOE(TCP offload engine)란 무엇인가?

이더넷 인터페이스 스펙을 유심히 들여다 본 사용자라면 지원 기능중에 TOE(TCP offload engine)를 본적이 있을 것이다. TOE 는 NIC(Network Interface Cards)에서 사용되는 기술로, 보통 운영체제 상에서 처리되는 TCP/IP 스택을 네트워크 컨트롤러로 내려서 처리하는 것이다. 네트워크 처리가 크게 필요한 기가비트나 10G 기가비트같은 고속네트워크에서 유용하게 사용된다.


처음 TCP는 저속의 네트워크 속도에서 이용되었는데, 지금의 통신속도와 비교해 보면 통신속도는 크게 증가했다. 일반 PC 들도 기가비트 환경이 대중화되었고, 그 만큼 TCP 통신을 필요로 하는 데이터를 처리를 위해 컴퓨팅 파워 사용이 증가하게 되었다. 위키피디아에 기술되어 있는 정보를 보면, Full Duplex 기가비트의 TCP 통신은 2.4GHz 펜티엄 4 프로세스의 80% 이상의 자원을 쓰게된다고 한다. 그래서 시스템에서 동작할 수 있는 여유자원은 상당히 제한적이게 된다. 하지만, 지금의 CPU 스펙을 보면 크게 증가하였다. 대중적인 것이 i3, i5, i7 이 되었으니 말이다. 다시 TCP 프로토콜을 처리하는데 있어서 오버헤드를 가져오는 요소를 살펴보면 다음과 같다:

- 3 way 핸드쉐이크 과정을 통한 연결
- 체크섬, 시퀀스 넘버 계산
- Packet acknowledgement 와 congestion 제어를 위한 슬라이딩 윈도우 계산
- 연결 해제

이러한 기능들을 전용하드웨어로 구현하게 되었고 그것이 TCP offload 엔진이다. 즉, CPU 는 다른 작업을 할 수 있도록 여유를 주자는 것이다. 2008년에는 몇몇 제한적인 NIC 만이 TOE 를 지원하였지만 지금은 상황이 달라졌다. TOE 구현은 오프로드 정도에 따라 부분적 오프로딩과 전체(Full offloading)오프로딩으로 구분된다. 부분적 오프로딩은 체크섬 및 데이터 송수신 관련한 기능만을 구현한 것이다. 이에 반해 전체 오프로딩은 TCP/IP 패킷을 처리하기 위한 TCP연결설정, 타임아웃,오류처리 등과 같이 TCP/IP 스택을 하드웨어로 구현한 것이다.

일반적으로 TCP/IP 의 1bit/s 를 처리하는데는 CPU 1 헤르츠가 필요한 것으로 알려져 있다. 예를 들어 5Gbit/s (메가로 환산하면 625MB/s) 네트워크 트래픽을 처리하기 위해서는 5GHz CPU 가 필요하다. 이 뜻은 5Gbit/s 를 처리하기 위해서는 2.5GHz 듀얼코어 CPU 가 필요하다는 것이다. 이렇게 TOE 기능을 이용해 CPU 자원 사용을 줄여주게 되어 TCP/IP 처리가 많은 경우에는 TOE 를 지원하는 기능이 그렇지 않은 경우보다 더 많은 작업(시스템 관점에서)을 처리할 수 있게 된다.

기본적으로 리눅스 커널에서는 TOE 하드웨어를 지원하고 있지 않다. 패치를 통해서 가능하지만, 커널상에서 직접 지원하지 않는 이유는 다음과 같은 몇 가지 이유들이 있다.

TOE 펌웨어는 소스가 공개되어 있지 않아, 보안적으로 문제가 발생할 경우 해결할 방법을 제시할 수 없기 때문에 보안적 이슈가 있다. 또한 복잡성도 증가되고, 하드웨어적인 여러 제약이 있다. 이러한 여러 이유는 다음의 경로에 잘 정리되어 있다.

http://www.linuxfoundation.org/collaborate/workgroups/networking/toe

지금 한번 여러분들의 NIC 을 체크해 보는 것은 어떨까?
이전에 포스팅한 ethtool 을 통해 오프로드를 살펴볼 수 있으므로, 다음 '참고' 글을 확인해 보기 바란다.

[참고]
1. 위키피디아 TCP Offload Engine
http://en.wikipedia.org/wiki/TCP_offload_engine
2. Ethtool 을 통해 네트워크 카드(NIC) 정보 확인 또는 설정하기
http://www.packetinside.com/2012/04/ethtool-nic.html

댓글 3개:

  1. 좋은 정보 감사합니다.

    답글삭제
  2. 윈도우에서는 네트워크카드가 TOE 를 지원하는지 여부를 검사할 때 어떻게 하나요?

    답글삭제
    답글
    1. 윈도우에서 확인할 수 있는 방법을 포스팅 하였습니다. "윈도우에서 네트워크 드라이버 설정 정보 보기 (TOE, 점보프레임등 확인)" 글을 참고하세요 :=)

      삭제