Block Device3 블럭 디바이스(Block device) I/O - 3 * 출처: http://superkkt.com/374 저번 글에 이어서 이번에는 한번에 읽고 쓰는 블럭의 크기에 따라 성능이 어떻게 차이가 나는지를 살펴보겠다. 실험용 코드는 저번 글에서 사용한것을 조금 수정해서 O_SYNC, O_DIRECT, mmap 모드에서 각각 5MB의 데이터를 정해진 블럭크기 단위로 디스크에 쓰기 연산을 하는 코드이다. #define _GNU_SOURCE #include #include #include #include #include #include #include #include #define SECTOR_SIZE 512 #define BUF_SIZE (SECTOR_SIZE * 32) #define DATA_SIZE (1048576UL * 5) int main(int argc,.. 【Fundamental Tech】/Linux Kernel 2012. 2. 4. 블럭 디바이스(Block device) I/O - 2 * 출처: http://superkkt.com/373 저번 글에 이어서 이번엔 블럭디바이스에 I/O를 할 때 한번에 읽고 쓰는 크기에 대해서 다룬다. 실험용 코드는 저번 글에 사용한걸 그대로 사용하고 아래와 같이 약간 수정을 해준다. 맨 앞에 있는건 소스코드 라인 번호이다. 12 #define BUF_SIZE SECTOR_SIZE ... ... 41 if (pwrite(fd, buf, BUF_SIZE - 1, 0) == -1) { ... 45 if (pread(fd, buf, BUF_SIZE - 1, 0) == -1) { ... 79 memcpy(addr, buf, BUF_SIZE - 1); 80 memcpy(buf, addr, BUF_SIZE - 1); 저번 글에서는 버퍼크기를 4096바이트로 했으나 .. 【Fundamental Tech】/Linux Kernel 2012. 2. 4. 블럭 디바이스(Block device) I/O - 1 * 출처: http://superkkt.com/372 하드디스크와 같은 블럭 디바이스(Block device)에 I/O를 하는 방법은 크게 다음과 같이 나눌 수 있다. 1. 일반적인 방법의 I/O 2. O_SYNC를 사용한 동기 I/O 3. O_DIRECT를 사용한 직접 I/O 이 방법들 사이의 차이점은 동기/비동기 방식과 OS 버퍼(캐쉬)의 사용유무이다. Default: 비동기 / OS 버퍼 사용 O_SYNC: 동기 / OS 버퍼 사용 O_DIRECT: 동기 / OS 버퍼 사용 안 함 일반적인 I/O를 비동기라고 표현하는게 다소 무리가 있어 보이지만, 동기 방식과 비교하기 위해 그렇게 표현을 했다. 여기서 동기 방식이란 I/O가 발생하는 즉시 디스크에 반영되는 것을 뜻한다. 반대로 비동기 방식은 I/O.. 【Fundamental Tech】/Linux Kernel 2012. 2. 4. 이전 1 다음