1. Page Cache란 ($ cat /proc/meminfo의 Cached)

2. Dirty Page란 ($ cat /proc/meminfo의 Dirty)

  • 읽은 파일이 디스크에 업데이트 되지 않고 page cache 내 특정 공간에만 업데이트 되어 있는 경우가 있는데 이때 그 특정 공간을 dirty page라고 함
  • dirty page의 내용들은 page cache의 효율화를 위해 정해진 설정을 통해 주기적으로 디스크에 적재되고 dirty 공간을 비우게 되는데 이를 flushing이라고 함

    dflush (kernel version 2.6.31까지), flush (커널 버전 2.6.32 이상)

  • 설정(dirty_ratio)보다 많은 dirty page를 지속적으로 사용하게 되면 linux에서는 flushing을 정상적으로 수행하지 못하는 것으로 판단하고 write를 중지. 거기에 상태 D 프로세스 증가시키며 높은 load average까지 발생시킴
    ※ 이때 커널 로그(/var/log/kern.log)에서는 아래와 같은 로그가 발생
    INFO: task {process}:{port} blocked for more than 120 seconds. "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
    - hung_task.c 이 코드에 의하면 위는 state D 상태에 머물러 있는 작업을 감지하는 커널스래드이며 위 로그는 해당 작업이 D 상태로 머물러 있다는 의미
    - 아래처럼 튜닝을 해주면 해결되는 경우가 있음 (참고 사이트)

    $ sudo sysctl -w vm.dirty_ratio=10
    $ sudo sysctl -w vm.dirty_background_ratio=5
    $ sudo sysctl -p

참고 사이트
linux-tutorial.info : http://www.linux-tutorial.info/modules.php?name=MContent&pageid=310
unixadminschool.com : http://unixadminschool.com/blog/2013/10/rhel-6-controlling-cache-memory-page-cache-size/
kernel.org(1) : https://www.kernel.org/doc/gorman/html/understand/understand009.html
kernel.org(2) : https://www.kernel.org/doc/Documentation/sysctl/vm.txt
www.blackmoreops.com : https://www.blackmoreops.com/2014/09/22/linux-kernel-panic-issue-fix-hung_task_timeout_secs-blocked-120-seconds-problem/
Linux Tuning The VM (memory) Subsystem : https://www.cyberciti.biz/faq/linux-kernel-tuning-virtual-memory-subsystem/