The commit is pushed to "branch-rh7-3.10.0-123.1.2-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git after rh7-3.10.0-123.1.2.vz7.4.9 ------> commit e6d640dd11fe7f1fc172f81d4a2e61d1d198eaf0 Author: Dmitry Monakhov <dmonak...@openvz.org> Date: Tue May 5 13:44:40 2015 +0400
vziolimit: port diff-ubc-iolimit-precharge-dirty-pages-opensource https://jira.sw.ru/browse/PSBM-20104 Signed-off-by: Dmitry Monakhov <dmonak...@openvz.org> --- kernel/ve/vziolimit.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/kernel/ve/vziolimit.c b/kernel/ve/vziolimit.c index 7ff2854..19dd7ad 100644 --- a/kernel/ve/vziolimit.c +++ b/kernel/ve/vziolimit.c @@ -120,6 +120,35 @@ static unsigned long iolimit_timeout(struct iolimit *iolimit) throttle_timeout(&iolimit->iops, now)); } +static void iolimit_balance_dirty(struct iolimit *iolimit, + struct user_beancounter *ub, + unsigned long write_chunk) +{ + struct throttle *th = &iolimit->throttle; + unsigned long flags, dirty, state; + + if (!th->speed) + return; + + /* can be non-atomic on i386, but ok. this just hint. */ + state = th->state >> PAGE_SHIFT; + dirty = ub_stat_get(ub, dirty_pages) + write_chunk; + /* protect agains ub-stat percpu drift */ + if (dirty + UB_STAT_BATCH * num_possible_cpus() < state) + return; + /* get exact value of for smooth throttling */ + dirty = ub_stat_get_exact(ub, dirty_pages) + write_chunk; + if (dirty < state) + return; + + spin_lock_irqsave(&ub->ub_lock, flags); + /* precharge dirty pages */ + throttle_charge(th, (long long)dirty << PAGE_SHIFT); + /* set dirty_exceeded for smooth throttling */ + ub->dirty_exceeded = 1; + spin_unlock_irqrestore(&ub->ub_lock, flags); +} + static int iolimit_virtinfo(struct vnotifier_block *nb, unsigned long cmd, void *arg, int old_ret) { @@ -170,6 +199,9 @@ static int iolimit_virtinfo(struct vnotifier_block *nb, if (timeout) return NOTIFY_FAIL; break; + case VIRTINFO_IO_BALANCE_DIRTY: + iolimit_balance_dirty(iolimit, ub, (unsigned long)arg); + break; } return NOTIFY_OK; _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel