From: Huang Ying <ying.huang@linux.intel.com>
To: Mel Gorman <mgorman@suse.de>
Cc: LKML <linux-kernel@vger.kernel.org>, LKP ML <lkp@01.org>
Subject: Re: [LKP] [mm] 3484b2de949: -46.2% aim7.jobs-per-min
Date: Sat, 28 Feb 2015 15:57:24 +0800 [thread overview]
Message-ID: <1425110244.10337.90.camel@linux.intel.com> (raw)
In-Reply-To: <20150227115304.GF3087@suse.de>
On Fri, 2015-02-27 at 11:53 +0000, Mel Gorman wrote:
> On Fri, Feb 27, 2015 at 03:21:36PM +0800, Huang Ying wrote:
> > FYI, we noticed the below changes on
> >
> > git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> > commit 3484b2de9499df23c4604a513b36f96326ae81ad ("mm: rearrange zone fields into read-only, page alloc, statistics and page reclaim lines")
> >
> > The perf cpu-cycles for spinlock (zone->lock) increased a lot. I suspect there are some cache ping-pong or false sharing.
> >
>
> Annoying because this is pretty much the opposite of what I found during
> testing. What is the kernel config? Similar to the kernel config, can you
> post "pahole -C zone vmlinux" for the kernel you built? I should get the same
> result if I use the same kernel config but no harm in being sure. Thanks.
The output of pahole -C zone vmlinux for the kernels are as below.
Best Regards,
Huang, Ying
3484b2de94
-------------------------------------------------------
struct zone {
long unsigned int watermark[3]; /* 0 24 */
long int lowmem_reserve[4]; /* 24 32 */
int node; /* 56 4 */
unsigned int inactive_ratio; /* 60 4 */
/* --- cacheline 1 boundary (64 bytes) --- */
struct pglist_data * zone_pgdat; /* 64 8 */
struct per_cpu_pageset * pageset; /* 72 8 */
long unsigned int dirty_balance_reserve; /* 80 8 */
long unsigned int min_unmapped_pages; /* 88 8 */
long unsigned int min_slab_pages; /* 96 8 */
long unsigned int zone_start_pfn; /* 104 8 */
long unsigned int managed_pages; /* 112 8 */
long unsigned int spanned_pages; /* 120 8 */
/* --- cacheline 2 boundary (128 bytes) --- */
long unsigned int present_pages; /* 128 8 */
const char * name; /* 136 8 */
int nr_migrate_reserve_block; /* 144 4 */
seqlock_t span_seqlock; /* 148 8 */
/* XXX 4 bytes hole, try to pack */
wait_queue_head_t * wait_table; /* 160 8 */
long unsigned int wait_table_hash_nr_entries; /* 168 8 */
long unsigned int wait_table_bits; /* 176 8 */
/* XXX 8 bytes hole, try to pack */
/* --- cacheline 3 boundary (192 bytes) --- */
struct zone_padding _pad1_; /* 192 0 */
spinlock_t lock; /* 192 4 */
/* XXX 4 bytes hole, try to pack */
struct free_area free_area[11]; /* 200 968 */
/* --- cacheline 18 boundary (1152 bytes) was 16 bytes ago --- */
long unsigned int flags; /* 1168 8 */
/* XXX 40 bytes hole, try to pack */
/* --- cacheline 19 boundary (1216 bytes) --- */
struct zone_padding _pad2_; /* 1216 0 */
spinlock_t lru_lock; /* 1216 4 */
/* XXX 4 bytes hole, try to pack */
long unsigned int pages_scanned; /* 1224 8 */
struct lruvec lruvec; /* 1232 120 */
/* --- cacheline 21 boundary (1344 bytes) was 8 bytes ago --- */
atomic_long_t inactive_age; /* 1352 8 */
long unsigned int percpu_drift_mark; /* 1360 8 */
long unsigned int compact_cached_free_pfn; /* 1368 8 */
long unsigned int compact_cached_migrate_pfn[2]; /* 1376 16 */
unsigned int compact_considered; /* 1392 4 */
unsigned int compact_defer_shift; /* 1396 4 */
int compact_order_failed; /* 1400 4 */
bool compact_blockskip_flush; /* 1404 1 */
/* XXX 3 bytes hole, try to pack */
/* --- cacheline 22 boundary (1408 bytes) --- */
struct zone_padding _pad3_; /* 1408 0 */
atomic_long_t vm_stat[38]; /* 1408 304 */
/* --- cacheline 26 boundary (1664 bytes) was 48 bytes ago --- */
/* size: 1728, cachelines: 27, members: 37 */
/* sum members: 1649, holes: 6, sum holes: 63 */
/* padding: 16 */
};
24b7e5819a
---------------------------------------------------------------
struct zone {
long unsigned int watermark[3]; /* 0 24 */
long unsigned int percpu_drift_mark; /* 24 8 */
long unsigned int lowmem_reserve[4]; /* 32 32 */
/* --- cacheline 1 boundary (64 bytes) --- */
long unsigned int dirty_balance_reserve; /* 64 8 */
int node; /* 72 4 */
/* XXX 4 bytes hole, try to pack */
long unsigned int min_unmapped_pages; /* 80 8 */
long unsigned int min_slab_pages; /* 88 8 */
struct per_cpu_pageset * pageset; /* 96 8 */
spinlock_t lock; /* 104 4 */
bool compact_blockskip_flush; /* 108 1 */
/* XXX 3 bytes hole, try to pack */
long unsigned int compact_cached_free_pfn; /* 112 8 */
long unsigned int compact_cached_migrate_pfn[2]; /* 120 16 */
/* --- cacheline 2 boundary (128 bytes) was 8 bytes ago --- */
seqlock_t span_seqlock; /* 136 8 */
struct free_area free_area[11]; /* 144 968 */
/* --- cacheline 17 boundary (1088 bytes) was 24 bytes ago --- */
unsigned int compact_considered; /* 1112 4 */
unsigned int compact_defer_shift; /* 1116 4 */
int compact_order_failed; /* 1120 4 */
/* XXX 28 bytes hole, try to pack */
/* --- cacheline 18 boundary (1152 bytes) --- */
struct zone_padding _pad1_; /* 1152 0 */
spinlock_t lru_lock; /* 1152 4 */
/* XXX 4 bytes hole, try to pack */
struct lruvec lruvec; /* 1160 120 */
/* --- cacheline 20 boundary (1280 bytes) --- */
atomic_long_t inactive_age; /* 1280 8 */
long unsigned int pages_scanned; /* 1288 8 */
long unsigned int flags; /* 1296 8 */
atomic_long_t vm_stat[38]; /* 1304 304 */
/* --- cacheline 25 boundary (1600 bytes) was 8 bytes ago --- */
unsigned int inactive_ratio; /* 1608 4 */
/* XXX 52 bytes hole, try to pack */
/* --- cacheline 26 boundary (1664 bytes) --- */
struct zone_padding _pad2_; /* 1664 0 */
wait_queue_head_t * wait_table; /* 1664 8 */
long unsigned int wait_table_hash_nr_entries; /* 1672 8 */
long unsigned int wait_table_bits; /* 1680 8 */
struct pglist_data * zone_pgdat; /* 1688 8 */
long unsigned int zone_start_pfn; /* 1696 8 */
long unsigned int spanned_pages; /* 1704 8 */
long unsigned int present_pages; /* 1712 8 */
long unsigned int managed_pages; /* 1720 8 */
/* --- cacheline 27 boundary (1728 bytes) --- */
int nr_migrate_reserve_block; /* 1728 4 */
/* XXX 4 bytes hole, try to pack */
const char * name; /* 1736 8 */
/* size: 1792, cachelines: 28, members: 36 */
/* sum members: 1649, holes: 6, sum holes: 95 */
/* padding: 48 */
};
WARNING: multiple messages have this Message-ID (diff)
From: Huang Ying <ying.huang@linux.intel.com>
To: lkp@lists.01.org
Subject: Re: [mm] 3484b2de949: -46.2% aim7.jobs-per-min
Date: Sat, 28 Feb 2015 15:57:24 +0800 [thread overview]
Message-ID: <1425110244.10337.90.camel@linux.intel.com> (raw)
In-Reply-To: <20150227115304.GF3087@suse.de>
[-- Attachment #1: Type: text/plain, Size: 7875 bytes --]
On Fri, 2015-02-27 at 11:53 +0000, Mel Gorman wrote:
> On Fri, Feb 27, 2015 at 03:21:36PM +0800, Huang Ying wrote:
> > FYI, we noticed the below changes on
> >
> > git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> > commit 3484b2de9499df23c4604a513b36f96326ae81ad ("mm: rearrange zone fields into read-only, page alloc, statistics and page reclaim lines")
> >
> > The perf cpu-cycles for spinlock (zone->lock) increased a lot. I suspect there are some cache ping-pong or false sharing.
> >
>
> Annoying because this is pretty much the opposite of what I found during
> testing. What is the kernel config? Similar to the kernel config, can you
> post "pahole -C zone vmlinux" for the kernel you built? I should get the same
> result if I use the same kernel config but no harm in being sure. Thanks.
The output of pahole -C zone vmlinux for the kernels are as below.
Best Regards,
Huang, Ying
3484b2de94
-------------------------------------------------------
struct zone {
long unsigned int watermark[3]; /* 0 24 */
long int lowmem_reserve[4]; /* 24 32 */
int node; /* 56 4 */
unsigned int inactive_ratio; /* 60 4 */
/* --- cacheline 1 boundary (64 bytes) --- */
struct pglist_data * zone_pgdat; /* 64 8 */
struct per_cpu_pageset * pageset; /* 72 8 */
long unsigned int dirty_balance_reserve; /* 80 8 */
long unsigned int min_unmapped_pages; /* 88 8 */
long unsigned int min_slab_pages; /* 96 8 */
long unsigned int zone_start_pfn; /* 104 8 */
long unsigned int managed_pages; /* 112 8 */
long unsigned int spanned_pages; /* 120 8 */
/* --- cacheline 2 boundary (128 bytes) --- */
long unsigned int present_pages; /* 128 8 */
const char * name; /* 136 8 */
int nr_migrate_reserve_block; /* 144 4 */
seqlock_t span_seqlock; /* 148 8 */
/* XXX 4 bytes hole, try to pack */
wait_queue_head_t * wait_table; /* 160 8 */
long unsigned int wait_table_hash_nr_entries; /* 168 8 */
long unsigned int wait_table_bits; /* 176 8 */
/* XXX 8 bytes hole, try to pack */
/* --- cacheline 3 boundary (192 bytes) --- */
struct zone_padding _pad1_; /* 192 0 */
spinlock_t lock; /* 192 4 */
/* XXX 4 bytes hole, try to pack */
struct free_area free_area[11]; /* 200 968 */
/* --- cacheline 18 boundary (1152 bytes) was 16 bytes ago --- */
long unsigned int flags; /* 1168 8 */
/* XXX 40 bytes hole, try to pack */
/* --- cacheline 19 boundary (1216 bytes) --- */
struct zone_padding _pad2_; /* 1216 0 */
spinlock_t lru_lock; /* 1216 4 */
/* XXX 4 bytes hole, try to pack */
long unsigned int pages_scanned; /* 1224 8 */
struct lruvec lruvec; /* 1232 120 */
/* --- cacheline 21 boundary (1344 bytes) was 8 bytes ago --- */
atomic_long_t inactive_age; /* 1352 8 */
long unsigned int percpu_drift_mark; /* 1360 8 */
long unsigned int compact_cached_free_pfn; /* 1368 8 */
long unsigned int compact_cached_migrate_pfn[2]; /* 1376 16 */
unsigned int compact_considered; /* 1392 4 */
unsigned int compact_defer_shift; /* 1396 4 */
int compact_order_failed; /* 1400 4 */
bool compact_blockskip_flush; /* 1404 1 */
/* XXX 3 bytes hole, try to pack */
/* --- cacheline 22 boundary (1408 bytes) --- */
struct zone_padding _pad3_; /* 1408 0 */
atomic_long_t vm_stat[38]; /* 1408 304 */
/* --- cacheline 26 boundary (1664 bytes) was 48 bytes ago --- */
/* size: 1728, cachelines: 27, members: 37 */
/* sum members: 1649, holes: 6, sum holes: 63 */
/* padding: 16 */
};
24b7e5819a
---------------------------------------------------------------
struct zone {
long unsigned int watermark[3]; /* 0 24 */
long unsigned int percpu_drift_mark; /* 24 8 */
long unsigned int lowmem_reserve[4]; /* 32 32 */
/* --- cacheline 1 boundary (64 bytes) --- */
long unsigned int dirty_balance_reserve; /* 64 8 */
int node; /* 72 4 */
/* XXX 4 bytes hole, try to pack */
long unsigned int min_unmapped_pages; /* 80 8 */
long unsigned int min_slab_pages; /* 88 8 */
struct per_cpu_pageset * pageset; /* 96 8 */
spinlock_t lock; /* 104 4 */
bool compact_blockskip_flush; /* 108 1 */
/* XXX 3 bytes hole, try to pack */
long unsigned int compact_cached_free_pfn; /* 112 8 */
long unsigned int compact_cached_migrate_pfn[2]; /* 120 16 */
/* --- cacheline 2 boundary (128 bytes) was 8 bytes ago --- */
seqlock_t span_seqlock; /* 136 8 */
struct free_area free_area[11]; /* 144 968 */
/* --- cacheline 17 boundary (1088 bytes) was 24 bytes ago --- */
unsigned int compact_considered; /* 1112 4 */
unsigned int compact_defer_shift; /* 1116 4 */
int compact_order_failed; /* 1120 4 */
/* XXX 28 bytes hole, try to pack */
/* --- cacheline 18 boundary (1152 bytes) --- */
struct zone_padding _pad1_; /* 1152 0 */
spinlock_t lru_lock; /* 1152 4 */
/* XXX 4 bytes hole, try to pack */
struct lruvec lruvec; /* 1160 120 */
/* --- cacheline 20 boundary (1280 bytes) --- */
atomic_long_t inactive_age; /* 1280 8 */
long unsigned int pages_scanned; /* 1288 8 */
long unsigned int flags; /* 1296 8 */
atomic_long_t vm_stat[38]; /* 1304 304 */
/* --- cacheline 25 boundary (1600 bytes) was 8 bytes ago --- */
unsigned int inactive_ratio; /* 1608 4 */
/* XXX 52 bytes hole, try to pack */
/* --- cacheline 26 boundary (1664 bytes) --- */
struct zone_padding _pad2_; /* 1664 0 */
wait_queue_head_t * wait_table; /* 1664 8 */
long unsigned int wait_table_hash_nr_entries; /* 1672 8 */
long unsigned int wait_table_bits; /* 1680 8 */
struct pglist_data * zone_pgdat; /* 1688 8 */
long unsigned int zone_start_pfn; /* 1696 8 */
long unsigned int spanned_pages; /* 1704 8 */
long unsigned int present_pages; /* 1712 8 */
long unsigned int managed_pages; /* 1720 8 */
/* --- cacheline 27 boundary (1728 bytes) --- */
int nr_migrate_reserve_block; /* 1728 4 */
/* XXX 4 bytes hole, try to pack */
const char * name; /* 1736 8 */
/* size: 1792, cachelines: 28, members: 36 */
/* sum members: 1649, holes: 6, sum holes: 95 */
/* padding: 48 */
};
next prev parent reply other threads:[~2015-02-28 7:57 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-27 7:21 [LKP] [mm] 3484b2de949: -46.2% aim7.jobs-per-min Huang Ying
2015-02-27 7:21 ` Huang Ying
2015-02-27 11:53 ` [LKP] " Mel Gorman
2015-02-27 11:53 ` Mel Gorman
2015-02-28 1:24 ` [LKP] " Huang Ying
2015-02-28 1:24 ` Huang Ying
2015-02-28 7:57 ` Huang Ying [this message]
2015-02-28 7:57 ` Huang Ying
2015-02-28 1:46 ` [LKP] " Mel Gorman
2015-02-28 1:46 ` Mel Gorman
2015-02-28 2:30 ` [LKP] " Huang Ying
2015-02-28 2:30 ` Huang Ying
2015-02-28 2:42 ` [LKP] " Huang Ying
2015-02-28 2:42 ` Huang Ying
2015-02-28 7:30 ` [LKP] " Huang Ying
2015-02-28 7:30 ` Huang Ying
2015-03-05 5:34 ` [LKP] " Huang Ying
2015-03-05 5:34 ` Huang Ying
2015-03-05 10:26 ` [LKP] " Mel Gorman
2015-03-05 10:26 ` Mel Gorman
2015-03-23 8:46 ` [LKP] " Huang Ying
2015-03-23 8:46 ` Huang Ying
2015-03-25 10:54 ` [LKP] " Mel Gorman
2015-03-25 10:54 ` Mel Gorman
2015-03-27 8:49 ` [LKP] " Huang Ying
2015-03-27 8:49 ` Huang Ying
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=1425110244.10337.90.camel@linux.intel.com \
--to=ying.huang@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lkp@01.org \
--cc=mgorman@suse.de \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.