KR20050065133A - Network card having zero-copy transmission function, server and method thereof - Google Patents
Network card having zero-copy transmission function, server and method thereof Download PDFInfo
- Publication number
- KR20050065133A KR20050065133A KR1020030096900A KR20030096900A KR20050065133A KR 20050065133 A KR20050065133 A KR 20050065133A KR 1020030096900 A KR1020030096900 A KR 1020030096900A KR 20030096900 A KR20030096900 A KR 20030096900A KR 20050065133 A KR20050065133 A KR 20050065133A
- Authority
- KR
- South Korea
- Prior art keywords
- memory
- pci
- network
- payload
- copy
- Prior art date
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/161—Implementation 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) 전송 기능을 구비한 네트워크 카드와 서버 및 그 전송 방법이 개시된다. Disclosed are a network card and a server having a zero-copy transmission function and a transmission method thereof.
본 발명에 따른 제로 카피(zero-copy) 전송 기능을 지원하는 네트워크 카드는, 네트워크로 전송될 데이터를 디스크로부터 읽어 들이는 디스크 컨트롤러; 상기 디스크 컨트롤러가 읽어 들인 상기 데이터를 일시 저장하는 PCI 메모리; 상기 PCI 메모리를 제어하는 PCI 메모리 컨트롤러; 및 상기 PCI 메모리로부터 상기 데이터를 읽어서 네트워크로 전송하는 네트워크 컨트롤러를 포함하며, 상기 네트워크 컨트롤러는, 중간의 메모리 복사과정이 없이 디스크로부터 데이터를 읽어 상기 PCI 메모리를 통해 네트워크에 전송하는 제로 카피(zero-copy) 전송 기능을 지원하는 것을 특징으로 한다.A network card supporting a zero-copy transmission function according to the present invention includes a disk controller for reading data from a disk to be transmitted to a network; A PCI memory for temporarily storing the data read by the disk controller; A PCI memory controller controlling the PCI memory; And a network controller that reads the data from the PCI memory and transmits the data to a network, wherein the network controller reads data from a disk and transmits the data to the network through the PCI memory without an intermediate memory copying process. copy) transfer function.
이에 따라, 로컬 메모리 대역폭 및 로컬 PCI버스 대역폭의 사용이 최소화되고 메모리간 복사가 일어나지 않기 때문에 CPU의 개입을 최소화함으로써 로컬 CPU의 부하를 경감시킬 수 있다.As a result, the use of local memory bandwidth and local PCI bus bandwidth is minimized, and no copy-to-memory copy occurs, thereby minimizing CPU intervention, thereby reducing the load on the local CPU.
Description
본 발명은 TCP/IP(transmission control protocol-internet protocol) 및 UDP(User datagram protocol) 프로토콜에 관한 것으로, 보다 상세히는 제로 카피(zero-copy) 전송 기능을 구비한 TCP/IP 및 UDP 네트워크 서버 및 그 전송 방법에 관한 것이다.The present invention relates to a transmission control protocol-internet protocol (TCP / IP) and a user datagram protocol (UDP) protocol, and more particularly, to a TCP / IP and UDP network server having a zero-copy transmission function, and a It relates to a transmission method.
인터넷 이용자수의 증가와 네트워크의 고속화로 인해 서버에 요구되는 데이터 전송량은 기하급수적으로 증가하고 있으며, 특히 스트리밍 응용과 같은 멀티미디어 데이터의 전송이 증가하고 있다.Due to the increase in the number of Internet users and the speed of the network, the data transmission amount required for the server is increasing exponentially, and in particular, the transmission of multimedia data such as streaming applications is increasing.
스트리밍(streaming)의 경우, 하드디스크 등의 저장매체에 기록된 데이터를 읽어들여 네트워크를 통해 전송하게 된다. 이 때, 기존의 일반적인 서버는 메모리 상에서 여러 번의 복사 과정을 거치게 된다.In the case of streaming, data recorded on a storage medium such as a hard disk is read and transmitted through a network. At this time, the existing general server goes through several copies in memory.
일반적인 유닉스(UNIX) 또는 리눅스(Linux) 서버 등에서 하드디스크에서 파일을 읽어 네트워크로 전송하는 과정은 다음과 같다.The process of reading a file from a hard disk and transferring it to a network in a general UNIX or Linux server is as follows.
1) 디스크로부터 커널(kernel) 내 버퍼로 데이터를 읽어들인다.1) Read data from disk into buffer in kernel.
2) 커널 내 버퍼에서 사용자 프로그램이 지정한 사용자 메모리 영역으로 데이터를 복사한다.2) Copies data from the buffer in the kernel to the user memory area specified by the user program.
3) 사용자 메모리 영역에서 커널 내 소켓 버퍼로 데이터를 복사한다.3) Copy data from the user memory area to the socket buffer in the kernel.
4) 네트워크 컨트롤러가 소켓 버퍼의 내용을 DMA(Direct Memory Access)로 가져가서 전송한다.4) The network controller transfers the contents of the socket buffer to DMA (Direct Memory Access).
전술한 과정에서 메모리간 복사는 2)번과 3)번에서 두 번 발생하게 된다. 이러한 메모리간 복사는 메모리 대역폭을 점유할 뿐만 아니라, CPU를 사용하여 복사하기 때문에 스트리밍 서비스와 같이 전송량이 많은 응용의 경우, CPU 점유율이 심각하게 높아진다. 또한, 데이터가 SCSI 컨트롤러로부터 로컬 메모리로, 로컬 메모리로부터 네트워크 인터페이스로 전송되어야 하기 때문에, 실제 데이터 전송량의 2배 이상의 호스트 PCI 버스의 대역폭을 차지하게 된다.In the above process, the memory-to-memory copy occurs twice in 2) and 3). This copy-to-memory copy not only occupies memory bandwidth, but also uses CPU to copy, which significantly increases CPU occupancy in high-transmission applications such as streaming services. In addition, since data must be transferred from the SCSI controller to local memory and from local memory to the network interface, it takes up more than twice the bandwidth of the host PCI bus as much as the actual data transfer.
이러한 메모리간 복사를 줄이기 위해 사용되는 방법으로, 사용자 버퍼 영역을 사용하지 않고 커널 버퍼를 사용하여 메모리간 복사 없이 직접 전송하기 위해 리눅스에서 제공하는 sendfile() 기능이 대표적이다. sendfile() 기능은 커널 메모리의 디스크 캐시를 버퍼로 사용하여 디스크 상의 파일을 직접 네트워크로 전송할 수 있는 방법을 제공하고 있다. sendfile()은 특별한 하드웨어 없이 소프트웨어만으로 구현되어 비용이 적게 들고, 운영체제가 직접 지원하는 기능이므로 범용성이 높다. The method used to reduce such inter-memory copy is typical of the sendfile () function provided by Linux for direct transfer without using inter-memory copy using kernel buffer without using user buffer area. The sendfile () function provides a way to send files on disk directly to the network, using the kernel cache's disk cache as a buffer. sendfile () is low cost because it is implemented only by software without special hardware, and it is highly versatile because it is directly supported by the operating system.
그러나, 로컬 메모리를 버퍼로 사용하기 때문에 로컬 PCI 버스 대역폭 사용량은 줄어들지 않고, TCP로만 전송이 가능하기 때문에 UDP를 사용하는 응용에는 적용할 수 없는 단점이 있다. 또한, 파일이 아닌 사용자 메모리 공간의 데이터를 제로 카피(zero-copy)로 전송하는 데에는 사용할 수 없다. 나아가, 체크섬 오프로딩(Checksum offloading)을 지원하지 않는 네트워크 컨트롤러일 경우에는 체크섬을 수행하기 위해 페이로드(payload)를 읽어야 하므로 일정 정도 CPU 부하가 높아진다. 특히, 스캐터/개더(Scatter/Gather)가 지원되지 않을 경우에는 헤더와 페이로드를 하나의 버퍼영역으로 만들기 위해서 커널 내부에서 메모리간 복사를 수행해야 하므로, 메모리가 복사 없이 디스크로부터 네트워크로 데이터를 전송하고자 하는 제로 카피(zero-copy)의 이점이 없어지게 되는 문제점이 있다.However, because local memory is used as a buffer, local PCI bus bandwidth usage is not reduced, and since it can be transmitted only through TCP, it is not applicable to an application using UDP. In addition, it cannot be used to transfer data in user memory space that is not a file in zero-copy. Furthermore, in the case of a network controller that does not support checksum offloading, a payload must be read in order to perform checksums, which increases CPU load to some extent. In particular, if scatter / gather is not supported, you need to perform an in-memory copy inside the kernel to make the header and payload into one buffer area. There is a problem that the advantage of zero-copy to be transmitted is lost.
여기서 스캐터/개더(Scatter/Gather)란 페이로드와 헤더(예를 들면, IP 헤더, TCP 헤더, UDP 헤더 등)가 메모리 주소 상에서 연속적으로 배열되지 않고 떨어져 있더라도, 네트워크 컨트롤러가 각각 DMA로 접근해서 헤더와 페이로드를 네트워크로 전송할 수 있는 기능을 말한다. 체크섬 오프로드(Checksum offload)는 TCP 헤더, UDP 헤더, IP 헤더가 포함하는 체크섬 값을 CPU가 계산하지 않고, 네트워크 컨트롤러가 계산함으로써 제로 카피(zero-copy)로 전송시 CPU가 페이로드에 접근하지 않아도 되도록 하는 기능을 일컫는다.Scatter / Gather here means that even if the payload and headers (e.g. IP header, TCP header, UDP header, etc.) are separated from each other without being arranged consecutively on the memory address, the network controllers each access DMA Refers to the function to transmit the header and payload to the network. Checksum offload means that the CPU does not calculate the checksum values contained in the TCP header, UDP header, and IP header, but the network controller calculates the checksum value so that the CPU does not access the payload when sent in zero-copy. It is a function that does not need to.
한편, 메모리간 복사를 줄이기 위해 사용되는 또 다른 방법으로, 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를 통해 데이터를 읽어들이기 때문에 메모리간 복사 없이 고속의 전송이 가능한 장점이 있다.On the other hand, as another method used to reduce the copy-to-memory copy, US Patent No. 6,434, 620 (August 27, 1999) discloses a technology relating to TCP / IP offload network interface device There is). In the above patent, Alacritech uses a dedicated (ASIC) TCP / IP Offload Engine (TOE) chip, which does not copy user memory areas to kernel memory areas. It proposes a Session Layer Interface Control (SLIC) technology that transmits data stored in a user memory area with zero-copy. This method not only reduces the load on the host CPU, but also reads data through the DMA directly from the user memory area, as a dedicated chip called the TOE takes care of the entire process of the TCP / IP stack, including scatter / gather and checksum offloading. The advantage is that high-speed transfers can be made without copying between memories.
그러나, SLIC 기술은 전술한 sendfile()과 마찬가지로 UDP 응용에는 적용할 수 없다. 또한, 제로 카피(zero-copy) 기능을 사용하기 위해서는 범용의 BSD(Berkeley Software Distribution (UNIX)) 소켓 API(Application Interface)가 아닌 전용 API를 사용하여야 한다. 나아가, 디스크에서 데이터를 읽어서 네트워크로 전송할 경우, 디스크에서 사용자 메모리 버퍼로 읽어들이는 과정에서 발생하는 메모리간 복사는 제거하지 못하기 때문에, 디스크에서 데이터를 읽어서 네트워크로 전송하는 응용의 경우에는 제로 카피(zero-copy) 전송이 불가능한 문제점이 있다.However, the SLIC technique is not applicable to UDP applications like the sendfile () described above. In addition, in order to use the zero-copy function, a dedicated API must be used instead of the general purpose BSD (Berkeley Software Distribution (UNIX)) socket application interface (API). Furthermore, when data is read from the disk and sent over the network, the inter-memory copy that occurs during reading from the disk into the user memory buffer cannot be removed, so zero copy is required for applications that read data from the disk and send it over the network. There is a problem that (zero-copy) transmission is impossible.
따라서, 본 발명의 목적은 전술한 문제점을 해결하기 위하여, 메모리간 복사 없이 PCI 메모리 및 기존의 범용 BSD 소켓 API를 이용하여 제로 카피(zero-copy) 전송을 지원하는 네트워크 카드와 이를 포함하는 서버 및 그 전송 방법을 제공하는 것이다.Accordingly, an object of the present invention is to solve the above problems, a network card that supports zero-copy transmission using a PCI memory and the existing general purpose BSD socket API without inter-memory copy and a server comprising the same; It is to provide a transmission method.
상기 목적은, 네트워크로 전송될 데이터를 디스크로부터 읽어 들이는 디스크 컨트롤러; 상기 디스크 컨트롤러가 읽어 들인 상기 데이터를 일시 저장하는 PCI 메모리; 상기 PCI 메모리를 제어하는 PCI 메모리 컨트롤러; 및 상기 PCI 메모리로부터 상기 데이터를 읽어서 네트워크로 전송하는 네트워크 컨트롤러를 포함하며, 상기 네트워크 컨트롤러는, 중간의 메모리 복사과정이 없이 디스크로부터 데이터를 읽어 상기 PCI 메모리를 통해 네트워크에 전송하는 제로 카피(zero-copy) 전송 기능을 지원하는 것을 특징으로 하는 네트워크 카드에 의해 달성된다.The object includes: a disk controller for reading data from a disk to be transmitted to a network; A PCI memory for temporarily storing the data read by the disk controller; A PCI memory controller controlling the PCI memory; And a network controller that reads the data from the PCI memory and transmits the data to a network, wherein the network controller reads data from a disk and transmits the data to the network through the PCI memory without an intermediate memory copying process. copy) is achieved by a network card characterized by supporting the transfer function.
상기 네트워크 컨트롤러는, TCP/IP 또는 UDP 전송시에 IP 헤더, TCP 헤더, UDP 헤더와 페이로드가 메모리 공간상에서 연속적이지 않더라도 전송할 수 있는 스캐터/개더(Scatter/Gather) 기능 및 상기 TCP 헤더와 상기 UDP헤더의 체크섬을 로컬 CPU 대신 계산함으로써 로컬 CPU가 페이로드에 접근하지 않아도 되는 체크섬 오프로딩(Checksum offloading) 기능을 제공하는 것이 바람직하다.The network controller may include a scatter / gather function that transmits an IP header, a TCP header, a UDP header, and a payload even when the TCP / IP or UDP transmission is not continuous in memory space. By calculating the checksum of the UDP header instead of the local CPU, it is desirable to provide a checksum offloading function that does not require the local CPU to access the payload.
상기 네트워크 컨트롤러는, PCI 메모리에 저장된 데이터를 페이로드로 하여 네트워크로 전송할 때, 헤더부분은 로컬 메모리에 생성하고, PCI 메모리에 저장된 페이로드를 로컬 메모리로 복사하지 않고 상기 PCI 메모리에서 직접 메모리 접근(DMA) 방법으로 읽어들여서 상기 체크섬을 계산하여 전송하는 것이 바람직하다.When the network controller transmits the data stored in the PCI memory as a payload to the network, the header portion is generated in the local memory, and the memory controller directly accesses the memory from the PCI memory without copying the payload stored in the PCI memory to the local memory. DMA) method is preferably used to calculate and transmit the checksum.
상기 네트워크 컨트롤러는, 상기 PCI 메모리의 주소를 사용자 메모리 영역으로 맵핑하고, 사용자가 전송하고자 하는 페이로드가 저장된 상기 PCI 메모리 영역을 범용의 BSD 소켓 API의 인자중 사용자 메모리 주소와 크기로 사용하여 커널을 호출하고, 커널 내의 TCP/IP 스택에서는 사용자가 전달한 메모리 영역이 상기 PCI 메모리인지 판단하며, 판단 결과 상기 PCI 메모리 영역이 아니면 기존의 TCP/IP 스택으로 처리하고, 판단 결과 상기 PCI 메모리 영역이면 상기 스캐터/개더 기능 및 상기 체크섬 오프로딩 기능을 사용하여 작성된 TCP/IP 스택에서 페이로드의 메모리간 복사 없이 상기 제로 카피(zero-copy)로 처리하는 것이 바람직하다.The network controller maps the address of the PCI memory to the user memory region, and uses the PCI memory region in which the payload that the user intends to transmit is stored as the user memory address and size among the arguments of the general purpose BSD socket API. The TCP / IP stack in the kernel to determine whether the memory area transmitted by the user is the PCI memory, and if the result of the determination is not the PCI memory area, processes the existing TCP / IP stack. It is desirable to process the zero-copy without inter-memory copying of the payload in the TCP / IP stack created using the caterer / gather function and the checksum offloading function.
한편, 본 발명의 다른 분야에 따르면, 상기 목적은 전술한 네트워크 카드를 포함하며 상기 제로 카피(zero-copy) 기능을 제공하는 네트워크 서버에 의해서도 달성된다.On the other hand, according to another field of the present invention, the above object is also achieved by a network server including the above-described network card and providing the zero-copy function.
한편, 본 발명의 또 다른 분야에 따르면, 상기 목적은 (a) 사용자가 전송하고자 하는 페이로드가 저장된 상기 PCI 메모리 영역을 이용하여 커널을 호출하는 단계; (b) 상기 호출된 커널 내의 TCP/IP 스택에서 사용자가 전달한 메모리 영역이 상기 PCI 메모리인지 판단하는 단계; (c) 상기 판단 결과, 상기 PCI 메모리인 경우, 상기 TCP/IP 스택에서 페이로드의 메모리간 복사 없이 제로 카피(zero-copy)로 처리하는 단계; 및 (d) 상기 판단 결과, 상기 PCI 메모리가 아닌 경우, 기존의 TCP/IP 스택으로 처리하는 단계를 포함하는 것을 특징으로 하는 제로 카피(zero-copy) 전송 방법에 의해서 달성된다.On the other hand, according to another field of the present invention, the object is (a) calling a kernel using the PCI memory region in which the payload to be transmitted by the user; (b) determining whether a memory area delivered by a user in the TCP / IP stack in the called kernel is the PCI memory; (c) in the case of the PCI memory, performing a zero-copy in the TCP / IP stack without copying a payload between memories; And (d) if the PCI memory is not the PCI memory as a result of the determination, processing by an existing TCP / IP stack is achieved by a zero-copy transmission method.
상기 (c)단계는, (c1) 상기 커널 내에 버퍼를 할당하는 단계; (c2) 상기 버퍼의 헤더를 작성하고 헤더에 대한 체크섬을 수행하는 단계; (c3) 상기 사용자가 전달한 메모리 영역의 PCI 사용자 주소를 물리적 주소로 변환한 후, 다시 커널 주소로 변환하는 단계; (c4) 상기 버퍼의 페이로드 포인터에 상기 변환된 커널 주소를 등록하는 단계; 및 (c5) 작성된 상기 버퍼를 네트워크 컨트롤러로 전달하는 단계를 포함하는 것이 바람직하다.Step (c) may include: (c1) allocating a buffer in the kernel; (c2) creating a header of the buffer and performing a checksum on the header; (c3) converting the PCI user address of the memory area delivered by the user into a physical address, and then converting the PCI user address into a kernel address; (c4) registering the translated kernel address in a payload pointer of the buffer; And (c5) transferring the created buffer to a network controller.
이하에서는 첨부된 도면을 참조하여 본 발명의 바람직한 실시예에 대해 상세히 설명한다.Hereinafter, with reference to the accompanying drawings will be described in detail a preferred embodiment of the present invention.
도 1은 본 발명에 따른 제로 카피(zero-copy) 전송 기능을 제공하는 네트워크 카드의 구성을 나타내는 도면이다.1 is a diagram showing the configuration of a network card that provides a zero-copy transmission function according to the present invention.
도 1을 참조하면, 본 발명에 따른 제로 카피(zero-copy) 전송 기능을 제공하는 네트워크 카드는, SCSI 컨트롤러(102), PCI 메모리(110), PCI 메모리 컨트롤러(112), TOE 네트워크 컨트롤러(120) 및 PCI/PCI-X 브리지(130)를 포함한다.Referring to FIG. 1, a network card that provides a zero-copy transmission function according to the present invention includes a SCSI controller 102, a PCI memory 110, a PCI memory controller 112, and a TOE network controller 120. ) And PCI / PCI-X bridge 130.
SCSI 컨트롤러(102)는, SCSI 디스크(100)와 연결되어 SCSI 디스크의 입출력 처리를 제어한다. The SCSI controller 102 is connected to the SCSI disk 100 to control the input / output processing of the SCSI disk.
PCI 메모리 컨트롤러(112)는, PCI 메모리(110)에 대하여 PCI 주소 영역을 보여주고 그 입출력 처리를 제어한다. The PCI memory controller 112 shows the PCI address area with respect to the PCI memory 110 and controls its input / output processing.
TOE 네트워크 컨트롤러(120)는, TCP/IP 네트워크 인터페이스를 제공하며, TCP 헤더, UDP 헤더, IP 헤더에 대한 체크섬 오프로딩 및 스캐터/개더를 통해 로컬 메모리(도시하지 않음)에 저장된 페이로드와 PCI 메모리(110)에 저장된 페이로드 및 헤더를 네트워크로 전송하는 기능을 수행한다. TOE는 고속 이더넷 시스템의 스루풋(throughput)을 최적화하기 위한 기술이다. 최근 몇 년 사이에 이더넷 시스템 내의 통신속도는 컴퓨터 프로세서의 처리속도보다 더 빨라졌다. 프로세서는 입출력보다 계산을 우선하도록 설계되어 있기 때문에, 네트워크를 통해 흐르는 데이터의 속도를 따라잡을 수 없어 입출력 병목현상이 발생한다. 이러한 이유로 TCP/IP의 데이터 흐름은 네트워크 속도보다 더 느린 속도로 처리된다. TOE는 프로세서와 입출력 시스템으로부터 TCP/IP의 처리에 대한 부담을 제거함으로써, 이러한 병목현상을 해결하기 위한 기술이다.The TOE network controller 120 provides a TCP / IP network interface, and includes payloads and PCIs stored in local memory (not shown) via TCP headers, UDP headers, checksum offloading for IP headers, and scatter / gather. The payload and the header stored in the memory 110 are transmitted to the network. TOE is a technique for optimizing the throughput of a fast Ethernet system. In recent years, the speed of communication in Ethernet systems has been faster than that of computer processors. Because processors are designed to prioritize computation over I / O, I / O bottlenecks can't keep up with the speed of data flowing through the network. For this reason, the data flow of TCP / IP is slower than the network speed. The TOE is a technique for solving this bottleneck by removing the burden of processing TCP / IP from the processor and the input / output system.
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에서 동작할 수 있다. PCI / PCI-X bridge 130 is an interconnect system (BUS) between devices attached to microprocessors and expansion slots for high speed operation. Peripheral Component Interconnect (PCI) transmits 32 bits at a time on a 124-pin connection. PCI uses all the dynamic paths to carry address and data signals, sending addresses in the first clock cycle and data in the next clock cycle. When sending a large amount of data, it is also possible to send the start address in the first cycle and then continue the data transfer for a subsequent number of cycles. Peripheral Component Interconnect Extended (PCI-X), on the other hand, is a computer bus technology that can speed up data movement within computers from 66 MHz to 133 MHz. Up to 64-bit buses can operate at 133 MHz.
본 발명의 바람직한 실시예에 따라, SCSI 디스크(100)에 저장된 데이터를 네트워크로 전송하는 과정을 살펴보면 다음과 같다.According to a preferred embodiment of the present invention, a process of transmitting data stored in the SCSI disk 100 to a network is as follows.
1) 사용자 프로그램은 PCI 메모리(110)의 일정영역을 사용자 메모리 영역으로 맵핑해서 해당 PCI메모리 영역에 대한 가상 주소를 얻는다.1) The user program maps a predetermined area of the PCI memory 110 into a user memory area to obtain a virtual address for the corresponding PCI memory area.
2) 사용자 프로그램에서 PCI 메모리(110) 영역으로 디스크의 블록 읽기를 요청하면, SCSI 컨트롤러(102)는 해당 디스크 블록을 읽어서 DMA(Direct Memory Access)를 통해 해당 PCI 메모리(110) 영역에 데이터를 저장한다.2) When a user program requests a block read of a disk to the PCI memory 110 region, the SCSI controller 102 reads the disk block and stores data in the PCI memory 110 region through direct memory access (DMA). do.
3) 사용자 프로그램은 읽기가 완료되면, 해당 PCI 메모리(110)영역에 대해 네트워크로 전송을 요청한다.3) When the user program completes reading, the user program requests transmission to the network for the PCI memory 110 region.
4) 네트워크 처리를 담당하는 커널 내 TCP/IP 스택에서는, 사용자 프로그램이 전달한 주소가 PCI 메모리(110) 영역인지 또는 일반 로컬 메모리(도시하지 않음) 영역인지 판단한다. 판단 결과, 일반 로컬 메모리일 경우에는 일반적인 TCP/IP 처리방법으로 처리하고, PCI 메모리(110) 영역일 경우에는 헤더만 작성하고 해당 PCI 메모리 영역에 대한 주소를 TOE 네트워크 컨트롤러(120)로 전달한다.4) In the kernel TCP / IP stack in charge of network processing, it is determined whether the address transmitted by the user program is the PCI memory 110 region or the general local memory (not shown) region. As a result of the determination, the general local memory is processed by the general TCP / IP processing method. In the case of the PCI memory 110 region, only the header is created and the address for the PCI memory region is transmitted to the TOE network controller 120.
5) TOE 네트워크 컨트롤러(120)는 헤더를 로컬 메모리(도시하지 않음) 영역에서, 페이로드를 해당 PCI 메모리(110) 영역에서 각각 DMA로 읽어서 체크섬을 수행한 다음, 네트워크로 전송한다.5) The TOE network controller 120 reads the headers from the local memory (not shown) area and reads the payloads from the corresponding PCI memory 110 area as DMA, performs a checksum, and then transmits them to the network.
도 2는 본 발명에 따른 제로 카피(zero-copy) 전송 기능을 구현하기 위한 TCP/IP 스택의 처리를 개략적으로 나타낸 플로우차트이다.2 is a flowchart schematically illustrating the processing of a TCP / IP stack to implement a zero-copy transfer function according to the present invention.
도 2를 참조하면, BSD 소켓 API를 사용하여 제로 카피(zero-copy) 전송 기능을 구현하기 위한 TCP/IP 스택의 구조를 리눅스 커널 환경에서 구현한 예를 도시한다. 먼저, 네트워크 카드가 활성화되었는지 확인한 후(202 단계), send() 혹은 sendto()와 같은 BSD 소켓 API를 통해서 전달된 사용자 주소 영역이 PCI 메모리(110) 영역인지 판단한다(204 단계). Referring to FIG. 2, an example of implementing a structure of a TCP / IP stack in a Linux kernel environment for implementing a zero-copy transfer function using a BSD socket API is shown. First, after confirming that the network card is activated (step 202), it is determined whether the user address area transmitted through the BSD socket API such as send () or sendto () is the PCI memory 110 area (step 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로 읽어들여 체크섬을 수행한 후 네트워크로 전송하게 된다.As a result, when the user address area is the PCI memory 110 area, the user address area is processed according to the zero-copy stack 210. That is, SKBUFF, which is a buffer in the kernel, is allocated (step 212), a header of SKBUFF is written and a checksum is performed (step 214), and the memory address where the payload is located is determined from a physical address (PCI USER ADDRESS). PHYSICAL ADDRESS), convert this physical address back to a kernel address (KERNEL ADDRESS) (step 216), register the translated kernel address in SKBUFF's payload pointer (step 218), and write the created SKBUFF as a device driver. Transfer to the TOE network controller 120. After receiving the SKBUFF, the TOE network controller 120 converts it into a physical address, reads the payload and header into the DMA, performs a checksum, and transmits it to the network.
PCI 메모리 주소를 사용자 주소에서 물리적 주소로, 다시 커널 주소로 변경하는 것은 디바이스 드라이버인 TOE 네트워크 컨트롤러(120)가 커널 주소만을 입력으로 받아들이기 때문에 TOE 네트워크 컨트롤러(120)의 수정 없이 구현하기 위한 것이다.Changing the PCI memory address from the user address to the physical address and the kernel address is intended to be implemented without modification of the TOE network controller 120 because the device driver TOE network controller 120 accepts only the kernel address as input.
이 과정에서 페이로드는 PCI 메모리(110) 영역에서 로컬 메모리(도시하지 않음)로 복사되거나 CPU의 접근이 발생하지 않고, 오직 TCP 헤더, UDP 헤더 및 IP 헤더만이 PCI 버스(130)를 통해 로컬 메모리에서 TOE 네트워크 컨트롤러(120)로 전송된다. 이에 따라, CPU의 부하가 줄어들고 페이로드는 호스트 PCI 버스의 대역폭을 사용하지 않으므로 호스트 PCI 버스의 사용 대역폭이 줄어든다.In this process, the payload is copied from the PCI memory 110 area to local memory (not shown) or CPU access does not occur, and only the TCP header, UDP header, and IP header are local to the PCI bus 130. It is transmitted from the memory to the TOE network controller 120. This reduces the load on the CPU and reduces the bandwidth used by the host PCI bus since the payload does not use the bandwidth of the host PCI bus.
한편, 판단 결과(204 단계), 사용자 주소 영역이 PCI 메모리(110) 영역이 아닌 경우에는 일반적인 TCP/IP 스택(240)에 따라 처리된다. 즉, SKBUFF를 할당하고(242 단계), SKBUFF의 헤더를 작성하고 체크섬을 수행하며(244 단계), 페이로드가 위치하는 사용자 메모리 영역의 데이터를 커널 내에 할당한 버퍼인 SKBUFF로 복사하고(246 단계), 페이로드를 포함한 전체 영역에 대해 CPU가 체크섬을 수행하며(248 단계), 작성된 SKBUFF를 디바이스 드라이버인 TOE 네트워크 컨트롤러(120)로 전달한다(250 단계). TOE 네트워크 컨트롤러(120)는 커널내 버퍼의 데이터를 DMA로 읽어서 네트워크로 전송하게 된다.On the other hand, if the determination result (step 204), the user address area is not the PCI memory 110 area is processed according to the general TCP / IP stack 240. In other words, SKBUFF is allocated (step 242), a header of SKBUFF is created and a checksum is performed (step 244), and data of the user memory area where the payload is located is copied to SKBUFF, a buffer allocated in the kernel (step 246). The CPU performs a checksum on the entire area including the payload (step 248), and transmits the created SKBUFF to the TOE network controller 120 which is a device driver (step 250). The TOE network controller 120 reads the data in the kernel buffer into the DMA and transmits the data to the network.
도 3은 전술한 TCP/IP 스택의 처리과정에서 로컬 메모리에 존재하는 헤더와 기타 정보 및 PCI 메모리에 존재하는 페이로드를 포함하는 전체 자료구조를 나타낸 도면이다.FIG. 3 is a diagram showing the entire data structure including the header and other information present in the local memory and the payload present in the PCI memory in the process of the aforementioned TCP / IP stack.
도 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)로 전달하게 된다.Referring to FIG. 3, data stored in SKBUFF in the kernel includes an IP header, a TCP header, a UDP header, payload # 1, and skb_shared_info, and skb_shared_info includes payload # 2, payload # 3, and payload # 4. Instruct. In this case, payload # 1 is copied from the user memory area of the local memory, and payloads # 2 to # 4 exist in the PCI memory 110 area. In the general TCP / IP stack 240, the payload # 2 to the payload # 4 existing in the PCI memory 110 is copied to the local memory to be continuously located with the header information, and then to the TOE network controller 120 To pass. However, in a zero-copy TCP / IP stack 210, payload # 1 is plotted from local memory and payloads # 2 to # 4 are plotted from PCI memory 110, as shown in the figure. After writing to the data structure, such as will be delivered to the TOE network controller 120.
TOE 네트워크 컨트롤러(120)는 이와 같이 페이로드의 일부가 다른 메모리 영역에 존재해도 DMA가 가능한 영역이라면 이를 DMA로 읽어들여 네트워크로 전송한다. 즉, 연속된 위치에 헤더 및 페이로드가 위치하도록 하기 위한 메모리간 복사 과정을 생략하고, 메모리가 복사 없이 제로 카피(zero-copy) 기능을 제공할 수 있다.The TOE network controller 120 reads the DMA and transmits it to the network even if a part of the payload exists in another memory area. In other words, the memory-to-memory copying process for omitting the header and the payload in consecutive positions may be omitted, and the memory may provide a zero-copy function without copying.
이상에서 설명한 것은 본 발명에 따른 BSD 소켓 API를 사용한 제로 카피(zero-copy) 전송 기능을 구비한 네트워크 카드와 이를 포함하는 서버 및 제로 카피(zero-copy) 전송 방법을 실시하기 위한 하나의 실시예에 불과한 것으로서, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자는 본 발명의 본질적 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현할 수 있을 것이다. 따라서, 본 발명의 범위는 전술한 실시예에 한정되지 않고 특허 청구범위에 기재된 내용과 동등한 범위 내에 있는 다양한 실시 형태가 포함되도록 해석되어야 할 것이다.As described above, a network card having a zero-copy transmission function using the BSD socket API according to the present invention, a server including the same, and an embodiment for implementing a zero-copy transmission method including the same It should be noted that only those skilled in the art to which the present invention pertains may implement the present invention in a modified form without departing from the essential features of the present invention. Therefore, the scope of the present invention should not be limited to the above-described examples, but should be construed to include various embodiments within the scope equivalent to those described in the claims.
전술한 바와 같이 본 발명에 따르면, BSD 소켓 API를 사용한 제로 카피(zero-copy) 전송 기능을 구비한 네트워크 카드는 PCI 메모리를 사용하여 디스크로부터 데이터를 읽어들이고 이 데이터를 중간 복사과정 없이 제로 카피(zero-copy)로 네트워크로 전송함으로써 불필요한 메모리간 복사과정을 제거하여 메모리 대역폭의 낭비를 줄일 수 있다. As described above, according to the present invention, a network card having a zero-copy transmission function using the BSD socket API reads data from a disk using a PCI memory, and copies the data to a zero copy without an intermediate copy process. By zero-copying over the network, unnecessary memory-to-memory copying can be eliminated, reducing memory bandwidth waste.
또한, 데이터 전송과정에서 CPU의 개입 없이 각 컨트롤러의 DMA기능을 사용함으로써 CPU 부하를 줄이고, 호스트 시스템의 성능저하를 방지하면서 네트워크를 통한 데이터 전송 속도를 최대화할 수 있는 장점이 있다. In addition, by using the DMA function of each controller without CPU involvement in the data transfer process, it is possible to reduce the CPU load and prevent the performance degradation of the host system, while maximizing the data transfer rate over the network.
나아가, 페이로드가 호스트 PCI 버스를 통과하지 않기 때문에 호스트 PCI 버스의 대역폭 사용도 대폭 줄일 수 있다. Furthermore, the bandwidth usage of the host PCI bus can be significantly reduced because the payload does not pass through the host PCI bus.
또한, 본 발명에 따른 BSD 소켓 API를 사용한 제로 카피(zero-copy) 전송 기능을 구비한 네트워크 카드는 기존의 범용 네트워크 API인 BSD 소켓 API를 사용하여 제로 카피(zero-copy) 기능을 제공함으로써, 제로 카피(zero-copy) 전송기능을 사용하기 위해 새로운 API를 사용할 필요가 없는 장점이 있다.In addition, a network card having a zero-copy transmission function using the BSD socket API according to the present invention provides a zero-copy function by using a BSD socket API, which is an existing general-purpose network API. The advantage is that you do not need to use the new API to use the zero-copy transfer function.
도 1은 본 발명에 따른 제로 카피(zero-copy) 전송 기능을 제공하는 네트워크 카드의 구성을 나타내는 도면,1 is a diagram showing the configuration of a network card that provides a zero-copy transmission function according to the present invention;
도 2는 본 발명에 따른 제로 카피(zero-copy) 전송 기능을 구현하기 위한 TCP/IP 스택의 처리를 개략적으로 나타낸 플로우차트,2 is a flowchart schematically illustrating the processing of a TCP / IP stack for implementing a zero-copy transmission function according to the present invention;
도 3은 전술한 TCP/IP 스택의 처리과정에서 로컬 메모리에 존재하는 헤더와 기타 정보 및 PCI 메모리에 존재하는 페이로드를 포함하는 전체 자료구조를 나타낸 도면이다.FIG. 3 is a diagram showing the entire data structure including the header and other information present in the local memory and the payload present in the PCI memory in the process of the aforementioned TCP / IP stack.
<도면의 주요 부분에 대한 부호의 설명><Explanation of symbols for the main parts of the drawings>
100: SCSI 디스크100: SCSI disk
102: SCSI 디스크 컨트롤러102: SCSI disk controller
110: PCI 메모리110: PCI memory
112: PCI 메모리 컨트롤러112: PCI memory controller
120: TOE(TCP/IP Offload Engine) 네트워크 컨트롤러120: TCP / IP Offload Engine (TOE) Network Controller
130: PCI/PCI-X 브리지130: PCI / PCI-X Bridge
Claims (7)
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020030096900A KR100576721B1 (en) | 2003-12-24 | 2003-12-24 | Network card having zero-copy transmission function, server and method thereof |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020030096900A KR100576721B1 (en) | 2003-12-24 | 2003-12-24 | Network card having zero-copy transmission function, server and method thereof |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20050065133A true KR20050065133A (en) | 2005-06-29 |
KR100576721B1 KR100576721B1 (en) | 2006-05-03 |
Family
ID=37256660
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020030096900A KR100576721B1 (en) | 2003-12-24 | 2003-12-24 | Network card having zero-copy transmission function, server and method thereof |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR100576721B1 (en) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100723879B1 (en) * | 2005-12-08 | 2007-05-31 | 한국전자통신연구원 | Hardware acceleration apparatus for iscsi target system using toe and method for handling read/write command using the apparatus |
KR100758272B1 (en) | 2006-04-26 | 2007-09-12 | 한국전자통신연구원 | File movement method supporting data zero-copy technique |
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 |
US8244919B2 (en) | 2009-03-05 | 2012-08-14 | Electronics And Telecommunications Research Institute | Data transfer apparatus, system and method using the same |
CN117318892A (en) * | 2023-11-27 | 2023-12-29 | 阿里云计算有限公司 | Computing system, data processing method, network card, host computer and storage medium |
-
2003
- 2003-12-24 KR KR1020030096900A patent/KR100576721B1/en not_active IP Right Cessation
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100723879B1 (en) * | 2005-12-08 | 2007-05-31 | 한국전자통신연구원 | Hardware acceleration apparatus for iscsi target system using toe and method for handling read/write command using the apparatus |
KR100758272B1 (en) | 2006-04-26 | 2007-09-12 | 한국전자통신연구원 | File movement method supporting data zero-copy technique |
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 |
US8244919B2 (en) | 2009-03-05 | 2012-08-14 | Electronics And Telecommunications Research Institute | Data transfer apparatus, system and method using the same |
CN117318892A (en) * | 2023-11-27 | 2023-12-29 | 阿里云计算有限公司 | Computing system, data processing method, network card, host computer and storage medium |
CN117318892B (en) * | 2023-11-27 | 2024-04-02 | 阿里云计算有限公司 | Computing system, data processing method, network card, host computer and storage medium |
Also Published As
Publication number | Publication date |
---|---|
KR100576721B1 (en) | 2006-05-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6421742B1 (en) | Method and apparatus for emulating an input/output unit when transferring data over a network | |
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 | |
KR100758272B1 (en) | File movement method supporting data zero-copy technique | |
EP1896965B1 (en) | Dma descriptor queue read and cache write pointer arrangement | |
KR100239814B1 (en) | Method and system for supporting peripheral component interconnect (pci) peer-to-peer access across multiple pci host/bridges inside data processing system | |
US8913616B2 (en) | System-on-chip-based network protocol in consideration of network efficiency | |
US6233641B1 (en) | Apparatus and method of PCI routing in a bridge configuration | |
EP0889623B1 (en) | System and method for efficient remote disk I/O | |
US7502877B2 (en) | Dynamically setting routing information to transfer input output data directly into processor caches in a multi processor system | |
US6675253B1 (en) | Dynamic routing of data across multiple data paths from a source controller to a destination controller | |
US8788726B2 (en) | Data transmission system, storage medium and data transmission program | |
CN112612734B (en) | File transmission method, device, computer equipment and storage medium | |
US20050114559A1 (en) | Method for efficiently processing DMA transactions | |
US6170030B1 (en) | Method and apparatus for restreaming data that has been queued in a bus bridging device | |
JPH11507749A (en) | Split buffer architecture | |
US20050144402A1 (en) | Method, system, and program for managing virtual memory | |
US8539112B2 (en) | TCP/IP offload device | |
US8250260B2 (en) | Method, arrangement, data processing program and computer program product for 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 (en) | Network card having zero-copy transmission function, server and method thereof | |
US6425071B1 (en) | Subsystem bridge of AMBA's ASB bus to peripheral component interconnect (PCI) bus | |
WO2005036313A2 (en) | Queue register configuration structure | |
KR100449806B1 (en) | A network-storage apparatus for high-speed streaming data transmission through network |
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 |