KR100576721B1 - 제로카피(zero-copy) 전송 기능을 구비한네트워크 카드와 서버 및 그 전송 방법 - Google Patents

제로카피(zero-copy) 전송 기능을 구비한네트워크 카드와 서버 및 그 전송 방법 Download PDF

Info

Publication number
KR100576721B1
KR100576721B1 KR1020030096900A KR20030096900A KR100576721B1 KR 100576721 B1 KR100576721 B1 KR 100576721B1 KR 1020030096900 A KR1020030096900 A KR 1020030096900A KR 20030096900 A KR20030096900 A KR 20030096900A KR 100576721 B1 KR100576721 B1 KR 100576721B1
Authority
KR
South Korea
Prior art keywords
memory
pci
network
copy
tcp
Prior art date
Application number
KR1020030096900A
Other languages
English (en)
Other versions
KR20050065133A (ko
Inventor
석성우
백승훈
최준영
김성운
Original Assignee
한국전자통신연구원
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 한국전자통신연구원 filed Critical 한국전자통신연구원
Priority to KR1020030096900A priority Critical patent/KR100576721B1/ko
Publication of KR20050065133A publication Critical patent/KR20050065133A/ko
Application granted granted Critical
Publication of KR100576721B1 publication Critical patent/KR100576721B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • H04L69/161Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Bus Control (AREA)

Abstract

제로카피(zero-copy) 전송 기능을 구비한 네트워크 카드와 서버 및 그 전송 방법이 개시된다.
본 발명에 따른 제로 카피(zero-copy) 전송 기능을 지원하는 네트워크 카드는, 네트워크로 전송될 데이터를 디스크로부터 읽어 들이는 디스크 컨트롤러; 상기 디스크 컨트롤러가 읽어 들인 상기 데이터를 일시 저장하는 PCI 메모리; 상기 PCI 메모리를 제어하는 PCI 메모리 컨트롤러; 및 상기 PCI 메모리로부터 상기 데이터를 읽어서 네트워크로 전송하는 네트워크 컨트롤러를 포함하며, 상기 네트워크 컨트롤러는, 중간의 메모리 복사과정이 없이 디스크로부터 데이터를 읽어 상기 PCI 메모리를 통해 네트워크에 전송하는 제로 카피(zero-copy) 전송 기능을 지원하는 것을 특징으로 한다.
이에 따라, 로컬 메모리 대역폭 및 로컬 PCI버스 대역폭의 사용이 최소화되고 메모리간 복사가 일어나지 않기 때문에 CPU의 개입을 최소화함으로써 로컬 CPU의 부하를 경감시킬 수 있다.
TCP/IP 스택, zero-copy, PCI 메모리, TOE(TCP/IP Offload Engine), BSD 소켓 API, Linux

Description

제로카피(zero-copy) 전송 기능을 구비한 네트워크 카드와 서버 및 그 전송 방법{Network card having zero-copy transmission function, server and method thereof}
도 1은 본 발명에 따른 제로 카피(zero-copy) 전송 기능을 제공하는 네트워크 카드의 구성을 나타내는 도면,
도 2는 본 발명에 따른 제로 카피(zero-copy) 전송 기능을 구현하기 위한 TCP/IP 스택의 처리를 개략적으로 나타낸 플로우차트,
도 3은 전술한 TCP/IP 스택의 처리과정에서 로컬 메모리에 존재하는 헤더와 기타 정보 및 PCI 메모리에 존재하는 페이로드를 포함하는 전체 자료구조를 나타낸 도면이다.
<도면의 주요 부분에 대한 부호의 설명>
100: SCSI 디스크
102: SCSI 디스크 컨트롤러
110: PCI 메모리
112: PCI 메모리 컨트롤러
120: TOE(TCP/IP Offload Engine) 네트워크 컨트롤러
130: PCI/PCI-X 브리지
본 발명은 TCP/IP(transmission control protocol-internet protocol) 및 UDP(User datagram protocol) 프로토콜에 관한 것으로, 보다 상세히는 제로 카피(zero-copy) 전송 기능을 구비한 TCP/IP 및 UDP 네트워크 서버 및 그 전송 방법에 관한 것이다.
인터넷 이용자수의 증가와 네트워크의 고속화로 인해 서버에 요구되는 데이터 전송량은 기하급수적으로 증가하고 있으며, 특히 스트리밍 응용과 같은 멀티미디어 데이터의 전송이 증가하고 있다.
스트리밍(streaming)의 경우, 하드디스크 등의 저장매체에 기록된 데이터를 읽어들여 네트워크를 통해 전송하게 된다. 이 때, 기존의 일반적인 서버는 메모리 상에서 여러 번의 복사 과정을 거치게 된다.
일반적인 유닉스(UNIX) 또는 리눅스(Linux) 서버 등에서 하드디스크에서 파일을 읽어 네트워크로 전송하는 과정은 다음과 같다.
1) 디스크로부터 커널(kernel) 내 버퍼로 데이터를 읽어들인다.
2) 커널 내 버퍼에서 사용자 프로그램이 지정한 사용자 메모리 영역으로 데이터를 복사한다.
3) 사용자 메모리 영역에서 커널 내 소켓 버퍼로 데이터를 복사한다.
4) 네트워크 컨트롤러가 소켓 버퍼의 내용을 DMA(Direct Memory Access)로 가져가서 전송한다.
전술한 과정에서 메모리간 복사는 2)번과 3)번에서 두 번 발생하게 된다. 이러한 메모리간 복사는 메모리 대역폭을 점유할 뿐만 아니라, CPU를 사용하여 복사하기 때문에 스트리밍 서비스와 같이 전송량이 많은 응용의 경우, CPU 점유율이 심각하게 높아진다. 또한, 데이터가 SCSI 컨트롤러로부터 로컬 메모리로, 로컬 메모리로부터 네트워크 인터페이스로 전송되어야 하기 때문에, 실제 데이터 전송량의 2배 이상의 호스트 PCI 버스의 대역폭을 차지하게 된다.
이러한 메모리간 복사를 줄이기 위해 사용되는 방법으로, 사용자 버퍼 영역을 사용하지 않고 커널 버퍼를 사용하여 메모리간 복사 없이 직접 전송하기 위해 리눅스에서 제공하는 sendfile() 기능이 대표적이다. sendfile() 기능은 커널 메모리의 디스크 캐시를 버퍼로 사용하여 디스크 상의 파일을 직접 네트워크로 전송할 수 있는 방법을 제공하고 있다. sendfile()은 특별한 하드웨어 없이 소프트웨어만으로 구현되어 비용이 적게 들고, 운영체제가 직접 지원하는 기능이므로 범용성이 높다.
그러나, 로컬 메모리를 버퍼로 사용하기 때문에 로컬 PCI 버스 대역폭 사용량은 줄어들지 않고, TCP로만 전송이 가능하기 때문에 UDP를 사용하는 응용에는 적용할 수 없는 단점이 있다. 또한, 파일이 아닌 사용자 메모리 공간의 데이터를 제로 카피(zero-copy)로 전송하는 데에는 사용할 수 없다. 나아가, 체크섬 오프로딩(Checksum offloading)을 지원하지 않는 네트워크 컨트롤러일 경우에는 체크섬을 수행하기 위해 페이로드(payload)를 읽어야 하므로 일정 정도 CPU 부하가 높아진다. 특히, 스캐터/개더(Scatter/Gather)가 지원되지 않을 경우에는 헤더와 페이로드를 하나의 버퍼영역으로 만들기 위해서 커널 내부에서 메모리간 복사를 수행해야 하므로, 메모리가 복사 없이 디스크로부터 네트워크로 데이터를 전송하고자 하는 제로 카피(zero-copy)의 이점이 없어지게 되는 문제점이 있다.
여기서 스캐터/개더(Scatter/Gather)란 페이로드와 헤더(예를 들면, IP 헤더, TCP 헤더, UDP 헤더 등)가 메모리 주소 상에서 연속적으로 배열되지 않고 떨어져 있더라도, 네트워크 컨트롤러가 각각 DMA로 접근해서 헤더와 페이로드를 네트워크로 전송할 수 있는 기능을 말한다. 체크섬 오프로드(Checksum offload)는 TCP 헤더, UDP 헤더, IP 헤더가 포함하는 체크섬 값을 CPU가 계산하지 않고, 네트워크 컨트롤러가 계산함으로써 제로 카피(zero-copy)로 전송시 CPU가 페이로드에 접근하지 않아도 되도록 하는 기능을 일컫는다.
한편, 메모리간 복사를 줄이기 위해 사용되는 또 다른 방법으로, TCP/IP 오프로드 네트워크 인터페이스 장치(TCP/IP offload network interface device)에 관한 기술이 개시된 미국특허 제6,434,620호(1999년 8월 27일 출원)가 있다. 전술한 특허에서는 Alacritech사에서 제작한 전용(ASIC) TOE(TCP/IP Offload Engine) 칩을 사용하여 사용자 메모리 영역을 커널 메모리 영역으로 복사하지 않고, 하드웨어에서 직접 접근해서 전송함으로써 메모리간 복사 없이 제로 카피(zero-copy)로 사용자 메모리 영역에 저장된 데이터를 전송하는 SLIC(Session Layer Interface Control) 기술을 제안하고 있다. 이 방법은 스캐터/개더 및 체크섬 오프로딩을 포함해서 TCP/IP 스택의 전 과정을 TOE라는 전용 칩이 담당함으로써 호스트 CPU의 부하를 줄여줄 뿐만 아니라, 사용자 메모리 영역에서 직접 DMA를 통해 데이터를 읽어들이기 때문에 메모리간 복사 없이 고속의 전송이 가능한 장점이 있다.
그러나, SLIC 기술은 전술한 sendfile()과 마찬가지로 UDP 응용에는 적용할 수 없다. 또한, 제로 카피(zero-copy) 기능을 사용하기 위해서는 범용의 BSD(Berkeley Software Distribution (UNIX)) 소켓 API(Application Interface)가 아닌 전용 API를 사용하여야 한다. 나아가, 디스크에서 데이터를 읽어서 네트워크로 전송할 경우, 디스크에서 사용자 메모리 버퍼로 읽어들이는 과정에서 발생하는 메모리간 복사는 제거하지 못하기 때문에, 디스크에서 데이터를 읽어서 네트워크로 전송하는 응용의 경우에는 제로 카피(zero-copy) 전송이 불가능한 문제점이 있다.
따라서, 본 발명의 목적은 전술한 문제점을 해결하기 위하여, 메모리간 복사 없이 PCI 메모리 및 기존의 범용 BSD 소켓 API를 이용하여 제로 카피(zero-copy) 전송을 지원하는 네트워크 카드와 이를 포함하는 서버 및 그 전송 방법을 제공하는 것이다.
상기 목적은, 네트워크로 전송될 데이터를 디스크로부터 읽어 들이는 디스크 컨트롤러; 상기 디스크 컨트롤러가 읽어 들인 상기 데이터를 일시 저장하는 PCI 메모리; 상기 PCI 메모리를 제어하는 PCI 메모리 컨트롤러; 및 상기 PCI 메모리로부 터 상기 데이터를 읽어서 네트워크로 전송하는 네트워크 컨트롤러를 포함하며, 상기 네트워크 컨트롤러는, 중간의 메모리 복사과정이 없이 디스크로부터 데이터를 읽어 상기 PCI 메모리를 통해 네트워크에 전송하는 제로 카피(zero-copy) 전송 기능을 지원하는 것을 특징으로 하는 네트워크 카드에 의해 달성된다.
상기 네트워크 컨트롤러는, TCP/IP 또는 UDP 전송시에 IP 헤더, TCP 헤더, UDP 헤더와 페이로드가 메모리 공간상에서 연속적이지 않더라도 전송할 수 있는 스캐터/개더(Scatter/Gather) 기능 및 상기 TCP 헤더와 상기 UDP헤더의 체크섬을 로컬 CPU 대신 계산함으로써 로컬 CPU가 페이로드에 접근하지 않아도 되는 체크섬 오프로딩(Checksum offloading) 기능을 제공하는 것이 바람직하다.
상기 네트워크 컨트롤러는, PCI 메모리에 저장된 데이터를 페이로드로 하여 네트워크로 전송할 때, 헤더부분은 로컬 메모리에 생성하고, PCI 메모리에 저장된 페이로드를 로컬 메모리로 복사하지 않고 상기 PCI 메모리에서 직접 메모리 접근(DMA) 방법으로 읽어들여서 상기 체크섬을 계산하여 전송하는 것이 바람직하다.
상기 네트워크 컨트롤러는, 상기 PCI 메모리의 주소를 사용자 메모리 영역으로 맵핑하고, 사용자가 전송하고자 하는 페이로드가 저장된 상기 PCI 메모리 영역을 범용의 BSD 소켓 API의 인자중 사용자 메모리 주소와 크기로 사용하여 커널을 호출하고, 커널 내의 TCP/IP 스택에서는 사용자가 전달한 메모리 영역이 상기 PCI 메모리인지 판단하며, 판단 결과 상기 PCI 메모리 영역이 아니면 기존의 TCP/IP 스택으로 처리하고, 판단 결과 상기 PCI 메모리 영역이면 상기 스캐터/개더 기능 및 상기 체크섬 오프로딩 기능을 사용하여 작성된 TCP/IP 스택에서 페이로드의 메모리간 복사 없이 상기 제로 카피(zero-copy)로 처리하는 것이 바람직하다.
한편, 본 발명의 다른 분야에 따르면, 상기 목적은 전술한 네트워크 카드를 포함하며 상기 제로 카피(zero-copy) 기능을 제공하는 네트워크 서버에 의해서도 달성된다.
한편, 본 발명의 또 다른 분야에 따르면, 상기 목적은 (a) 사용자가 전송하고자 하는 페이로드가 저장된 상기 PCI 메모리 영역을 이용하여 커널을 호출하는 단계; (b) 상기 호출된 커널 내의 TCP/IP 스택에서 사용자가 전달한 메모리 영역이 상기 PCI 메모리인지 판단하는 단계; (c) 상기 판단 결과, 상기 PCI 메모리인 경우, 상기 TCP/IP 스택에서 페이로드의 메모리간 복사 없이 제로 카피(zero-copy)로 처리하는 단계; 및 (d) 상기 판단 결과, 상기 PCI 메모리가 아닌 경우, 기존의 TCP/IP 스택으로 처리하는 단계를 포함하는 것을 특징으로 하는 제로 카피(zero-copy) 전송 방법에 의해서 달성된다.
상기 (c)단계는, (c1) 상기 커널 내에 버퍼를 할당하는 단계; (c2) 상기 버퍼의 헤더를 작성하고 헤더에 대한 체크섬을 수행하는 단계; (c3) 상기 사용자가 전달한 메모리 영역의 PCI 사용자 주소를 물리적 주소로 변환한 후, 다시 커널 주소로 변환하는 단계; (c4) 상기 버퍼의 페이로드 포인터에 상기 변환된 커널 주소를 등록하는 단계; 및 (c5) 작성된 상기 버퍼를 네트워크 컨트롤러로 전달하는 단계를 포함하는 것이 바람직하다.
이하에서는 첨부된 도면을 참조하여 본 발명의 바람직한 실시예에 대해 상세 히 설명한다.
도 1은 본 발명에 따른 제로 카피(zero-copy) 전송 기능을 제공하는 네트워크 카드의 구성을 나타내는 도면이다.
도 1을 참조하면, 본 발명에 따른 제로 카피(zero-copy) 전송 기능을 제공하는 네트워크 카드는, SCSI 컨트롤러(102), PCI 메모리(110), PCI 메모리 컨트롤러(112), TOE 네트워크 컨트롤러(120) 및 PCI/PCI-X 브리지(130)를 포함한다.
SCSI 컨트롤러(102)는, SCSI 디스크(100)와 연결되어 SCSI 디스크의 입출력 처리를 제어한다.
PCI 메모리 컨트롤러(112)는, PCI 메모리(110)에 대하여 PCI 주소 영역을 보여주고 그 입출력 처리를 제어한다.
TOE 네트워크 컨트롤러(120)는, TCP/IP 네트워크 인터페이스를 제공하며, TCP 헤더, UDP 헤더, IP 헤더에 대한 체크섬 오프로딩 및 스캐터/개더를 통해 로컬 메모리(도시하지 않음)에 저장된 페이로드와 PCI 메모리(110)에 저장된 페이로드 및 헤더를 네트워크로 전송하는 기능을 수행한다. TOE는 고속 이더넷 시스템의 스루풋(throughput)을 최적화하기 위한 기술이다. 최근 몇 년 사이에 이더넷 시스템 내의 통신속도는 컴퓨터 프로세서의 처리속도보다 더 빨라졌다. 프로세서는 입출력보다 계산을 우선하도록 설계되어 있기 때문에, 네트워크를 통해 흐르는 데이터의 속도를 따라잡을 수 없어 입출력 병목현상이 발생한다. 이러한 이유로 TCP/IP의 데이터 흐름은 네트워크 속도보다 더 느린 속도로 처리된다. TOE는 프로세서와 입출력 시스템으로부터 TCP/IP의 처리에 대한 부담을 제거함으로써, 이러한 병목현상을 해결하기 위한 기술이다.
PCI/PCI-X 브리지(130)는, 고속 운영을 위해 마이크로 프로세서와 확장 슬롯에 부착된 장치들 간의 상호 접속 시스템(BUS)이다. PCI(Peripheral Component Interconnect)는 124핀의 접속으로 한번에 32비트를 전송한다. PCI는 주소와 데이터 신호를 전송하기 위해 모든 동적 경로를 사용하며, 첫 번째 클록 사이클에 주소를 보내고 그 다음 클록 사이클에 데이터를 보낸다. 많은 량의 데이터를 보낼 때에는 첫 번째 사이클에 시작 주소를 보낸 다음, 이어지는 일정 횟수의 사이클 동안 계속해서 데이터 전송을 하는 것도 가능하다. 한편, PCI-X(Peripheral Component Interconnect Extended)는 컴퓨터 내의 데이터 이동 속도를 66 MHz에서 133 MHz로 높일 수 있는 컴퓨터 버스 기술이다. 최대 64 비트 버스가 133 MHz에서 동작할 수 있다.
본 발명의 바람직한 실시예에 따라, SCSI 디스크(100)에 저장된 데이터를 네트워크로 전송하는 과정을 살펴보면 다음과 같다.
1) 사용자 프로그램은 PCI 메모리(110)의 일정영역을 사용자 메모리 영역으로 맵핑해서 해당 PCI메모리 영역에 대한 가상 주소를 얻는다.
2) 사용자 프로그램에서 PCI 메모리(110) 영역으로 디스크의 블록 읽기를 요청하면, SCSI 컨트롤러(102)는 해당 디스크 블록을 읽어서 DMA(Direct Memory Access)를 통해 해당 PCI 메모리(110) 영역에 데이터를 저장한다.
3) 사용자 프로그램은 읽기가 완료되면, 해당 PCI 메모리(110)영역에 대해 네트워크로 전송을 요청한다.
4) 네트워크 처리를 담당하는 커널 내 TCP/IP 스택에서는, 사용자 프로그램이 전달한 주소가 PCI 메모리(110) 영역인지 또는 일반 로컬 메모리(도시하지 않음) 영역인지 판단한다. 판단 결과, 일반 로컬 메모리일 경우에는 일반적인 TCP/IP 처리방법으로 처리하고, PCI 메모리(110) 영역일 경우에는 헤더만 작성하고 해당 PCI 메모리 영역에 대한 주소를 TOE 네트워크 컨트롤러(120)로 전달한다.
5) TOE 네트워크 컨트롤러(120)는 헤더를 로컬 메모리(도시하지 않음) 영역에서, 페이로드를 해당 PCI 메모리(110) 영역에서 각각 DMA로 읽어서 체크섬을 수행한 다음, 네트워크로 전송한다.
도 2는 본 발명에 따른 제로 카피(zero-copy) 전송 기능을 구현하기 위한 TCP/IP 스택의 처리를 개략적으로 나타낸 플로우차트이다.
도 2를 참조하면, BSD 소켓 API를 사용하여 제로 카피(zero-copy) 전송 기능을 구현하기 위한 TCP/IP 스택의 구조를 리눅스 커널 환경에서 구현한 예를 도시한다. 먼저, 네트워크 카드가 활성화되었는지 확인한 후(202 단계), send() 혹은 sendto()와 같은 BSD 소켓 API를 통해서 전달된 사용자 주소 영역이 PCI 메모리(110) 영역인지 판단한다(204 단계).
판단 결과, 사용자 주소 영역이 PCI 메모리(110) 영역일 경우, 제로 카피(zero-copy) 스택(210)에 따라 처리된다. 즉, 커널 내의 버퍼인 SKBUFF를 할당하고(212 단계), SKBUFF의 헤더를 작성하고 체크섬을 수행하며(214 단계), 페이로드가 위치하는 메모리 주소를, 사용자 주소(PCI USER ADDRESS)에서 물리적 주소(PHYSICAL ADDRESS)로 변환하고 이 물리적 주소를 다시 커널 주소(KERNEL ADDRESS)로 변환한 다음(216 단계), SKBUFF의 페이로드 포인터에 변환된 커널 주소를 등록하고(218 단계), 작성된 SKBUFF를 디바이스 드라이버인 TOE 네트워크 컨트롤러(120)에 전달한다. SKBUFF를 전달받은 TOE 네트워크 컨트롤러(120)는 다시 이를 물리적 주소로 변환하여 페이로드 및 헤더를 DMA로 읽어들여 체크섬을 수행한 후 네트워크로 전송하게 된다.
PCI 메모리 주소를 사용자 주소에서 물리적 주소로, 다시 커널 주소로 변경하는 것은 디바이스 드라이버인 TOE 네트워크 컨트롤러(120)가 커널 주소만을 입력으로 받아들이기 때문에 TOE 네트워크 컨트롤러(120)의 수정 없이 구현하기 위한 것이다.
이 과정에서 페이로드는 PCI 메모리(110) 영역에서 로컬 메모리(도시하지 않음)로 복사되거나 CPU의 접근이 발생하지 않고, 오직 TCP 헤더, UDP 헤더 및 IP 헤더만이 PCI 버스(130)를 통해 로컬 메모리에서 TOE 네트워크 컨트롤러(120)로 전송된다. 이에 따라, CPU의 부하가 줄어들고 페이로드는 호스트 PCI 버스의 대역폭을 사용하지 않으므로 호스트 PCI 버스의 사용 대역폭이 줄어든다.
한편, 판단 결과(204 단계), 사용자 주소 영역이 PCI 메모리(110) 영역이 아닌 경우에는 일반적인 TCP/IP 스택(240)에 따라 처리된다. 즉, SKBUFF를 할당하고(242 단계), SKBUFF의 헤더를 작성하고 체크섬을 수행하며(244 단계), 페이로드가 위치하는 사용자 메모리 영역의 데이터를 커널 내에 할당한 버퍼인 SKBUFF로 복사하고(246 단계), 페이로드를 포함한 전체 영역에 대해 CPU가 체크섬 을 수행하며(248 단계), 작성된 SKBUFF를 디바이스 드라이버인 TOE 네트워크 컨트롤러(120)로 전달한다(250 단계). TOE 네트워크 컨트롤러(120)는 커널내 버퍼의 데이터를 DMA로 읽어서 네트워크로 전송하게 된다.
도 3은 전술한 TCP/IP 스택의 처리과정에서 로컬 메모리에 존재하는 헤더와 기타 정보 및 PCI 메모리에 존재하는 페이로드를 포함하는 전체 자료구조를 나타낸 도면이다.
도 3을 참조하면, 커널 내 SKBUFF에 저장된 데이터에는 IP 헤더, TCP 헤더, UDP 헤더, 페이로드 #1, skb_shared_info가 포함되며, skb_shared_info는 페이로드 #2, 페이로드 #3, 및 페이로드 #4를 지시한다. 이때, 페이로드 #1은 로컬 메모리의 사용자 메모리 영역에서 복사된 것이고, 페이로드 #2 내지 페이로드 #4는 PCI 메모리(110) 영역에 존재한다. 일반적인 TCP/IP 스택(240)에서는, PCI 메모리(110)에 존재하는 페이로드 #2 내지 페이로드 #4를 로컬 메모리로 복사하여 헤더정보와 연속적으로 위치하도록 만든 후, TOE 네트워크 컨트롤러(120)로 전달한다. 그러나, 제로 카피(zero-copy) TCP/IP 스택(210)에서는, 도면에 도시된 바와 같이 페이로드 #1은 로컬 메모리로부터, 페이로드 #2 내지 페이로드 #4는 PCI 메모리(110)로부터 도면과 같은 자료 구조로 작성한 후, TOE 네트워크 컨트롤러(120)로 전달하게 된다.
TOE 네트워크 컨트롤러(120)는 이와 같이 페이로드의 일부가 다른 메모리 영역에 존재해도 DMA가 가능한 영역이라면 이를 DMA로 읽어들여 네트워크로 전송한다. 즉, 연속된 위치에 헤더 및 페이로드가 위치하도록 하기 위한 메모리간 복사 과정을 생략하고, 메모리가 복사 없이 제로 카피(zero-copy) 기능을 제공할 수 있다.
이상에서 설명한 것은 본 발명에 따른 BSD 소켓 API를 사용한 제로 카피(zero-copy) 전송 기능을 구비한 네트워크 카드와 이를 포함하는 서버 및 제로 카피(zero-copy) 전송 방법을 실시하기 위한 하나의 실시예에 불과한 것으로서, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자는 본 발명의 본질적 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현할 수 있을 것이다. 따라서, 본 발명의 범위는 전술한 실시예에 한정되지 않고 특허 청구범위에 기재된 내용과 동등한 범위 내에 있는 다양한 실시 형태가 포함되도록 해석되어야 할 것이다.
전술한 바와 같이 본 발명에 따르면, BSD 소켓 API를 사용한 제로 카피(zero-copy) 전송 기능을 구비한 네트워크 카드는 PCI 메모리를 사용하여 디스크로부터 데이터를 읽어들이고 이 데이터를 중간 복사과정 없이 제로 카피(zero-copy)로 네트워크로 전송함으로써 불필요한 메모리간 복사과정을 제거하여 메모리 대역폭의 낭비를 줄일 수 있다.
또한, 데이터 전송과정에서 CPU의 개입 없이 각 컨트롤러의 DMA기능을 사용함으로써 CPU 부하를 줄이고, 호스트 시스템의 성능저하를 방지하면서 네트워크를 통한 데이터 전송 속도를 최대화할 수 있는 장점이 있다.
나아가, 페이로드가 호스트 PCI 버스를 통과하지 않기 때문에 호스트 PCI 버스의 대역폭 사용도 대폭 줄일 수 있다.
또한, 본 발명에 따른 BSD 소켓 API를 사용한 제로 카피(zero-copy) 전송 기능을 구비한 네트워크 카드는 기존의 범용 네트워크 API인 BSD 소켓 API를 사용하여 제로 카피(zero-copy) 기능을 제공함으로써, 제로 카피(zero-copy) 전송기능을 사용하기 위해 새로운 API를 사용할 필요가 없는 장점이 있다.

Claims (7)

  1. 네트워크로 전송될 데이터를 디스크로부터 읽어 들이는 디스크 컨트롤러;
    상기 디스크 컨트롤러가 읽어 들인 상기 데이터를 일시 저장하는 PCI 메모리;
    상기 PCI 메모리를 제어하는 PCI 메모리 컨트롤러; 및
    상기 PCI 메모리로부터 상기 데이터를 읽어서 네트워크로 전송하는 네트워크 컨트롤러를 포함하며,
    상기 네트워크 컨트롤러는, 중간의 메모리 복사과정이 없이 디스크로부터 데이터를 읽어 상기 PCI 메모리를 통해 네트워크에 전송하는 제로 카피(zero-copy) 전송 기능을 지원하고,
    상기 네트워크 컨트롤러는, TCP/IP 또는 UDP 전송시에 IP 헤더, TCP 헤더, UDP 헤더와 페이로드가 메모리 공간상에서 연속적이지 않더라도 전송할 수 있는 스캐터/개더(Scatter/Gather) 기능을 제공하는 것을 특징으로 하는 네트워크 카드.
  2. 제1항에 있어서,
    상기 네트워크 컨트롤러는, 상기 TCP 헤더와 상기 UDP 헤더의 체크섬을 로컬 CPU 대신 계산함으로써 로컬 CPU가 페이로드에 접근하지 않아도 되는 체크섬 오프로딩(Checksum offloading) 기능을 더 제공하는 것을 특징으로 하는 네트워크 카드.
  3. 제2항에 있어서,
    상기 네트워크 컨트롤러는, PCI 메모리에 저장된 데이터를 페이로드로 하여 네트워크로 전송할 때, 헤더부분은 로컬 메모리에 생성하고, PCI 메모리에 저장된 페이로드를 로컬 메모리로 복사하지 않고 상기 PCI 메모리에서 직접 메모리 접근(DMA) 방법으로 읽어들여서 상기 체크섬을 계산하여 전송하는 것을 특징으로 하는 네트워크 카드.
  4. 제3항에 있어서,
    상기 네트워크 컨트롤러는, 상기 PCI 메모리의 주소를 사용자 메모리 영역으로 맵핑하고, 사용자가 전송하고자 하는 페이로드가 저장된 상기 PCI 메모리 영역을 범용의 BSD 소켓 API의 인자중 사용자 메모리 주소와 크기로 사용하여 커널을 호출하고, 커널내의 TCP/IP 스택에서는 사용자가 전달한 메모리 영역이 상기 PCI 메모리인지 판단하며, 판단 결과 상기 PCI 메모리 영역이 아니면 기존의 TCP/IP 스택으로 처리하고, 판단 결과 상기 PCI 메모리 영역이면 상기 스캐터/개더 기능 및 상기 체크섬 오프로딩 기능을 사용하여 작성된 TCP/IP 스택에서 페이로드의 메모리간 복사 없이 상기 제로 카피(zero-copy)로 처리하는 것을 특징으로 하는 네트워크 카드.
  5. 제1항의 네트워크 카드를 포함하며 상기 제로 카피(zero-copy) 기능을 제공하는 네트워크 서버.
  6. (a) 사용자가 전송하고자 하는 페이로드가 저장된 상기 PCI 메모리 영역을 이용하여 커널을 호출하는 단계;
    (b) 상기 호출된 커널내의 TCP/IP 스택에서 사용자가 전달한 메모리 영역이 상기 PCI 메모리인지 판단하는 단계;
    (c) 상기 판단 결과, 상기 PCI 메모리인 경우, 상기 TCP/IP 스택에서 페이로드의 메모리간 복사 없이 제로 카피(zero-copy)로 처리하는 단계; 및
    (d) 상기 판단 결과, 상기 PCI 메모리가 아닌 경우, 기존의 소정의 TCP/IP 스택으로 처리하는 단계를 포함하는 것을 특징으로 하는 제로 카피(zero-copy) 전송 방법.
  7. 제6항에 있어서,
    상기 (c)단계는,
    (c1) 상기 커널내에 버퍼를 할당하는 단계;
    (c2) 상기 버퍼의 헤더를 작성하고 헤더에 대한 체크섬을 수행하는 단계;
    (c3) 상기 사용자가 전달한 메모리 영역의 PCI 사용자 주소를 물리적 주소로 변환한 후, 다시 커널 주소로 변환하는 단계;
    (c4) 상기 버퍼의 페이로드 포인터에 상기 변환된 커널 주소를 등록하는 단계; 및
    (c5) 작성된 상기 버퍼를 네트워크 컨트롤러로 전달하는 단계를 포함하는 것을 특징으로 하는 제로 카피(zero-copy) 전송 방법.
KR1020030096900A 2003-12-24 2003-12-24 제로카피(zero-copy) 전송 기능을 구비한네트워크 카드와 서버 및 그 전송 방법 KR100576721B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020030096900A KR100576721B1 (ko) 2003-12-24 2003-12-24 제로카피(zero-copy) 전송 기능을 구비한네트워크 카드와 서버 및 그 전송 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020030096900A KR100576721B1 (ko) 2003-12-24 2003-12-24 제로카피(zero-copy) 전송 기능을 구비한네트워크 카드와 서버 및 그 전송 방법

Publications (2)

Publication Number Publication Date
KR20050065133A KR20050065133A (ko) 2005-06-29
KR100576721B1 true KR100576721B1 (ko) 2006-05-03

Family

ID=37256660

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020030096900A KR100576721B1 (ko) 2003-12-24 2003-12-24 제로카피(zero-copy) 전송 기능을 구비한네트워크 카드와 서버 및 그 전송 방법

Country Status (1)

Country Link
KR (1) KR100576721B1 (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100723879B1 (ko) * 2005-12-08 2007-05-31 한국전자통신연구원 TOE를 이용한 iSCSI 타겟 시스템 상의 하드웨어가속 장치 및 그 장치를 이용한 읽기/쓰기 명령 수행방법
KR100758272B1 (ko) 2006-04-26 2007-09-12 한국전자통신연구원 데이터 무 복사 파일 이동 방법
WO2008069531A1 (en) * 2006-12-04 2008-06-12 Electronics And Telecommunications Research Institute Method of accelerating i/o between user memory and disk using pci memory
KR101203157B1 (ko) 2009-03-05 2012-11-20 한국전자통신연구원 데이터 전달 시스템, 장치 및 방법
CN117318892B (zh) * 2023-11-27 2024-04-02 阿里云计算有限公司 计算系统、数据处理方法、网卡、主机及存储介质

Also Published As

Publication number Publication date
KR20050065133A (ko) 2005-06-29

Similar Documents

Publication Publication Date Title
US6421742B1 (en) Method and apparatus for emulating an input/output unit when transferring data over a network
KR100758272B1 (ko) 데이터 무 복사 파일 이동 방법
US7461160B2 (en) Obtaining a destination address so that a network interface device can write network data without headers directly into host memory
US6581130B1 (en) Dynamic remapping of address registers for address translation between multiple busses
US8913616B2 (en) System-on-chip-based network protocol in consideration of network efficiency
EP1896965B1 (en) Dma descriptor queue read and cache write pointer arrangement
JP3641675B2 (ja) 分割バッファアーキテクチュア
US7502877B2 (en) Dynamically setting routing information to transfer input output data directly into processor caches in a multi processor system
US8788726B2 (en) Data transmission system, storage medium and data transmission program
US6675253B1 (en) Dynamic routing of data across multiple data paths from a source controller to a destination controller
CN112612734B (zh) 文件传输方法、装置、计算机设备及存储介质
US6170030B1 (en) Method and apparatus for restreaming data that has been queued in a bus bridging device
EP0889623A2 (en) System and method for efficient remote disk I/O
US20050144402A1 (en) Method, system, and program for managing virtual memory
US8539112B2 (en) TCP/IP offload device
US9015380B2 (en) Exchanging message data in a distributed computer system
US7761529B2 (en) Method, system, and program for managing memory requests by devices
US6826622B2 (en) Method of transferring data between memories of computers
KR100576721B1 (ko) 제로카피(zero-copy) 전송 기능을 구비한네트워크 카드와 서버 및 그 전송 방법
US6425071B1 (en) Subsystem bridge of AMBA&#39;s ASB bus to peripheral component interconnect (PCI) bus
KR100553348B1 (ko) 피엠이엠 제어기를 이용한 고속 스트리밍 데이터 전송장치 및 방법
KR100449806B1 (ko) 네트워크를 통해 스트리밍 데이터를 고속으로 송수신하기위한 네트워크-스토리지 연결 장치
US9137167B2 (en) Host ethernet adapter frame forwarding
JP2664827B2 (ja) 実時間情報転送制御方法
CN117170854A (zh) 一种内存访问方法及相关设备

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20100401

Year of fee payment: 5

LAPS Lapse due to unpaid annual fee