#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,
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;
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,
};
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];
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);
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);
}
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 */
* 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;
}
/* 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);
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) {
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();