Add unit(in variable) & fix bugs
[platform/core/system/resourced.git] / src / resource-optimizer / memory / dedup / dedup.c
index c61b2e2..68a34a2 100644 (file)
 #include "const.h"
 #include "file-helper.h"
 
-#define DEDUP_PRIORITY                 20
-#define DEDUP_ON_BOOT_TIME                     60
-#define DEDUP_FULL_SCAN_INTERVAL       60
-#define DEDUP_INIT_SCAN_INTERVAL       300
-#define DEDUP_STAT_INTERVAL                    60
+#define DEDUP_PRIORITY              20
+#define DEDUP_ON_BOOT_TIME          60
+#define DEDUP_FULL_SCAN_INTERVAL    60
+#define DEDUP_INIT_SCAN_INTERVAL    300
+#define DEDUP_STAT_INTERVAL         60
 
 enum dedup_thread_op {
        DEDUP_OP_ACTIVATE,
@@ -78,10 +78,10 @@ static bool dedup_at_boot_enable = false;
 static enum dedup_mode dedup_mode = DEDUP_MODE_PERIODIC;
 static bool dedup_on_lowmem = false;
 
-static int dedup_at_boot_delay = 60000;
-static int dedup_full_scan_interval = 600000;
-static int dedup_stat_interval = 60000;
-static int dedup_partial_scan_interval = 60000;
+static int dedup_at_boot_delay_sec = 60;
+static int dedup_full_scan_interval_sec = 600;
+static int dedup_stat_interval_sec = 60;
+static int dedup_partial_scan_interval_sec = 10;
 
 static GSource *dedup_activating_timer = NULL;
 static GSource *dedup_scanning_timer = NULL;
@@ -106,7 +106,7 @@ enum dedup_param {
 enum ksm_param {
        KSM_PARAM_PAGES_TO_SCAN = 0,
        KSM_PARAM_SLEEP_MSECS,
-       KSM_PARAM_FULL_SCAN_INTERVAL,
+       KSM_PARAM_FULL_SCAN_INTERVAL_MSECS,
        KSM_PARAM_SCAN_BOOST,
        KSM_PARAM_MAX,
 };
@@ -114,7 +114,7 @@ enum ksm_param {
 static int ksm_param_ranges[KSM_PARAM_MAX][2] = {
        {0, 10000}, /* KSM_PARAM_PAGES_TO_SCAN */
        {0, 1000}, /* KSM_PARAM_SLEEP_MSECS */
-       {0, INT_MAX}, /* KSM_PARAM_FULL_SCAN_INTERVAL */
+       {0, INT_MAX}, /* KSM_PARAM_FULL_SCAN_INTERVAL_MSECS */
        {100, 10000}, /* KSM_PARAM_SCAN_BOOST */
 };
 static unsigned int ksm_params[KSM_PARAM_MAX];
@@ -228,9 +228,9 @@ static gboolean dedup_stat_timer_cb(gpointer data)
 
 static void dedup_reset_scanning_timer(void)
 {
-       _D("reset scan-timer %d seconds", dedup_full_scan_interval);
+       _D("reset scan-timer %d seconds", dedup_full_scan_interval_sec);
        dedup_scanning_timer =
-               g_timeout_source_new_seconds(dedup_full_scan_interval);
+               g_timeout_source_new_seconds(dedup_full_scan_interval_sec);
        g_source_set_callback(dedup_scanning_timer,
                        dedup_scanning_timer_cb, NULL, NULL);
        g_source_attach(dedup_scanning_timer, NULL);
@@ -238,9 +238,9 @@ static void dedup_reset_scanning_timer(void)
 
 static void dedup_reset_stat_timer(void)
 {
-       _D("reset stat-timer %d seconds", dedup_stat_interval);
+       _D("reset stat-timer %d seconds", dedup_stat_interval_sec);
        dedup_stat_timer =
-               g_timeout_source_new_seconds(dedup_stat_interval);
+               g_timeout_source_new_seconds(dedup_stat_interval_sec);
        g_source_set_callback(dedup_stat_timer,
                        dedup_stat_timer_cb, NULL, NULL);
        g_source_attach(dedup_stat_timer, NULL);
@@ -302,29 +302,28 @@ static void dedup_activate_in_module(void)
        }
 
        if (!dedup_on_lowmem) {
-               dedup_scanning_timer = g_timeout_source_new_seconds(dedup_full_scan_interval);
+               dedup_scanning_timer = g_timeout_source_new_seconds(dedup_full_scan_interval_sec);
                g_source_set_callback(dedup_scanning_timer, dedup_scanning_timer_cb, NULL, NULL);
                g_source_attach(dedup_scanning_timer, NULL);
        }
 
-       dedup_stat_timer = g_timeout_source_new_seconds(dedup_stat_interval);
+       dedup_stat_timer = g_timeout_source_new_seconds(dedup_stat_interval_sec);
        g_source_set_callback(dedup_stat_timer, dedup_stat_timer_cb, NULL, NULL);
        g_source_attach(dedup_stat_timer, NULL);
 
        dedup_activated = true;
 }
 
-/* translations for ms -> ns and s -> ns */
-#define DEDUP_ACT_STOMS                1000
-#define DEDUP_ACT_MSTONS       1000000
+#define DEDUP_ACT_MSTOS  1000
+#define DEDUP_ACT_NSTOMS 1000000
 
 static bool dedup_check_scan_interval
-(struct timespec *now, struct timespec *old, unsigned long interval)
+(struct timespec *now, struct timespec *old, unsigned long interval_ms)
 {
-       unsigned long diff;
-       diff = (now->tv_sec - old->tv_sec) * DEDUP_ACT_STOMS;
-       diff += (now->tv_nsec - old->tv_nsec) / DEDUP_ACT_MSTONS;
-       return (diff >= interval);
+       unsigned long diff_ms;
+       diff_ms = (now->tv_sec - old->tv_sec) * DEDUP_ACT_MSTOS;
+       diff_ms += (now->tv_nsec - old->tv_nsec) / DEDUP_ACT_NSTOMS;
+       return (diff_ms >= (interval_ms * DEDUP_ACT_MSTOS));
 }
 
 /* used in dedup_do_scan */
@@ -341,15 +340,15 @@ static int dedup_do_scan(enum ksm_scan_mode scan_mode)
                 * substituted by partial scan
                 */
                if (dedup_check_scan_interval(&now, &full_begin,
-                               dedup_full_scan_interval))
+                               dedup_full_scan_interval_sec))
                        mode = KSM_SCAN_FULL;
                else if (dedup_on_lowmem &&
                                dedup_check_scan_interval(&now, &partial_begin,
-                               dedup_partial_scan_interval))
+                               dedup_partial_scan_interval_sec))
                        mode = KSM_SCAN_PARTIAL;
        } else if (scan_mode == KSM_SCAN_PARTIAL) {
                if (dedup_check_scan_interval(&now, &partial_begin,
-                               dedup_partial_scan_interval))
+                               dedup_partial_scan_interval_sec))
                        mode = KSM_SCAN_PARTIAL;
        }
 
@@ -431,9 +430,9 @@ static int dedup_booting_done(void *data)
                /* if dedup_at_boot_enable is disabled,
                 * other daemon should activate dedup */
                _D("[DEDUP] dedup booting done is called");
-               if (dedup_at_boot_delay > 0)
+               if (dedup_at_boot_delay_sec > 0)
                        dedup_activating_timer =
-                               g_timeout_source_new_seconds(dedup_at_boot_delay);
+                               g_timeout_source_new_seconds(dedup_at_boot_delay_sec);
                else
                        dedup_activating_timer =
                                g_timeout_source_new_seconds(DEDUP_ON_BOOT_TIME);
@@ -448,9 +447,9 @@ static int dedup_booting_done(void *data)
 static int dedup_parse_config_file(void)
 {
        int arg_ksm_pages_to_scan = 100;
-       int arg_ksm_sleep = 20; // 20 msecs
-       int arg_ksm_full_scan_interval = 60000; // 60 seconds
-       int arg_ksm_scan_boost = 100;
+       int arg_ksm_sleep_ms = 20;      // 20 msecs
+       int arg_ksm_full_scan_interval_ms = 60000;      // 60 seconds
+       int arg_ksm_scan_boost = 1000;
 
        struct dedup_conf *dedup_conf = get_dedup_conf();
        if (!dedup_conf) {
@@ -479,20 +478,20 @@ static int dedup_parse_config_file(void)
        else
                ksm_params[KSM_PARAM_SCAN_BOOST] = arg_ksm_scan_boost;
 
-       ksm_params[KSM_PARAM_SLEEP_MSECS] = arg_ksm_sleep;
-       ksm_params[KSM_PARAM_FULL_SCAN_INTERVAL] = arg_ksm_full_scan_interval;
+       ksm_params[KSM_PARAM_SLEEP_MSECS] = arg_ksm_sleep_ms;
+       ksm_params[KSM_PARAM_FULL_SCAN_INTERVAL_MSECS] = arg_ksm_full_scan_interval_ms;
 
        _I("[DEDUP] deduplication mode: %s", dedup_mode == DEDUP_MODE_PERIODIC ?
                        "kernel-managed" : "resourced-triggered");
        _I("[DEDUP] deduplication on boot: %s", dedup_at_boot_enable ? "true" : "false");
        _I("[DEDUP] scanning is invoked by %s", dedup_on_lowmem ?
                        "LOWMEM event" : "periodic timer");
-       _I("[DEDUP] full scan interval: %d sec", dedup_full_scan_interval);
-       _I("[DEDUP] stat monitoring interval: %d sec", dedup_stat_interval);
+       _I("[DEDUP] full scan interval: %d sec", dedup_full_scan_interval_sec);
+       _I("[DEDUP] stat monitoring interval: %d sec", dedup_stat_interval_sec);
 
        _I("[DEDUP] ksm pages to scan: %d", ksm_params[KSM_PARAM_PAGES_TO_SCAN]);
-       _I("[DEDUP] ksm sleep time: %d", ksm_params[KSM_PARAM_SLEEP_MSECS]);
-       _I("[DEDUP] ksm full scan interval: %d", ksm_params[KSM_PARAM_FULL_SCAN_INTERVAL]);
+       _I("[DEDUP] ksm sleep time: %d ms", ksm_params[KSM_PARAM_SLEEP_MSECS]);
+       _I("[DEDUP] ksm full scan interval: %d ms", ksm_params[KSM_PARAM_FULL_SCAN_INTERVAL_MSECS]);
        _I("[DEDUP] ksm scan boost: %d", ksm_params[KSM_PARAM_SCAN_BOOST]);
 
        free_dedup_conf();