태그 보관물: kernel

drop_caches needs to be used more carefully

유 닉스 사용하시다가 리눅스로 넘어오신 경우 리눅스의 어마무지한 Cache 사랑에 놀라시는 분들이 많더군요. 그리고 무시무시한 “백업” 솔루션들이 새벽에 한번 돌라치면 엄청난 I/O 발생과 더불어 Cache 사용량의 폭증… 그리고 Swap out으로 이어지는 성능 저하로 소위 ‘절대악’이 되버린 Cache를 날려버릴 방법을 찾기 시작하십니다. 결국 /proc/sys/vm/drop_caches ‘한방’으로 평안을 찾게 되구요.

일반적으로 drop_caches를 쓸 일은 별로 없지만 백업 솔루션이나 Batch job과 같이 I/O가 많은 경우, 작업 전과 후에 한두번씩 해주는게 시스템 운영에 도움이 됩니다. 다만 RHEL/CentOS 4 또는 5.3 이전 버전을 사용하신다면 커널 패닉이나 행이 걸릴 수 있으니 특히 자제하셔야 합니다. 그 외 버전이라도 꼭 필요한 경우가 아니라면 차라리 vm.vfs_cache_pressure, vm.swappiness를 가지고 간접적으로 Cache를 통제하는 것이 장수하는 길이 아닐까 생각됩니다.

Advertisements

Tickless Kernel

Tickless Kernel

RHEL/CentOS 6부터 Tickless 커널이 사용되고 있습니다. CPU가 idle인 상태라도 Timer tick을 처리하기 위해 주기적으로(1초에 1000번, 1000HZ) CPU가 실행되어야 해서 Power Management 차원에서는 비효율적이죠. 그래서 도입된 것이 Dynamic Tick 기능으로 idle 상태에서는 Timer tick까지 멈추도록 하여 CPU가 Deep sleep state로 내려가 전력사용량을 줄이는 기능입니다.

Upstream kernel 2.6.21 버전부터 패치로 포함된 이 기능은 High resolution timer의 도입과 함께 이루어졌습니다. 물론 여기에 단점도 있습니다. Sleep 상태의 CPU를 깨우는데 Latency가 크기 때문에 Low-latency 환경에는 적합하지 않습니다.

http://lwn.net/Articles/223185/

그러던 것이 kernel 3.10 버전부터는 full NOHZ라는 기능이 추가되었는데요, idle 상태가 아닌 상태에서도 필요에 따라 tickless가 될 수 있는 기능이 추가되었습니다. 즉 CPU에서 실행중인 프로세스가 오직 1개일때는 timer를 1HZ로 줄여서 timer tick 처리를 위한 overhead를 줄일 수 있도록 개선된 것인데요, 같은 tickless 기능이라도 full NOHZ의 경우 Power Management 측면 보다는 Performance 측면에서 이점에 초점이 맞춰졌습니다.

http://lwn.net/Articles/549580/

RHEL7에는 kernel 3.10 버전이 base 버전으로 포함되어 있어 full NOHZ 기능도 지원하게 되었습니다.