From: Glauber Costa <glommer@redhat.com>
To: kvm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, aliguori@us.ibm.com,
Rik van Riel <riel@redhat.com>,
Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>,
Peter Zijlstra <peterz@infradead.org>,
Avi Kivity <avi@redhat.com>
Subject: [PATCH 16/16] KVM-GST: adjust scheduler cpu power
Date: Mon, 24 Jan 2011 13:06:37 -0500 [thread overview]
Message-ID: <1295892397-11354-17-git-send-email-glommer@redhat.com> (raw)
In-Reply-To: <1295892397-11354-1-git-send-email-glommer@redhat.com>
This is a first proposal for using steal time information
to influence the scheduler. There are a lot of optimizations
and fine grained adjustments to be done, but it is working reasonably
so far for me (mostly)
With this patch (and some host pinnings to demonstrate the situation),
two vcpus with very different steal time (Say 80 % vs 1 %) will not get
an even distribution of processes. This is a situation that can naturally
arise, specially in overcommited scenarios. Previosly, the guest scheduler
would wrongly think that all cpus have the same ability to run processes,
lowering the overall throughput.
Signed-off-by: Glauber Costa <glommer@redhat.com>
CC: Rik van Riel <riel@redhat.com>
CC: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
CC: Peter Zijlstra <peterz@infradead.org>
CC: Avi Kivity <avi@redhat.com>
---
include/linux/sched.h | 1 +
kernel/sched.c | 4 ++++
kernel/sched_fair.c | 10 ++++++++++
3 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/include/linux/sched.h b/include/linux/sched.h
index d747f94..beab72d 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -302,6 +302,7 @@ long io_schedule_timeout(long timeout);
extern void cpu_init (void);
extern void trap_init(void);
extern void update_process_times(int user);
+extern cputime_t (*hypervisor_steal_time)(void);
extern void scheduler_tick(void);
extern void sched_show_task(struct task_struct *p);
diff --git a/kernel/sched.c b/kernel/sched.c
index 3b3e88d..c460f0d 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -501,6 +501,8 @@ struct rq {
struct sched_domain *sd;
unsigned long cpu_power;
+ unsigned long real_ticks;
+ unsigned long total_ticks;
unsigned char idle_at_tick;
/* For active balancing */
@@ -3533,10 +3535,12 @@ static int touch_steal_time(int is_idle)
if (is_idle)
return 0;
+ rq->total_ticks++;
if (steal) {
account_steal_time(steal);
return 1;
}
+ rq->real_ticks++;
return 0;
}
diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c
index c62ebae..1364c28 100644
--- a/kernel/sched_fair.c
+++ b/kernel/sched_fair.c
@@ -2509,6 +2509,16 @@ static void update_cpu_power(struct sched_domain *sd, int cpu)
power >>= SCHED_LOAD_SHIFT;
}
+ WARN_ON(cpu_rq(cpu)->real_ticks > cpu_rq(cpu)->total_ticks);
+
+ if (cpu_rq(cpu)->total_ticks) {
+ power *= cpu_rq(cpu)->real_ticks;
+ power /= cpu_rq(cpu)->total_ticks;
+ }
+
+ cpu_rq(cpu)->total_ticks = 0;
+ cpu_rq(cpu)->real_ticks = 0;
+
sdg->cpu_power_orig = power;
if (sched_feat(ARCH_POWER))
--
1.7.2.3
next prev parent reply other threads:[~2011-01-24 18:08 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-24 18:06 [PATCH 00/16] New Proposal for steal time in KVM Glauber Costa
2011-01-24 18:06 ` [PATCH 01/16] KVM-HDR: register KVM basic header infrastructure Glauber Costa
2011-01-26 11:06 ` Avi Kivity
2011-01-26 12:13 ` Glauber Costa
2011-01-26 15:12 ` Avi Kivity
2011-01-26 15:36 ` Glauber Costa
2011-01-26 17:22 ` Anthony Liguori
2011-01-26 17:49 ` Glauber Costa
2011-01-27 12:31 ` Avi Kivity
2011-01-24 18:06 ` [PATCH 02/16] KVM-HV: KVM - KVM Virtual Memory hypervisor implementation Glauber Costa
2011-01-24 18:06 ` [PATCH 03/16] KVM-HDR: KVM Userspace registering ioctl Glauber Costa
2011-01-26 11:12 ` Avi Kivity
2011-01-26 12:14 ` Glauber Costa
2011-01-26 15:14 ` Avi Kivity
2011-01-26 15:23 ` Glauber Costa
2011-01-24 18:06 ` [PATCH 04/16] KVM-HV: " Glauber Costa
2011-01-24 18:06 ` [PATCH 05/16] KVM-HDR: Implement wallclock over KVM - KVM Virtual Memory Glauber Costa
2011-01-26 11:13 ` Avi Kivity
2011-01-26 12:20 ` Glauber Costa
2011-01-26 15:17 ` Avi Kivity
2011-01-26 15:45 ` Glauber Costa
2011-01-27 12:17 ` Avi Kivity
2011-01-24 18:06 ` [PATCH 06/16] " Glauber Costa
2011-01-24 18:06 ` [PATCH 07/16] KVM-GST: " Glauber Costa
2011-01-24 18:06 ` [PATCH 08/16] KVM-HDR: Implement kvmclock systemtime " Glauber Costa
2011-01-24 18:06 ` [PATCH 09/16] KVM-HV: " Glauber Costa
2011-01-24 18:06 ` [PATCH 10/16] KVM-GST: " Glauber Costa
2011-01-24 18:06 ` [PATCH 11/16] KVM-HDR: KVM Steal time implementation Glauber Costa
2011-01-24 23:06 ` Rik van Riel
2011-01-24 18:06 ` [PATCH 12/16] KVM-HV: " Glauber Costa
2011-01-24 23:15 ` Rik van Riel
2011-01-24 18:06 ` [PATCH 13/16] KVM-HV: KVM Steal time calculation Glauber Costa
2011-01-24 23:20 ` Rik van Riel
2011-01-24 18:06 ` [PATCH 14/16] KVM-GST: KVM Steal time registration Glauber Costa
2011-01-24 23:27 ` Rik van Riel
2011-01-24 23:31 ` Rik van Riel
2011-01-25 1:25 ` Glauber Costa
2011-01-25 1:26 ` Rik van Riel
2011-01-25 1:28 ` Glauber Costa
2011-01-24 18:06 ` [PATCH 15/16] KVM-GST: KVM Steal time accounting Glauber Costa
2011-01-24 23:33 ` Rik van Riel
2011-01-24 18:06 ` Glauber Costa [this message]
2011-01-24 18:32 ` [PATCH 16/16] KVM-GST: adjust scheduler cpu power Peter Zijlstra
2011-01-24 18:51 ` Glauber Costa
2011-01-24 19:51 ` Peter Zijlstra
2011-01-24 19:57 ` Glauber Costa
2011-01-25 20:02 ` Glauber Costa
2011-01-25 20:13 ` Peter Zijlstra
2011-01-25 20:47 ` Glauber Costa
2011-01-25 21:07 ` Peter Zijlstra
2011-01-25 21:27 ` Glauber Costa
2011-01-26 9:57 ` Peter Zijlstra
2011-01-26 15:43 ` Glauber Costa
2011-01-26 16:46 ` Peter Zijlstra
2011-01-26 16:53 ` Peter Zijlstra
2011-01-26 18:11 ` Glauber Costa
2011-01-24 19:53 ` Peter Zijlstra
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1295892397-11354-17-git-send-email-glommer@redhat.com \
--to=glommer@redhat.com \
--cc=aliguori@us.ibm.com \
--cc=avi@redhat.com \
--cc=jeremy.fitzhardinge@citrix.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=peterz@infradead.org \
--cc=riel@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).