-
전역 해시
- 2.6 커널 이전에 사용된 기법이다.
- 해시값에 해당하는 연결 리스트를 반환한다.
- 문제점
- 하나의 전역 락을 사용했는데, 이 때문에 락 경쟁이 심했다.
- 페이지 캐시에 있는 모든 페이지가 들어있었으므로 해시의 크기가 불필요하게 컸다.
- 반환 받은 연결 리스트를 탐색해야 하므로 탐색 실패 시 성능이 낮았다.
- 해시 테이블 특성상 메모리를 많이 소모했다.
기수 트리
- 이진 트리의 일종이다.
- 전역해시의 문제점을 해소하기 위해 등장하였다.
offset
값을 이용하여 빠르게페이지 캐시
를 탐색할 수 있다.
-
리눅스
는 파일 I/O의 성능 향상을 위해 페이지 캐시라는 메모리 영역을 만들어 사용한다.페이지 캐시
는 디스크 입출력 동작을 줄이기 위해페이지
를 캐싱하는 것이다.페이지
는 여러 블록으로 이루어져 있다.- 따라서
페이지 캐시
가 캐싱하는 것은 실질적으로디스크 블록
이다. - 이렇게
디스크 블록
자체를 캐시하면서 디스크 입출력 동작을 줄여주는 캐시가버퍼 캐시
다. - 결론적으로,
버퍼 캐시
는페이지 캐시
의 일부분이다. - 2.4 커널 이전에는
페이지 캐시
와버퍼 캐시
가 별도로 존재했다.- 문제점
- 중복 캐싱
페이지 캐시
는 페이지를 캐시했고,버퍼 캐시
는 버퍼를 캐시했다.- 2.4 커널 이후
페이지 캐시
에버퍼 캐시
가 통합되면서 중복 캐싱 문제가 해결되었다.디스크 블록
은 양쪽 모두에 존재할 수 있다.
- 중복 캐싱
- 문제점
-
-
셋 모두
페이지 캐시
의 데이터가 저장소 보다 최신인오염(dirty)
상태의 캐시를 저장소에 지연 기록 하는커널 스레드
다. -
bdflush
- 2.6 커널 이전에는
bdflush
와kupdated
이 두 가지 커널 스레드가 현재의flusher thread
의 역할을 대신했다. bdflush
는 가용 메모리가 부족할 때 가동되어 오염 페이지를 저장소에 기록하는 작업을 수행한다.- 현재의
flusher thread
와의 차이점bdflush
데몬은 항상 하나만 존재 한다.bdflush
는 하나의 스레드이므로 요청이 몰리는 특정 저장소의 큐에 묶여 다른 장치 큐의 요청을 처리하지 못하는 상황이 발생할 수 있다.
버퍼
를 기반으로 동작한다.
- 2.6 커널 이전에는
-
pdflush
- 2.6 커널에서
bdflush
와kupdated
는pdflush
로 대체됐다. - 입출력 부하에 따라 스레드의 수가 2개에서 8개까지 동적으로 바뀐다.
- 시스템의 모든 디스크에 대해 동작한다.
- 특정 디스크에 종속된 스레드가 아니다보니 경쟁 상태가 심각한 큐에 스레드가 몰릴 수 있다.
- 이와 같은 상황을 피하기 위해
pdflush
에는 경쟁 회피 기법 이 들어있다.
- 이와 같은 상황을 피하기 위해
- 특정 디스크에 종속된 스레드가 아니다보니 경쟁 상태가 심각한 큐에 스레드가 몰릴 수 있다.
- 2.6 커널에서
-
flusher thread
- 2.6.32 커널에서
pdflush
는flusher_thread
로 대체됐다. - 병렬적으로 동작하며
커널 스레드
갱단이라고 불린다. - 각 스레드는
블록 장치
에 연결되어 있으며 해당블록 장치
의 오염 리스트에서 데이터를 받아 디스크에 기록하여 동기적으로 처리한다. pdflush
와 달리, 디스크 별로 스레드를 둔다.- 따라서
pdflush
처럼 별도의 경쟁 회피 기법 을 추가할 필요가 없다.
- 따라서
- 2.6.32 커널에서
-
-
- 경쟁 회피 기법
- 정의
- 여러 스레드가 경쟁 상태에 있는 같은 큐의 작업에 몰리는 현상을 방지하기 위해 경쟁 상태가 아닌 큐의 페이지를 기록하도록 시도하는 기법
- 사용되는 이유
- 회피 기법을 적용하지 않으면 스레드가 경쟁 상태에 빠진 큐에 묶여있을 가능성이 적지 않고, 이렇게 되면 시스템 성능이 나빠진다.
- 정의
- 경쟁 회피 기법