Monday, March 24, 2008

Scatter gather I/O

Scatter Gather I/O는 vector를 사용하는 read/write이다. 일반적으로 사용되는 메모리 공간들은 하나의 연속적인 큰 공간이기 보다는 작지만 리스트 처럼 서로 연결되어 있는 공간인 경우가 많다. 이러한 공간에 read, write 작업을 수행할 때 각 단편화된(fragmented) 메모리에 대한 정보를 벡터를 통해 넘겨주어 한번의 read, write 작업으로 끝낼 수 있다. 넘겨주는 벡터의 모양은 아래와 같다.

#include <sys/uio.h>

struct iovec {
void *iov_base;
size_t iov_len;
};

이러한 벡터 iovec의 배열을 넘겨주어 Scatter Gather I/O를 수행하는데, 이때의 readv(), writev() 함수는 아래와 같은 식으로 호출한다.

#include <sys/uio.h>

ssize_t readv(int fd,
const struct iovec *iov,
int count);

ssize_t writev(int fd,
const struct iovec *iov,
int count);

실제 Scatter Gather I/O는 PCI 콘트롤러의 Scatter Gather DMA Mode를 통해 이루어진다(CPU의 도움없이 PCI 콘트롤러 상에서 벡터의 주소를 따라가며 read, write 작업을 수행해준다.) 때문에 프로세서의 자원 절약 및 성능 개선의 여러 효과가 있다.

No comments:

Post a Comment