Tuesday, March 18, 2008

read ahread and write back

1. read ahead

간단하다. sequential locality 때문에 한번에 읽을 때 근처의 다른 데이터도 같이 읽어 메모리에 올려 놓는다. 리눅스에서는 read ahead의 양이 동적으로 변화 한다. 12kb~128kb 로 변화하는데 이를 read ahead window로 구현해 놓았다.

2. write back

write back이 발생하는 시점은 두가지 이다.
  1. 메모리가 부족하거나
  2. dirty page의 age가 너무 오래되었을때

이다. 모든 경우에 pdflush 라는 thread가 생겨나서 작업을 진행한다. (bdflush 시절에는 한번에 한 block device 만 진행할 수 있었음)

Write back에서 사용하는 버퍼는 커널의 buffer_head 구조체를 통해 구현되어 있다. 근데 이 버퍼가 사실은 dirty 정보 뿐만 아니라 실제 data에 대한 pointer도 가지고 있다.

그래서 2.4 커널 이후에서는 page cache와 buffer cache가 통합되었다.

No comments:

Post a Comment