memory: trigger proactive oom killer based on heart memory 74/130474/1
authorByungSoo Kim <bs1770.kim@samsung.com>
Wed, 26 Apr 2017 13:10:30 +0000 (22:10 +0900)
committerKunhoon Baik <knhoon.baik@samsung.com>
Mon, 22 May 2017 10:45:19 +0000 (19:45 +0900)
We haven't yet enabled history based proactive LMK
because heart memory makes an overhead.
But, previous patches as well as this reduced an overhead and simplied.
Now, we can check average memory usage and trigger proactive LMK
when application is launched.

Conflicts:
src/memory/vmpressure-lowmem-handler.c

Change-Id: Id83ca0b3517d6ae73ee1a8713096cfae8516a254
Signed-off-by: ByungSoo Kim <bs1770.kim@samsung.com>
src/heart/heart-memory.c
src/memory/vmpressure-lowmem-handler.c

index fe443526a7bcab677f7d73bac5b1d9bc6696030a..f789b62078ec7dde10495aff3c20434af2dad42c 100644 (file)
@@ -538,6 +538,9 @@ struct heart_memory_data *heart_memory_get_data(char *appid, enum heart_data_per
        struct heart_memory_table *table;
        struct heart_memory_data *md;
 
+       if (!heart_memory_app_list)
+               return NULL;
+
        if (!appid) {
                _E("Wrong message arguments!");
                return NULL;
@@ -564,11 +567,6 @@ struct heart_memory_data *heart_memory_get_data(char *appid, enum heart_data_per
                return NULL;
        }
 
-       if (!heart_memory_app_list) {
-               _E("hashtable heart_memory_app_list is NULL");
-               return NULL;
-       }
-
        /* read from hash and make reply hash */
        /* loop in file read and make reply */
        ret = pthread_mutex_lock(&heart_memory_mutex);
index 9f5cf9a3d2814ecc759e2f96b6b90618145f691f..36fcb8f8925c6b6d1e62d76a0c6d33055c987d5d 100644 (file)
@@ -1874,30 +1874,16 @@ static void lowmem_proactive_oom_killer(int flags, char *appid)
 
        /* Get HEART-memory data only if this module is enabled */
        if (find_module("MEMORY") != NULL)
-               md = heart_memory_get_data(appid, DATA_6HOUR);
+               md = heart_memory_get_data(appid, DATA_LATEST);
 
        if (md) {
-               unsigned int rss;
+               unsigned int rss, after, size;
 
                rss = KBYTE_TO_MBYTE(md->avg_rss);
 
                free(md);
 
-               /*
-                * if launching app is predicted to consume all memory,
-                * free memory up to leave threshold after launching the app.
-                */
-               if (before <= rss) {
-                       _D("run history based proactive killer, (before), required level = %u MB",
-                                               memcg_root->threshold_leave + rss);
-                       lowmem_trigger_force_reclaim(memcg_root->threshold_leave + rss);
-                       return;
-               }
-
-               unsigned int after = before - rss;
-               _D("available after launch = %u MB, available = %u MB, rss = %u MB",
-                       after, before, rss);
-
+               after = before - rss;
                /*
                 * after launching app, ensure that available memory is
                 * above threshold_leave
@@ -1905,9 +1891,14 @@ static void lowmem_proactive_oom_killer(int flags, char *appid)
                if (after >= memcg_root->threshold[LOWMEM_MEDIUM])
                        return;
 
-               _D("run history based proactive killer (after), required level = %u MB",
-                       memcg_root->threshold_leave + THRESHOLD_MARGIN);
-               lowmem_trigger_force_reclaim(memcg_root->threshold_leave + THRESHOLD_MARGIN);
+               if (proactive_threshold - rss >= memcg_root->threshold[LOWMEM_MEDIUM])
+                       size = proactive_threshold;
+               else
+                       size = rss + memcg_root->threshold[LOWMEM_MEDIUM] + THRESHOLD_MARGIN;
+
+               _D("history based proactive LMK : avg rss %u, available %u required = %u MB",
+                       rss, before, size);
+               lowmem_trigger_force_reclaim(size);
 
                return;
        }