struct kobject kobj;
        enum damos_action action;
        struct damon_sysfs_access_pattern *access_pattern;
+       unsigned long apply_interval_us;
        struct damon_sysfs_quotas *quotas;
        struct damon_sysfs_watermarks *watermarks;
        struct damon_sysfs_scheme_filters *filters;
 };
 
 static struct damon_sysfs_scheme *damon_sysfs_scheme_alloc(
-               enum damos_action action)
+               enum damos_action action, unsigned long apply_interval_us)
 {
        struct damon_sysfs_scheme *scheme = kmalloc(sizeof(*scheme),
                                GFP_KERNEL);
                return NULL;
        scheme->kobj = (struct kobject){};
        scheme->action = action;
+       scheme->apply_interval_us = apply_interval_us;
        return scheme;
 }
 
        return -EINVAL;
 }
 
+static ssize_t apply_interval_us_show(struct kobject *kobj,
+               struct kobj_attribute *attr, char *buf)
+{
+       struct damon_sysfs_scheme *scheme = container_of(kobj,
+                       struct damon_sysfs_scheme, kobj);
+
+       return sysfs_emit(buf, "%lu\n", scheme->apply_interval_us);
+}
+
+static ssize_t apply_interval_us_store(struct kobject *kobj,
+               struct kobj_attribute *attr, const char *buf, size_t count)
+{
+       struct damon_sysfs_scheme *scheme = container_of(kobj,
+                       struct damon_sysfs_scheme, kobj);
+       int err = kstrtoul(buf, 0, &scheme->apply_interval_us);
+
+       return err ? err : count;
+}
+
 static void damon_sysfs_scheme_release(struct kobject *kobj)
 {
        kfree(container_of(kobj, struct damon_sysfs_scheme, kobj));
 static struct kobj_attribute damon_sysfs_scheme_action_attr =
                __ATTR_RW_MODE(action, 0600);
 
+static struct kobj_attribute damon_sysfs_scheme_apply_interval_us_attr =
+               __ATTR_RW_MODE(apply_interval_us, 0600);
+
 static struct attribute *damon_sysfs_scheme_attrs[] = {
        &damon_sysfs_scheme_action_attr.attr,
+       &damon_sysfs_scheme_apply_interval_us_attr.attr,
        NULL,
 };
 ATTRIBUTE_GROUPS(damon_sysfs_scheme);
        schemes->schemes_arr = schemes_arr;
 
        for (i = 0; i < nr_schemes; i++) {
-               scheme = damon_sysfs_scheme_alloc(DAMOS_STAT);
+               /*
+                * apply_interval_us as 0 means same to aggregation interval
+                * (same to before-apply_interval behavior)
+                */
+               scheme = damon_sysfs_scheme_alloc(DAMOS_STAT, 0);
                if (!scheme) {
                        damon_sysfs_schemes_rm_dirs(schemes);
                        return -ENOMEM;
                .low = sysfs_wmarks->low,
        };
 
-       scheme = damon_new_scheme(&pattern, sysfs_scheme->action, 0, "a,
-                       &wmarks);
+       scheme = damon_new_scheme(&pattern, sysfs_scheme->action,
+                       sysfs_scheme->apply_interval_us, "a, &wmarks);
        if (!scheme)
                return NULL;
 
        scheme->pattern.max_age_region = access_pattern->age->max;
 
        scheme->action = sysfs_scheme->action;
+       scheme->apply_interval_us = sysfs_scheme->apply_interval_us;
 
        scheme->quota.ms = sysfs_quotas->ms;
        scheme->quota.sz = sysfs_quotas->sz;