From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756897Ab3DAIBN (ORCPT ); Mon, 1 Apr 2013 04:01:13 -0400 Received: from mx4-phx2.redhat.com ([209.132.183.25]:41513 "EHLO mx4-phx2.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751281Ab3DAIBM (ORCPT ); Mon, 1 Apr 2013 04:01:12 -0400 Date: Mon, 1 Apr 2013 04:00:27 -0400 (EDT) From: Zhouping Liu To: Andrea Arcangeli , Hugh Dickins , Mel Gorman , David Rientjes Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Amos Kong Message-ID: <383590596.664138.1364803227470.JavaMail.root@redhat.com> In-Reply-To: <1207916095.642011.1364800448075.JavaMail.root@redhat.com> Subject: THP: AnonHugePages in /proc/[pid]/smaps is correct or not? MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.3_GA_5664 (ZimbraWebClient - FF17 (Linux)/8.0.3_GA_5664) Thread-Topic: AnonHugePages in /proc/[pid]/smaps is correct or not? Thread-Index: XwswPDG4DyQ4aShL0QozGDI+OoiLOQ== Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi all, I found THP can't correctly distinguish one anonymous hugepage map. 1. when /sys/kernel/mm/transparent_hugepage/enabled is 'always', the amount of THP always is one less. Testing code: ---- snip -------- unsigned long hugepagesize = (1UL << 21); int main() { void *addr; int i; printf("pid is %d\n", getpid()); for (i = 0; i < 5; i++) { addr = mmap(NULL, hugepagesize, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0); if (addr == MAP_FAILED) { perror("mmap"); return -1; } memset(addr, i, hugepagesize); } sleep(50); return 0; } ------ snip ---------- the /proc/[pid]/smaps show that Anonymous is 10240kB but AnonHugePages is 8192Kb, one THP less: ----- snip -------- 7f59ccc01000-7f59cd601000 rw-p 00000000 00:00 0 Size: 10240 kB Rss: 10240 kB Pss: 10240 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 10240 kB Referenced: 10240 kB Anonymous: 10240 kB AnonHugePages: 8192 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd wr mr mw me ac hg ------- sinp --------- 2. when /sys/kernel/mm/transparent_hugepage/enabled is 'madvise', THP can't distinguish any one anonymous hugepage size: Testing code: -------- snip -------- unsigned long hugepagesize = (1UL << 21); int main() { void *addr; int i; printf("pid is %d\n", getpid()); for (i = 0; i < 5; i++) { addr = mmap(NULL, hugepagesize, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0); if (addr == MAP_FAILED) { perror("mmap"); return -1; } if (madvise(addr, hugepagesize, MADV_HUGEPAGE) == -1) { perror("madvise"); return -1; } memset(addr, i, hugepagesize); } sleep(50); return 0; } --------- snip ---------- The result is that it can't find any AnonHugePages from /proc/[pid]/smaps : -------------- snip ------- 7f0b38cd0000-7f0b396d0000 rw-p 00000000 00:00 0 Size: 10240 kB Rss: 10240 kB Pss: 10240 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 10240 kB Referenced: 10240 kB Anonymous: 10240 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd wr mr mw me ac ----------- snip ---------- 3. when I made the address aligned with HUGEPAGESIZE using 'posix_memalign()' instead of mmap(), THP perform good, and can distinguish all anonymous huge pages. my question is: 1. all the above behaviour is right? 2. why THP can't distinguish one naturally aligned huge page(generated by mmap())? -- Thanks, Zhouping From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from psmtp.com (na3sys010amx166.postini.com [74.125.245.166]) by kanga.kvack.org (Postfix) with SMTP id 84C9A6B0002 for ; Mon, 1 Apr 2013 04:00:29 -0400 (EDT) Date: Mon, 1 Apr 2013 04:00:27 -0400 (EDT) From: Zhouping Liu Message-ID: <383590596.664138.1364803227470.JavaMail.root@redhat.com> In-Reply-To: <1207916095.642011.1364800448075.JavaMail.root@redhat.com> Subject: THP: AnonHugePages in /proc/[pid]/smaps is correct or not? MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: Andrea Arcangeli , Hugh Dickins , Mel Gorman , David Rientjes Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Amos Kong Hi all, I found THP can't correctly distinguish one anonymous hugepage map. 1. when /sys/kernel/mm/transparent_hugepage/enabled is 'always', the amount of THP always is one less. Testing code: ---- snip -------- unsigned long hugepagesize = (1UL << 21); int main() { void *addr; int i; printf("pid is %d\n", getpid()); for (i = 0; i < 5; i++) { addr = mmap(NULL, hugepagesize, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0); if (addr == MAP_FAILED) { perror("mmap"); return -1; } memset(addr, i, hugepagesize); } sleep(50); return 0; } ------ snip ---------- the /proc/[pid]/smaps show that Anonymous is 10240kB but AnonHugePages is 8192Kb, one THP less: ----- snip -------- 7f59ccc01000-7f59cd601000 rw-p 00000000 00:00 0 Size: 10240 kB Rss: 10240 kB Pss: 10240 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 10240 kB Referenced: 10240 kB Anonymous: 10240 kB AnonHugePages: 8192 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd wr mr mw me ac hg ------- sinp --------- 2. when /sys/kernel/mm/transparent_hugepage/enabled is 'madvise', THP can't distinguish any one anonymous hugepage size: Testing code: -------- snip -------- unsigned long hugepagesize = (1UL << 21); int main() { void *addr; int i; printf("pid is %d\n", getpid()); for (i = 0; i < 5; i++) { addr = mmap(NULL, hugepagesize, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0); if (addr == MAP_FAILED) { perror("mmap"); return -1; } if (madvise(addr, hugepagesize, MADV_HUGEPAGE) == -1) { perror("madvise"); return -1; } memset(addr, i, hugepagesize); } sleep(50); return 0; } --------- snip ---------- The result is that it can't find any AnonHugePages from /proc/[pid]/smaps : -------------- snip ------- 7f0b38cd0000-7f0b396d0000 rw-p 00000000 00:00 0 Size: 10240 kB Rss: 10240 kB Pss: 10240 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 10240 kB Referenced: 10240 kB Anonymous: 10240 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd wr mr mw me ac ----------- snip ---------- 3. when I made the address aligned with HUGEPAGESIZE using 'posix_memalign()' instead of mmap(), THP perform good, and can distinguish all anonymous huge pages. my question is: 1. all the above behaviour is right? 2. why THP can't distinguish one naturally aligned huge page(generated by mmap())? -- Thanks, Zhouping -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org