실시간 데이터 처리/Kafka

Zero Copy

BUST 2017. 7. 4. 21:01

Zero Copy

일반적인 데이터 전송 방식

File.read(fileDesc, buf, len);
Socket.send(socket, buf, len);
  • 기존의 일반적인 데이터 복사 형식
  • Kernel 에서 Application으로 데이터를 복사하고 Application 쪽에서는 Kernel로 데이터를 복사한다.
  • context-switch 및 복사로 인해 성능이 느려질수가 있다.

Zero Copy 데이터 전송 방식

public void transferTo(long position, long count, WritableByteChannel target);
#include <sys/socket.h>
ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);
  • application으로 복사하지 않고 직접 kernel에서 데이터를 복사하여 사용하는 방법
  • context-switch 및 복사의 과정이 단순하여 성능이 이점이 있다.