Skip to content

Latest commit

 

History

History
58 lines (53 loc) · 4.5 KB

week12_0807.md

File metadata and controls

58 lines (53 loc) · 4.5 KB
  • 페이지 캐시 탐색 방법의 발전 과정에 대해 논하시오.

    • 전역 해시
      • 2.6 커널 이전에 사용된 기법이다.
      • 해시값에 해당하는 연결 리스트를 반환한다.
      • 문제점
        • 하나의 전역 락을 사용했는데, 이 때문에 락 경쟁이 심했다.
        • 페이지 캐시에 있는 모든 페이지가 들어있었으므로 해시의 크기가 불필요하게 컸다.
        • 반환 받은 연결 리스트를 탐색해야 하므로 탐색 실패 시 성능이 낮았다.
        • 해시 테이블 특성상 메모리를 많이 소모했다.
    • 기수 트리
      • 이진 트리의 일종이다.
      • 전역해시의 문제점을 해소하기 위해 등장하였다.
      • offset값을 이용하여 빠르게 페이지 캐시를 탐색할 수 있다.
  • 페이지 캐시버퍼 캐시의 차이점에 대해 논하시오.

    • 리눅스는 파일 I/O의 성능 향상을 위해 페이지 캐시라는 메모리 영역을 만들어 사용한다.
    • 페이지 캐시는 디스크 입출력 동작을 줄이기 위해 페이지를 캐싱하는 것이다.
    • 페이지는 여러 블록으로 이루어져 있다.
    • 따라서 페이지 캐시가 캐싱하는 것은 실질적으로 디스크 블록이다.
    • 이렇게 디스크 블록 자체를 캐시하면서 디스크 입출력 동작을 줄여주는 캐시가 버퍼 캐시다.
    • 결론적으로, 버퍼 캐시페이지 캐시의 일부분이다.
    • 2.4 커널 이전에는 페이지 캐시버퍼 캐시가 별도로 존재했다.
      • 문제점
        • 중복 캐싱
          • 페이지 캐시는 페이지를 캐시했고, 버퍼 캐시는 버퍼를 캐시했다.
          • 2.4 커널 이후 페이지 캐시버퍼 캐시가 통합되면서 중복 캐싱 문제가 해결되었다.
            • 디스크 블록은 양쪽 모두에 존재할 수 있다.
  • bdflush -> pdflush -> flusher thread 의 발전 과정에 대해 서술하시오.

    • 셋 모두 페이지 캐시의 데이터가 저장소 보다 최신인 오염(dirty) 상태의 캐시를 저장소에 지연 기록 하는 커널 스레드다.

    • bdflush

      • 2.6 커널 이전에는 bdflushkupdated 이 두 가지 커널 스레드가 현재의 flusher thread의 역할을 대신했다.
      • bdflush는 가용 메모리가 부족할 때 가동되어 오염 페이지를 저장소에 기록하는 작업을 수행한다.
      • 현재의 flusher thread와의 차이점
        • bdflush 데몬은 항상 하나만 존재 한다.
          • bdflush는 하나의 스레드이므로 요청이 몰리는 특정 저장소의 큐에 묶여 다른 장치 큐의 요청을 처리하지 못하는 상황이 발생할 수 있다.
        • 버퍼를 기반으로 동작한다.
    • pdflush

      • 2.6 커널에서 bdflushkupdatedpdflush로 대체됐다.
      • 입출력 부하에 따라 스레드의 수가 2개에서 8개까지 동적으로 바뀐다.
      • 시스템의 모든 디스크에 대해 동작한다.
        • 특정 디스크에 종속된 스레드가 아니다보니 경쟁 상태가 심각한 큐에 스레드가 몰릴 수 있다.
          • 이와 같은 상황을 피하기 위해 pdflush에는 경쟁 회피 기법 이 들어있다.
    • flusher thread

      • 2.6.32 커널에서 pdflushflusher_thread로 대체됐다.
      • 병렬적으로 동작하며 커널 스레드 갱단이라고 불린다.
      • 각 스레드는 블록 장치에 연결되어 있으며 해당 블록 장치의 오염 리스트에서 데이터를 받아 디스크에 기록하여 동기적으로 처리한다.
      • pdflush와 달리, 디스크 별로 스레드를 둔다.
        • 따라서 pdflush처럼 별도의 경쟁 회피 기법 을 추가할 필요가 없다.
  • 경쟁 회피 기법이 무엇인지 설명하고, 왜 사용되는지 논하시오.

    • 경쟁 회피 기법
      • 정의
        • 여러 스레드가 경쟁 상태에 있는 같은 큐의 작업에 몰리는 현상을 방지하기 위해 경쟁 상태가 아닌 큐의 페이지를 기록하도록 시도하는 기법
      • 사용되는 이유
        • 회피 기법을 적용하지 않으면 스레드가 경쟁 상태에 빠진 큐에 묶여있을 가능성이 적지 않고, 이렇게 되면 시스템 성능이 나빠진다.