728x90

4. File advice (일반적인 파일입출력을 위한 advice)

posix_fadvise (커널 2.5.60부터 등장)

#include <fcntl.h>

int posix_fadvise(int fd, off_t offsert, off_t len, int advice);

advice 옵션 (POSIX_FADV_NOREUSE가 추가되며 나머지는 madvice와 같다; 커널이 하는 동작을 application에서 한다는 차이가 있다.)
 

POSIX_FADV_NOREUSE application이 당분간은 정해진 범위에 있는 자료에 단 한번만 접근하려고 한다.

advice 옵션 (2.6 커널에서의 동작)

POSIX_FADV_NORMAL 커널이 적절히 미리읽기를 수행(평상시와 동일)

POSIX_FADV_RANDOM 커널이 미리읽기를 비활성화, 매번 물리적 연산이 일어날 때마다 최소 자료만 읽음

POSIX_FADV_SEQUENTIAL 커널이 공격적인 미리읽기 수행, 미리읽기 범위 크기를 두배로 늘림

POSIX_FADV_WILLNEED 커널이 미리읽기 작업을 시작해서 페이지를 메모리로 읽음

POSIX_FADV_NOREUSE 현재는 POSIX_FADV_WILLNEED와 동일(향후 한번만 사용한다는 방식을 이용하여 추가적인 최적화를 추가할 가능성 있음)

POSIX_FADV_DONTNEED 커널이 페이지 캐시에서 해당 영역에 있는 자료를 비움(madvise()의 DONTNEED와 다르게 동작)
 

readahead(리눅스용 인터페이스)

posix_fadvise()의 POSIX_FADV_WILLNEED와 동일한 동작: kernel 2.6 이전에는 posix_fadvise()대신 readahead() 사용함.
 

#include <fcntl.h>

ssize_t readahead(int fd, off64_t offset, size_t count);
 

해당 영역에 페이지 캐시가 자리 잡도록 만든다.
 

* 파일의 일부를 읽기에 앞서 POSIX_FADV_WILLNEED로 페이지 캐시에 파일을 읽어 들이도록 지시하면 입출력은 비동기식 background로 수행된다. application이 최종적으로 파일에 점근할 때, 입출력 차단 없이 연산이 완료될 수 있다.
 

*연속적으로 비디오를 디스크에 스트리밍하는 경우(많은 자료를 읽고 쓴 다음), POSIX_FADV_DONTNEED로 페이지 캐시에서 파일 조각을 비우라고 지시. application이 다시 접근할 의도가 없다면 페이지 캐시를 다른 용도로 사용할 수 있게 비워서 효율을 높임.
 

*파일 전체를 읽을 때는 POSIX_FADV_SEQUENTIAL을 제공

728x90

'Programming > linux왕초보' 카테고리의 다른 글

find 명령어(linux)  (4) 2012.04.03
ALSA SoC Layer  (0) 2012.04.03
ubuntu 바탕화면에 휴지통 꺼내놓기  (0) 2012.03.30
ALSA  (0) 2012.03.26
5. Asynchronous I/O  (0) 2012.02.24
3. Memory mapped I/O  (0) 2012.02.17
2. epoll(), select(), poll()  (0) 2012.02.08
make[1]: warning: Clock skew detected. Your build may be incomplete.  (0) 2012.02.03
1. Scatter/gather I/O(vectored I/O)  (0) 2012.01.29
리눅스 파일 입출력 (Linux File I/O)  (0) 2012.01.29

+ Recent posts