TCP Offload Engine(TOE)에 대한 이해
I. TCP/IP와 TOE
TCP/IP는 가장 널리 사용되는 컴퓨터 간의 통신 프로토콜이다. 그러나 불행히TCP/IP는 현재 서버 호스트 CPU의 가장 큰 부하로 작용하고 있다. 일반적으로 1bit/sec의 TCP/IP 데이터를 처리하는데 1Hz의 CPU 사이클이 필요하다. 즉 10/100Mbps 네트워크 속도에서 CPU는 TCP/IP를 처리하는데 큰 어려움이 없었다. 그러나 기가비트 이더넷의 출현으로 서버CPU는 TCP/IP 처리에 대부분의 사이클을 소모하게 되었다. (그림 1 (a))에 의하면 CPU 속도는 18개월마다 2배씩 증가하지만 NIC 대역폭은 그보다 훨씬 더 빠르게12개월에 3배씩 증가하고 있다. 네트워크 대역폭은 무어의 법칙을 훨씬 앞서가고 있는 것이다[4]. 예를 들면10 기가비트 이더넷만을 처리하기 위해서 전이중 통신을 고려할 때 20GHz의 프로세스가 필요하다. 이는 2007년에나 가능한 일이다. 더욱이 최근들어 TCP/IP 프로토콜 위에 SCSI 프로토콜을 올린 iSCSI 란 네트워크 스토리지 프로토콜의 출현과 네트워크로 연결된 한 컴퓨터에서 다른 컴퓨터로 직접 메모리 데이터를 액세스하는 RDMA(Remote Direct Memory Access) 기술 모두 TCP/IP 가속 기술이 먼저 선행되어야 가능한 기술이다.
TCP/IP Offload Engine(TOE)은 CPU의 TCP/IP 패킷 처리의 부하를 NIC 하드웨어가 처리하는 TCP/IP 가속 장치이다. (그림 1 (b))와 같이 TOE는 소프트웨어가 담당하던 Transport, Network 계층을 하드웨어가 담당하도록 한다. 그러나 소프트웨어가 담당하던 다양하고 복잡한 TCP/IP 처리를 하드웨어로 모두 구현하기는 힘들다. 따라서 TOE를 생산하는 업체들은 각기 Offloading 수준을 달리하고 있다.
II. TCP/IP 프로토콜 문제점
1. TCP/IP 프로토콜 기능
TCP/IP 프로토콜은 데이터 전송에 사용되는 표준으로 LAN이나 WAN 에 광범위하게 사용되고 있다. IP 레이어는 송수신 IP 주소를 포함하고 있으며 비연결성 특징을 가지고 있다. TCP 레이어에서는 데이터 스트림 서비스를 위해 신뢰성 있고 연결 지향적인 서비스를 제공한다. 일반적으로 인터넷 프로토콜로 사용되는 FTP, HTTP 등은 모두 TCP를 이용하고 있다. TCP 계층에서는 체크섬(checksum)을 통하여서 패킷의 헤더뿐 아니라 패킷 데이터까지 전송 시 발생하는 오류를 검사하고 있다. 초기 연결 시 설정되는 MSS(Maximum segment size)를 기준으로 패킷의 분할, 조립 기능을 수행한다. 또한 시퀀스 번호(Sequence number)를 통하여 순서대로 도착하지 않은 데이터들에 대한 정렬 기능을 제공하고 있다. 슬라이딩 윈도(sliding window) 기법을 통하여 수신부의 버퍼 상태를 파악하여 송신부에서 흐름 제어(Flow control)를 수행하며 반대로 송신부에서 나타내는 슬라이딩 윈도를 통하여 혼잡 제어(Congestion control)을 수행한다. 또한 TCP는 포트 제어를 통하여서 여러 가지 애플리케이션의 데이터를 다중화하여 송수신을 담당한다.
2. Traditional TCP/IP 구조와 문제점
TCP/IP 프로토콜은 (그림 2)와 같은 레이어 프로토콜들로 이루어져 있다. 이는 소프트웨어로 구현되어 있으며 OS에 포함되어 있다. TCP 프로토콜과 애플리케이션의 인터페이스는 소켓(socket) 인터페이스가 이용된다.
(그림 2)와 같은 인터페이스를 통해 애플리케이션이 네트워크를 통해 데이터를 보낼 경우 다음과 같은 데이터 이동과 프로토콜 작업을 거치게 된다.
애플리케이션이 전송할 데이터를4~64KB 크기로 TCP/IP 소켓 인터페이스에 기록하면 OS는 데이터를 MTU(maximum transmission unit) 사이즈에 맞게 분할한 후 TCP/IP 헤더를 추가한다. 이후 OS는 데이터를 NIC 카드의 송신 큐로 복사를 한다. NIC은 TCP 버퍼 영역에서 NIC로 DMA 전송을 수행하며, 전송 종료를 알리는 인터럽터(Interrupts)가 발생하게 된다. 이러한 전통적인 TCP/IP 처리에는 다음과 같은 문제점이 있다.
- 인터럽트: 프로세스는 매 패킷이 더 할 때마다 패킷 헤더 처리를 위한 인터럽트가 발생하게 된다. 이는 대용량 데이터 전송 시 큰 부하로 작용한다.
- Context Switch 문제: 입력되는 패킷은 커널 레벨 프로세스를 위해서 컨텍스트 스위치가 필요하다. 사용자 영역(user space)에서 커널 영역(kernel space)으로 전환 시 데이터 전송의 초기화 혹은 종료가 필요하다.
- 메모리 복사: (그림 3)은 송수신시 일반적인 NIC 카드의 데이터 복사 과정을 나타낸다. 송신 시 NIC은 먼저 애플리케이션 사용자 영역에서부터 OS 커널 영역으로 데이터 복사가 필요하다. 이후 NIC 드라이버는 커널에서 NIC 패킷 버퍼로 복사를 수행한다. 즉 두 번의 복사가 이루어진다. 반면 패킷을 수신할 경우, 먼저 NIC은 수신한 패킷을 메인 메모리에 위치한 NIC 버퍼에 저장한 후 이를 TCP 버퍼에 복사하고 이후 최종적으로 애플리케이션 영역에 복사한다. 총 세 번의 복사가 이루어지는 것이다. 만약 TOE를 사용한다면 NIC 버퍼가 필요없이 두 번의 복사만으로 처리가 가능해진다. 또한 TOE 를 사용한 RDMA는 제로카피(Zero Copy) 알고리즘에 의해 한 번에 애플리케이션 버퍼에 복사가 가능해진다.
- 프로토콜 처리: 각각의 입출력 패킷은 TCP/IP 모든 스택을 거치면서 앞서 TCP/IP 프로토콜 기능에서 언급한 TCP/IP 패킷 처리가 이루어진다. 이는 애플리케이션 처리에 사용될 CPU 활용도를 크게 저하시킨다.
III. TOE 구조와 특징
기가비트 이더넷으로 네트워크 속도가 빨라짐에 따라 이러한 전통적인 이더넷 NIC 카드에서 CPU의 TCP/IP 처리의 부담을 덜어 주는 방법이 점차 늘어나고 있다. 다수의 기가비트 이더넷 컨트롤러에는 호스트 오프로드 특징으로TCP/IP/UDP 체크섬이나 TCP 분할(segmentation)을 하드웨어로 구현하고 있다[5].
체크섬은 데이터 무결성을 체크하기 위해 사용되며 송수신측에서 16비트 1의 보수 합으로 계산되어진다. TCP/IP/UDP 체크섬 오프로드 기술은 TCP와 IP 레이어에서 수행되는 체크섬 계산을 호스트 CPU가 담당하지 않고 NIC에서 처리하는 방법이다. IP 체크섬은 헤더만 이루어지며 TCP/UDP 체크섬의 경우에는 데이터까지 모두 계산하게 된다.
TCP 분할 오프로드는 기존의 OS가 전송 데이터를 MTU 사이즈로 분할하는 작업을 담당한다. TCP 분할이 오프로드됨으로 대용량의 데이터를 송신할 때에 OS가 TCP 분할의 부담을 덜 수 있다. 이는 기가비트 이더넷과 같은 대용량의 메시지를 송신할 경우 매우 유용하다. 그러나 작은 패킷들이 많을 경우, 연결이 자주 끊기는 상황 등에서는 효과가 없다. 뿐만 아니라 수신측에는 전혀 도움이 되지 않는다.
그러나 이 두 가지 오프로드만으로 높은 성능을 기대하기는 힘들다. 따라서 기존의 OS가 수행하는 TCP/IP 프로토콜 처리의 많은 부분을 오프로드한 TOE 제품들이 개발되고 있다. TOE를 구현하기 위해서는 TCP/IP를 처리하는 NIC 카드와 이 카드에 특화된 TCP/IP 소프트웨어 구현이 필요하다. (그림 4)는 완전한 TOE 기반의 TCP/IP 통신 스택을 나타내고 있다. (그림 2)의 스택과 달리 커널 영역에서 담당하던 TCP/IP 처리가 없으며 사용자 영역에서 커널 영역을 거치지 않고 TOE로 직접 접근이 가능하다.
TOE 구현은 오프로드 정도에 따라 크게 두 가지 형태로 나뉜다. TCP/IP의 일부 기능을 하드웨어로 구현하는 부분적 오프로딩(Partial offloading)과 모든 기능을 구현하는 전체 오프로딩(Full offloading) 방법이 있다. 일반적으로 부분적 오프로딩을 데이터 패스 오프로딩(Data path offloading)이라 부르며 이는 TCP/IP 데이터 송수신에 관련된 기능만을 하드웨어로 구현한다. 반면 전체 오프로딩은 데이터 송수신 기능뿐 아니라 TCP/IP 패킷을 처리하기 위한 TCP 연결 설정, 타임아웃, 오류 처리, 혼잡 제어, 슬라이딩 윈도 제어, ACK 처리 등과 같은 다양한 제어 기능들까지 모든 TCP/IP 기능을 하드웨어로 구현한다.
TOE NIC구현 방법에는 크게 프로세스 기반 구현 방법과 칩(ASIC) 기반 구현 방법이 있다. 프로세스 기반 구현 방법은 시중에 출시된 네트워크 프로세스를 사용하여 빠르고 유연성(flexibility) 있는 설계가 가능하나 칩 기반 구현에 비해 높은 가격과 낮은 성능의 단점을 가지고 있다. 따라서 대부분의 TOE 업체에서는 TCP/IP 오프로딩을 위한 전용 칩을 개발하여 칩 기반의 TOE를 구현하고 있다.
출처 - http://www.solway.co.kr/bbs/board.php?bo_table=resource&wr_id=2