From: Keir Fraser <keir@xen.org>
To: tupeng212 <tupeng212@gmail.com>
Cc: Jan Beulich <JBeulich@suse.com>, xen-devel <xen-devel@lists.xen.org>
Subject: Re: alloc_heap_pages is low efficient with more CPUs
Date: Mon, 15 Oct 2012 16:45:57 +0100 [thread overview]
Message-ID: <CCA1EE47.4FB8B%keir@xen.org> (raw)
In-Reply-To: <201210152127478127583@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 401 bytes --]
On 15/10/2012 14:27, "tupeng212" <tupeng212@gmail.com> wrote:
> Please try the attached patch.
> : Great! you have done a good job, needless time decreases badly to 1s.
>
> If anybody has no proposal, I suggest you to commit this patch.
I have applied it to xen-unstable. It probably makes sense to put it in 4.1
and 4.2 as well (cc'ed Jan, and attaching the backport for 4.1 again).
-- Keir
[-- Attachment #2: 00-reduce-tlbflush_filter --]
[-- Type: application/octet-stream, Size: 2242 bytes --]
diff -r a15596a619ed xen/common/page_alloc.c
--- a/xen/common/page_alloc.c Thu Oct 04 10:44:43 2012 +0200
+++ b/xen/common/page_alloc.c Sat Oct 13 09:57:26 2012 +0100
@@ -303,9 +303,10 @@ static struct page_info *alloc_heap_page
unsigned int first_node, i, j, zone = 0, nodemask_retry = 0;
unsigned int node = (uint8_t)((memflags >> _MEMF_node) - 1);
unsigned long request = 1UL << order;
- cpumask_t extra_cpus_mask, mask;
struct page_info *pg;
nodemask_t nodemask = (d != NULL ) ? d->node_affinity : node_online_map;
+ bool_t need_tlbflush = 0;
+ uint32_t tlbflush_timestamp = 0;
if ( node == NUMA_NO_NODE )
{
@@ -417,20 +418,19 @@ static struct page_info *alloc_heap_page
if ( d != NULL )
d->last_alloc_node = node;
- cpus_clear(mask);
-
for ( i = 0; i < (1 << order); i++ )
{
/* Reference count must continuously be zero for free pages. */
BUG_ON(pg[i].count_info != PGC_state_free);
pg[i].count_info = PGC_state_inuse;
- if ( pg[i].u.free.need_tlbflush )
+ if ( pg[i].u.free.need_tlbflush &&
+ (pg[i].tlbflush_timestamp <= tlbflush_current_time()) &&
+ (!need_tlbflush ||
+ (pg[i].tlbflush_timestamp > tlbflush_timestamp)) )
{
- /* Add in extra CPUs that need flushing because of this page. */
- cpus_andnot(extra_cpus_mask, cpu_online_map, mask);
- tlbflush_filter(extra_cpus_mask, pg[i].tlbflush_timestamp);
- cpus_or(mask, mask, extra_cpus_mask);
+ need_tlbflush = 1;
+ tlbflush_timestamp = pg[i].tlbflush_timestamp;
}
/* Initialise fields which have other uses for free pages. */
@@ -440,10 +440,15 @@ static struct page_info *alloc_heap_page
spin_unlock(&heap_lock);
- if ( unlikely(!cpus_empty(mask)) )
+ if ( need_tlbflush )
{
- perfc_incr(need_flush_tlb_flush);
- flush_tlb_mask(&mask);
+ cpumask_t mask = cpu_online_map;
+ tlbflush_filter(mask, tlbflush_timestamp);
+ if ( !cpus_empty(mask) )
+ {
+ perfc_incr(need_flush_tlb_flush);
+ flush_tlb_mask(&mask);
+ }
}
return pg;
[-- Attachment #3: Type: text/plain, Size: 126 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel
next prev parent reply other threads:[~2012-10-15 15:45 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CC9EC91B.41A16%keir.xen@gmail.com>
2012-10-13 6:46 ` alloc_heap_pages is low efficient with more CPUs tupeng212
2012-10-13 8:59 ` Keir Fraser
2012-10-15 13:27 ` tupeng212
2012-10-15 15:45 ` Keir Fraser [this message]
2012-10-16 7:51 ` Jan Beulich
2012-10-16 8:03 ` Keir Fraser
2012-10-16 8:28 ` Jan Beulich
2012-10-16 8:53 ` Keir Fraser
2012-10-11 15:18 tupeng212
2012-10-11 15:41 ` Keir Fraser
2012-10-12 12:24 ` tupeng212
2012-10-12 22:39 ` Mukesh Rathor
2012-10-13 6:03 ` Keir Fraser
2012-10-13 7:20 ` tupeng212
2012-10-13 8:59 ` Keir Fraser
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=CCA1EE47.4FB8B%keir@xen.org \
--to=keir@xen.org \
--cc=JBeulich@suse.com \
--cc=tupeng212@gmail.com \
--cc=xen-devel@lists.xen.org \
/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).