/*-------------------------------------------------*/
/* low memory action function for cgroup */
-static void memory_cgroup_medium_act(enum cgroup_type type, struct memcg_info *mi);
+static void memory_cgroup_proactive_lmk_act(enum cgroup_type type, struct memcg_info *mi);
/* low memory action function */
-static void normal_act(void);
-static void swap_act(void);
-static void low_act(void);
-static void medium_act(void);
+static void high_mem_act(void);
+static void swap_activate_act(void);
+static void swap_compact_act(void);
+static void lmk_act(void);
-static size_t cur_mem_state = LOWMEM_NORMAL;
+static size_t cur_mem_state = MEM_STATE_HIGH;
static int num_max_victims = MAX_MEMORY_CGROUP_VICTIMS;
static int num_vict_between_check = MAX_VICTIMS_BETWEEN_CHECK;
static bool bg_reclaim;
static int fragmentation_size;
-enum memory_level {
- MEMORY_LEVEL_NORMAL,
- MEMORY_LEVEL_LOW,
- MEMORY_LEVEL_CRITICAL,
-};
-
static const char *convert_cgroup_type_to_str(int type)
{
static const char *type_table[] =
{
static const char *state_table[] = {"mem normal", "mem dedup", "mem swap", "mem low",
"mem medium"};
- if (mem_state >= 0 && mem_state < LOWMEM_MAX_LEVEL)
+ if (mem_state >= 0 && mem_state < MEM_STATE_MAX)
return state_table[mem_state];
return "";
}
if (calculate_range_of_oom(cgroup_type, &start_oom, &end_oom))
goto done;
- lmk_start_threshold = get_root_memcg_info()->threshold[LOWMEM_MEDIUM];
+ lmk_start_threshold = get_root_memcg_info()->threshold[MEM_STATE_OOM];
shortfall = is_memory_recovered(&available, ctl->size);
if (!shortfall || !reclaim_size) {
static void change_lowmem_state(unsigned int mem_state)
{
cur_mem_state = mem_state;
- lmk_start_threshold = get_root_memcg_info()->threshold[LOWMEM_MEDIUM];
+ lmk_start_threshold = get_root_memcg_info()->threshold[MEM_STATE_OOM];
resourced_notify(RESOURCED_NOTIFIER_MEM_STATE_CHANGED,
(void *)&cur_mem_state);
{
unsigned int available;
- if (cur_mem_state == LOWMEM_NORMAL)
+ if (cur_mem_state == MEM_STATE_HIGH)
return;
if (swap_get_state() != SWAP_ON)
return;
available = proc_get_mem_available();
- if (cur_mem_state != LOWMEM_SWAP &&
- available <= get_root_memcg_info()->threshold[LOWMEM_SWAP])
- swap_act();
+ if (cur_mem_state != MEM_STATE_LOW &&
+ available <= get_root_memcg_info()->threshold[MEM_STATE_LOW])
+ swap_activate_act();
resourced_notify(RESOURCED_NOTIFIER_SWAP_START, path);
memcg_swap_status = true;
}
/* Correponding process is already managed per app or service.
- * In addition, if this process is already located in the CGROUP_LOW, then just do swap
+ * In addition, if some process is already located in the CGROUP_LOW, then just do swap
*/
resourced_notify(RESOURCED_NOTIFIER_SWAP_START, path);
}
const char *str;
switch (lv) {
- case MEMORY_LEVEL_NORMAL:
- str = EVT_VAL_MEMORY_NORMAL;
- break;
- case MEMORY_LEVEL_LOW:
- str = EVT_VAL_MEMORY_SOFT_WARNING;
- break;
- case MEMORY_LEVEL_CRITICAL:
- str = EVT_VAL_MEMORY_HARD_WARNING;
- break;
- default:
- _E("Invalid state");
- return;
+ case MEM_STATE_HIGH:
+ case MEM_STATE_MEDIUM:
+ case MEM_STATE_LOW:
+ str = EVT_VAL_MEMORY_NORMAL;
+ break;
+ case MEM_STATE_CRITICAL:
+ str = EVT_VAL_MEMORY_SOFT_WARNING;
+ break;
+ case MEM_STATE_OOM:
+ str = EVT_VAL_MEMORY_HARD_WARNING;
+ break;
+ default:
+ _E("Invalid state");
+ return;
}
b = bundle_create();
bundle_free(b);
}
-static void normal_act(void)
+static void high_mem_act(void)
{
int ret, status;
if (status != VCONFKEY_SYSMAN_LOW_MEMORY_NORMAL) {
vconf_set_int(VCONFKEY_SYSMAN_LOW_MEMORY,
VCONFKEY_SYSMAN_LOW_MEMORY_NORMAL);
- memory_level_send_system_event(MEMORY_LEVEL_NORMAL);
+ memory_level_send_system_event(MEM_STATE_HIGH);
}
- change_lowmem_state(LOWMEM_NORMAL);
+ change_lowmem_state(MEM_STATE_HIGH);
if (swap_get_state() == SWAP_ON && memcg_swap_status) {
resourced_notify(RESOURCED_NOTIFIER_SWAP_UNSET_LIMIT, get_memcg_info(CGROUP_LOW));
(void *)CGROUP_FREEZER_ENABLED);
}
-static void swap_act(void)
+static void swap_activate_act(void)
{
int ret, status;
if (status != VCONFKEY_SYSMAN_LOW_MEMORY_NORMAL) {
vconf_set_int(VCONFKEY_SYSMAN_LOW_MEMORY,
VCONFKEY_SYSMAN_LOW_MEMORY_NORMAL);
- memory_level_send_system_event(MEMORY_LEVEL_NORMAL);
+ memory_level_send_system_event(MEM_STATE_LOW);
}
- change_lowmem_state(LOWMEM_SWAP);
+ change_lowmem_state(MEM_STATE_LOW);
if (proc_get_freezer_status() == CGROUP_FREEZER_PAUSED)
resourced_notify(RESOURCED_NOTIFIER_FREEZER_CGROUP_STATE,
(void *)CGROUP_FREEZER_ENABLED);
if (status != VCONFKEY_SYSMAN_LOW_MEMORY_NORMAL) {
vconf_set_int(VCONFKEY_SYSMAN_LOW_MEMORY,
VCONFKEY_SYSMAN_LOW_MEMORY_NORMAL);
- memory_level_send_system_event(MEMORY_LEVEL_NORMAL);
+ memory_level_send_system_event(MEM_STATE_MEDIUM);
}
- change_lowmem_state(LOWMEM_DEDUP);
+ change_lowmem_state(MEM_STATE_MEDIUM);
data = KSM_SCAN_PARTIAL;
resourced_notify(RESOURCED_NOTIFIER_DEDUP_SCAN, &data);
}
}
-static void low_act(void)
+static void swap_compact_act(void)
{
- change_lowmem_state(LOWMEM_LOW);
- resourced_notify(RESOURCED_NOTIFIER_SWAP_COMPACT, (void *)SWAP_COMPACT_LOWMEM_LOW);
- memory_level_send_system_event(MEMORY_LEVEL_LOW);
+ change_lowmem_state(MEM_STATE_CRITICAL);
+ resourced_notify(RESOURCED_NOTIFIER_SWAP_COMPACT, (void *)SWAP_COMPACT_MEM_STATE_CRITICAL);
+ memory_level_send_system_event(MEM_STATE_CRITICAL);
}
static void medium_cb(struct lowmem_control *ctl)
{
if (ctl->status == LOWMEM_RECLAIM_DONE)
oom_popup = false;
- lowmem_change_memory_state(LOWMEM_NORMAL, 0);
+ lowmem_change_memory_state(MEM_STATE_HIGH, 0);
}
-static void medium_act(void)
+static void lmk_act(void)
{
unsigned int available;
int ret;
if (ret)
_D("vconf_get_int fail %s", VCONFKEY_SYSMAN_LOW_MEMORY);
- memory_level_send_system_event(MEMORY_LEVEL_CRITICAL);
+ memory_level_send_system_event(MEM_STATE_OOM);
if (status != VCONFKEY_SYSMAN_LOW_MEMORY_HARD_WARNING) {
if (proc_get_freezer_status() == CGROUP_FREEZER_ENABLED)
resourced_notify(RESOURCED_NOTIFIER_FREEZER_CGROUP_STATE,
}
available = proc_get_mem_available();
- change_lowmem_state(LOWMEM_MEDIUM);
+ change_lowmem_state(MEM_STATE_OOM);
if (available < get_root_memcg_info()->threshold_leave) {
struct lowmem_control *ctl;
}
}
- resourced_notify(RESOURCED_NOTIFIER_SWAP_COMPACT, (void *)SWAP_COMPACT_LOWMEM_MEDIUM);
+ resourced_notify(RESOURCED_NOTIFIER_SWAP_COMPACT, (void *)SWAP_COMPACT_MEM_STATE_OOM);
/*
* Flush resourced memory such as other processes.
* But it should except this condition if mem_state is already medium.
* Otherwise, recalim worker couldn't run any more.
*/
- if (mem_state != LOWMEM_MEDIUM && cur_mem_state == mem_state)
+ if (mem_state != MEM_STATE_OOM && cur_mem_state == mem_state)
return;
switch (mem_state) {
- case LOWMEM_NORMAL:
- normal_act();
+ case MEM_STATE_HIGH:
+ high_mem_act();
break;
- case LOWMEM_DEDUP:
+ case MEM_STATE_MEDIUM:
dedup_act(KSM_SCAN_PARTIAL);
break;
- case LOWMEM_SWAP:
- swap_act();
+ case MEM_STATE_LOW:
+ swap_activate_act();
break;
- case LOWMEM_LOW:
+ case MEM_STATE_CRITICAL:
dedup_act(KSM_SCAN_FULL);
- low_act();
+ swap_compact_act();
break;
- case LOWMEM_MEDIUM:
- medium_act();
+ case MEM_STATE_OOM:
+ lmk_act();
break;
default:
assert(0);
g_array_free(pids_array, true);
}
-static void memory_cgroup_medium_act(enum cgroup_type type, struct memcg_info *mi)
+static void memory_cgroup_proactive_lmk_act(enum cgroup_type type, struct memcg_info *mi)
{
struct lowmem_control *ctl;
static unsigned int check_mem_state(unsigned int available)
{
int mem_state;
- for (mem_state = LOWMEM_MAX_LEVEL - 1; mem_state > LOWMEM_NORMAL; mem_state--) {
- if (mem_state != LOWMEM_MEDIUM && available <= get_root_memcg_info()->threshold[mem_state])
+ for (mem_state = MEM_STATE_MAX - 1; mem_state > MEM_STATE_HIGH; mem_state--) {
+ if (mem_state != MEM_STATE_OOM && available <= get_root_memcg_info()->threshold[mem_state])
break;
- else if (mem_state == LOWMEM_MEDIUM && available <= lmk_start_threshold)
+ else if (mem_state == MEM_STATE_OOM && available <= lmk_start_threshold)
break;
}
if (!strncmp(result->name, "ThresholdDedup", strlen("ThresholdDedup")+1)) {
int value = atoi(result->value);
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_DEDUP, value);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_MEDIUM, value);
} else if (!strncmp(result->name, "ThresholdSwap", strlen("ThresholdSwap")+1)) {
int value = atoi(result->value);
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_SWAP, value);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_LOW, value);
} else if (!strncmp(result->name, "ThresholdLow", strlen("ThresholdLow")+1)) {
int value = atoi(result->value);
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_LOW, value);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_CRITICAL, value);
} else if (!strncmp(result->name, "ThresholdMedium", strlen("ThresholdMedium")+1)) {
int value = atoi(result->value);
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_MEDIUM, value);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_OOM, value);
} else if (!strncmp(result->name, "ThresholdLeave", strlen("ThresholdLeave")+1)) {
int value = atoi(result->value);
memcg_set_leave_threshold(CGROUP_ROOT, value);
} else if (!strncmp(result->name, "ThresholdRatioDedup", strlen("ThresholdRatioDedup")+1)) {
double ratio = atoi(result->value);
int value = (double)totalram * ratio / 100.0;
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_DEDUP, BYTE_TO_MBYTE(value));
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_MEDIUM, BYTE_TO_MBYTE(value));
} else if (!strncmp(result->name, "ThresholdRatioSwap", strlen("ThresholdRatioSwap")+1)) {
double ratio = atoi(result->value);
int value = (double)totalram * ratio / 100.0;
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_SWAP, BYTE_TO_MBYTE(value));
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_LOW, BYTE_TO_MBYTE(value));
} else if (!strncmp(result->name, "ThresholdRatioLow", strlen("ThresholdRatioLow")+1)) {
double ratio = atoi(result->value);
int value = (double)totalram * ratio / 100.0;
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_LOW, BYTE_TO_MBYTE(value));
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_CRITICAL, BYTE_TO_MBYTE(value));
} else if (!strncmp(result->name, "ThresholdRatioMedium", strlen("ThresholdRatioMedium")+1)) {
double ratio = atoi(result->value);
int value = (double)totalram * ratio / 100.0;
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_MEDIUM, BYTE_TO_MBYTE(value));
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_OOM, BYTE_TO_MBYTE(value));
} else if (!strncmp(result->name, "ThresholdRatioLeave", strlen("ThresholdRatioLeave")+1)) {
double ratio = atoi(result->value);
int value = (double)totalram * ratio / 100.0;
/* set thresholds for ram size 64M */
proactive_threshold = PROACTIVE_64_THRES;
proactive_leave = PROACTIVE_64_LEAVE;
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_DEDUP, CGROUP_ROOT_64_THRES_DEDUP);
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_SWAP, CGROUP_ROOT_64_THRES_SWAP);
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_LOW, CGROUP_ROOT_64_THRES_LOW);
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_MEDIUM, CGROUP_ROOT_64_THRES_MEDIUM);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_MEDIUM, CGROUP_ROOT_64_THRES_DEDUP);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_LOW, CGROUP_ROOT_64_THRES_SWAP);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_CRITICAL, CGROUP_ROOT_64_THRES_LOW);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_OOM, CGROUP_ROOT_64_THRES_MEDIUM);
memcg_set_leave_threshold(CGROUP_ROOT, CGROUP_ROOT_64_THRES_LEAVE);
num_max_victims = CGROUP_ROOT_64_NUM_VICTIMS;
} else if (total_ramsize <= MEM_SIZE_256) {
/* set thresholds for ram size 256M */
proactive_threshold = PROACTIVE_256_THRES;
proactive_leave = PROACTIVE_256_LEAVE;
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_DEDUP, CGROUP_ROOT_256_THRES_DEDUP);
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_SWAP, CGROUP_ROOT_256_THRES_SWAP);
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_LOW, CGROUP_ROOT_256_THRES_LOW);
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_MEDIUM, CGROUP_ROOT_256_THRES_MEDIUM);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_MEDIUM, CGROUP_ROOT_256_THRES_DEDUP);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_LOW, CGROUP_ROOT_256_THRES_SWAP);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_CRITICAL, CGROUP_ROOT_256_THRES_LOW);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_OOM, CGROUP_ROOT_256_THRES_MEDIUM);
memcg_set_leave_threshold(CGROUP_ROOT, CGROUP_ROOT_256_THRES_LEAVE);
num_max_victims = CGROUP_ROOT_256_NUM_VICTIMS;
} else if (total_ramsize <= MEM_SIZE_448) {
/* set thresholds for ram size 448M */
proactive_threshold = PROACTIVE_448_THRES;
proactive_leave = PROACTIVE_448_LEAVE;
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_DEDUP, CGROUP_ROOT_448_THRES_DEDUP);
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_SWAP, CGROUP_ROOT_448_THRES_SWAP);
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_LOW, CGROUP_ROOT_448_THRES_LOW);
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_MEDIUM, CGROUP_ROOT_448_THRES_MEDIUM);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_MEDIUM, CGROUP_ROOT_448_THRES_DEDUP);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_LOW, CGROUP_ROOT_448_THRES_SWAP);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_CRITICAL, CGROUP_ROOT_448_THRES_LOW);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_OOM, CGROUP_ROOT_448_THRES_MEDIUM);
memcg_set_leave_threshold(CGROUP_ROOT, CGROUP_ROOT_448_THRES_LEAVE);
num_max_victims = CGROUP_ROOT_448_NUM_VICTIMS;
} else if (total_ramsize <= MEM_SIZE_512) {
/* set thresholds for ram size 512M */
proactive_threshold = PROACTIVE_512_THRES;
proactive_leave = PROACTIVE_512_LEAVE;
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_DEDUP, CGROUP_ROOT_512_THRES_DEDUP);
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_SWAP, CGROUP_ROOT_512_THRES_SWAP);
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_LOW, CGROUP_ROOT_512_THRES_LOW);
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_MEDIUM, CGROUP_ROOT_512_THRES_MEDIUM);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_MEDIUM, CGROUP_ROOT_512_THRES_DEDUP);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_LOW, CGROUP_ROOT_512_THRES_SWAP);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_CRITICAL, CGROUP_ROOT_512_THRES_LOW);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_OOM, CGROUP_ROOT_512_THRES_MEDIUM);
memcg_set_leave_threshold(CGROUP_ROOT, CGROUP_ROOT_512_THRES_LEAVE);
num_max_victims = CGROUP_ROOT_512_NUM_VICTIMS;
} else if (total_ramsize <= MEM_SIZE_768) {
/* set thresholds for ram size 512M */
proactive_threshold = PROACTIVE_768_THRES;
proactive_leave = PROACTIVE_768_LEAVE;
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_DEDUP, CGROUP_ROOT_768_THRES_DEDUP);
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_SWAP, CGROUP_ROOT_768_THRES_SWAP);
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_LOW, CGROUP_ROOT_768_THRES_LOW);
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_MEDIUM, CGROUP_ROOT_768_THRES_MEDIUM);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_MEDIUM, CGROUP_ROOT_768_THRES_DEDUP);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_LOW, CGROUP_ROOT_768_THRES_SWAP);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_CRITICAL, CGROUP_ROOT_768_THRES_LOW);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_OOM, CGROUP_ROOT_768_THRES_MEDIUM);
memcg_set_leave_threshold(CGROUP_ROOT, CGROUP_ROOT_768_THRES_LEAVE);
num_max_victims = CGROUP_ROOT_768_NUM_VICTIMS;
} else if (total_ramsize <= MEM_SIZE_1024) {
/* set thresholds for ram size more than 1G */
proactive_threshold = PROACTIVE_1024_THRES;
proactive_leave = PROACTIVE_1024_LEAVE;
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_DEDUP, CGROUP_ROOT_1024_THRES_DEDUP);
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_SWAP, CGROUP_ROOT_1024_THRES_SWAP);
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_LOW, CGROUP_ROOT_1024_THRES_LOW);
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_MEDIUM, CGROUP_ROOT_1024_THRES_MEDIUM);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_MEDIUM, CGROUP_ROOT_1024_THRES_DEDUP);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_LOW, CGROUP_ROOT_1024_THRES_SWAP);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_CRITICAL, CGROUP_ROOT_1024_THRES_LOW);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_OOM, CGROUP_ROOT_1024_THRES_MEDIUM);
memcg_set_leave_threshold(CGROUP_ROOT, CGROUP_ROOT_1024_THRES_LEAVE);
num_max_victims = CGROUP_ROOT_1024_NUM_VICTIMS;
} else if (total_ramsize <= MEM_SIZE_2048) {
proactive_threshold = PROACTIVE_2048_THRES;
proactive_leave = PROACTIVE_2048_LEAVE;
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_DEDUP, CGROUP_ROOT_2048_THRES_DEDUP);
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_SWAP, CGROUP_ROOT_2048_THRES_SWAP);
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_LOW, CGROUP_ROOT_2048_THRES_LOW);
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_MEDIUM, CGROUP_ROOT_2048_THRES_MEDIUM);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_MEDIUM, CGROUP_ROOT_2048_THRES_DEDUP);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_LOW, CGROUP_ROOT_2048_THRES_SWAP);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_CRITICAL, CGROUP_ROOT_2048_THRES_LOW);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_OOM, CGROUP_ROOT_2048_THRES_MEDIUM);
memcg_set_leave_threshold(CGROUP_ROOT, CGROUP_ROOT_2048_THRES_LEAVE);
num_max_victims = CGROUP_ROOT_2048_NUM_VICTIMS;
} else {
proactive_threshold = PROACTIVE_3072_THRES;
proactive_leave = PROACTIVE_3072_LEAVE;
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_DEDUP, CGROUP_ROOT_3072_THRES_DEDUP);
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_SWAP, CGROUP_ROOT_3072_THRES_SWAP);
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_LOW, CGROUP_ROOT_3072_THRES_LOW);
- memcg_set_threshold(CGROUP_ROOT, LOWMEM_MEDIUM, CGROUP_ROOT_3072_THRES_MEDIUM);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_MEDIUM, CGROUP_ROOT_3072_THRES_DEDUP);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_LOW, CGROUP_ROOT_3072_THRES_SWAP);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_CRITICAL, CGROUP_ROOT_3072_THRES_LOW);
+ memcg_set_threshold(CGROUP_ROOT, MEM_STATE_OOM, CGROUP_ROOT_3072_THRES_MEDIUM);
memcg_set_leave_threshold(CGROUP_ROOT, CGROUP_ROOT_3072_THRES_LEAVE);
num_max_victims = CGROUP_ROOT_3072_NUM_VICTIMS;
}
return;
}
- threshold = mi->threshold[LOWMEM_MEDIUM];
+ threshold = mi->threshold[MEM_STATE_OOM];
if (usage >= threshold)
- memory_cgroup_medium_act(type, mi);
+ memory_cgroup_proactive_lmk_act(type, mi);
else
_I("anon page %u MB < medium threshold %u MB", BYTE_TO_MBYTE(usage),
BYTE_TO_MBYTE(threshold));
const char *name = mi->name;
static fd_handler_h handler;
- if (mi->threshold[LOWMEM_MEDIUM] == LOWMEM_THRES_INIT)
+ if (mi->threshold[MEM_STATE_OOM] == LOWMEM_THRES_INIT)
return 0;
evfd = memcg_set_eventfd(name, MEMCG_EVENTFD_MEMORY_PRESSURE,
static void lowmem_force_reclaim_cb(struct lowmem_control *ctl)
{
- lowmem_change_memory_state(LOWMEM_NORMAL, 0);
+ lowmem_change_memory_state(MEM_STATE_HIGH, 0);
}
int lowmem_trigger_reclaim(int flags, int victims, enum cgroup_type type, int threshold)
type = type > 0 ? type : CGROUP_LOW;
threshold = threshold > 0 ? threshold : get_root_memcg_info()->threshold_leave;
- lowmem_change_memory_state(LOWMEM_LOW, 1);
+ lowmem_change_memory_state(MEM_STATE_CRITICAL, 1);
LOWMEM_SET_REQUEST(ctl, flags,
type, threshold, victims,
lowmem_force_reclaim_cb);
before = proc_get_mem_available();
/* If memory state is medium or normal, just return and kill in oom killer */
- if (before < get_root_memcg_info()->threshold[LOWMEM_MEDIUM] || before > proactive_leave)
+ if (before < get_root_memcg_info()->threshold[MEM_STATE_OOM] || before > proactive_leave)
return;
victims = num_max_victims > MAX_PROACTIVE_HIGH_VICTIMS
* after launching app, ensure that available memory is
* above threshold_leave
*/
- if (after >= get_root_memcg_info()->threshold[LOWMEM_MEDIUM])
+ if (after >= get_root_memcg_info()->threshold[MEM_STATE_OOM])
return;
- if (proactive_threshold - rss >= get_root_memcg_info()->threshold[LOWMEM_MEDIUM])
+ if (proactive_threshold - rss >= get_root_memcg_info()->threshold[MEM_STATE_OOM])
size = proactive_threshold;
else
- size = rss + get_root_memcg_info()->threshold[LOWMEM_MEDIUM] + THRESHOLD_MARGIN;
+ size = rss + get_root_memcg_info()->threshold[MEM_STATE_OOM] + THRESHOLD_MARGIN;
_D("history based proactive LMK : avg rss %u, available %u required = %u MB",
rss, before, size);
static void print_mem_configs(void)
{
/* print info of Memory section */
- for (int mem_lvl = 0; mem_lvl < LOWMEM_MAX_LEVEL; mem_lvl++)
+ for (int mem_lvl = 0; mem_lvl < MEM_STATE_MAX; mem_lvl++)
_I("set threshold for state '%s' to %u MB",
convert_memstate_to_str(mem_lvl), get_root_memcg_info()->threshold[mem_lvl]);