'memory pressure'에 해당되는 글 '1'건

사용자 삽입 이미지


device 단가를 낮추기 위해 저용량의 DRAM을 사용하면
다양한 memory pressure상황에 직면하게 되는데,
이를 100% 해결하기란 불가능하지만 어느정도 튜닝은 해야지.

1. cache 설정

/proc/sys/vm/vfs_cache_pressure : default 100
:높은 값일수록 cache(inode, dentry..)에 대한 reclaim 성향이 강해지고,
cache를 회수하여 free memory로 회수하게 된다.

/proc/sys/vm/dirty_background_ratio : default 20
:flusher가 시작되는 dirty page 비율 (percentage of system memory)
작을수록 빨리 flusher가 시작되므로 cache를 낮추는 효과

/proc/sys/vm/dirty_ratio (default 40)
:process별 dirty page를 write out하는 비율
dirty_background_ratio와 동일하나 flush 주체가 다름

/proc/sys/vm/dirty_expire_centisecs (default 300 : 3000ms)
:dirty page의 cache 상주 수명
작을수록 flusher 동작시 flush할 page가 많아지겠지..

/proc/sys/vm/dirty_writeback_centisecs (default 500 : 5000ms)
:flusher 동작 interval


2. watermark 설정

/proc/sys/vm/min_free_kbytes (default : system memory에 따라 다름)
:zone별 최소 보장해야하는 memory watermark 설정 기준값
계산을 통해 [min/low/high] 로 설정되며 계산 결과는 /proc/zoneinfo로 참조할 수 있다. (page 단위임)
주기적인 kswapd 동작에서 watermark 값을 참조하여,
low 이하로 떨어지면 각종 reclaim/shrinker를 호출하여 high까지 확보하는 동작을 함.

/proc/sys/vm/extra_free_kbytes
: 별도 tunable이며 kernel 3.4이후에 들어온것 같은데 첫 버전은 모르겠음
watermark에 영향을 주는데 전체 min_free_kbytes가
min/low/high에 골고루 scaling되는데 반해 low,high에만 +되는 값으로
약간 땜빵성으로 보임
:android device에서는 framework의 screen buffer를 위해 전용되고 있는 것으로 보임.

3. swappiness
/proc/sys/vm/swappiness (default : 60)
swap device (zram, disk swap partition)을 사용할 때,
swap out tendency를 설정함
큰 값일수록 swap 성향이 강해지나, swap이 많이 발생한다는 것은 free memory 확보에는 이점이 있지만,
급작스러운 덩치큰 memory 할당 요청에 대해서는 버벅임을 감수해야 함
: CONFIG_MEMCG/CONFIG_MEMCG_SWAP : android의 특수성으로 activity manager에서 control 할수 있는 swapping group에 대한 patch.
android patch는 아니고, 특정 task에 대해 swappiness를 별도로 적용할 수 있는 cgroup 생성 (/sys/fs/cgroup/memory/sw) => 해당 cgroup에 등록된 task에 대해서 system default swappiness와 다른 값을 적용할 수 있고, 이를 android에서는 ActivityManager에서 control하게 된다.
:: Lollipop
ActivityManagerService.java::applyOomAdjLocked() (bg_non_interactive에 대해)
Process.java::setSwappiness()




2015/03/12 16:17 2015/03/12 16:17
Posted by scott