From: Amerigo Wang <xiyou.wangcong@gmail.com>
To: Jan Beulich <JBeulich@novell.com>
Cc: Rusty Russell <rusty@rustcorp.com.au>, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] replace various uses of num_physpages by totalram_pages
Date: Wed, 1 Jul 2009 15:43:41 +0800 [thread overview]
Message-ID: <20090701074341.GH6076@cr0.nay.redhat.com> (raw)
In-Reply-To: <4A4A0E50020000780000830B@vpn.id2.novell.com>
On Tue, Jun 30, 2009 at 12:08:32PM +0100, Jan Beulich wrote:
>Sizing of memory allocations shouldn't depend on the number of physical
>pages found in a system, as that generally include (perhaps a huge
>amount of) non-RAM pages. The amount of what actually is usable as
>storage should instead be used as a basis here.
For this part, ACK.
>
>In line with that, the memory hotplug code should update num_physpages
>in a way that it retains its original (post-boot) meaning; in
>particular, decreasing the value should at best be done with great care
>- this patch doesn't try to ever decrease this value at all as it
>doesn't really seem meaningful to do so.
Could you please split this part out and send it with Cc: to linux-mm
mailing list?
Thanks.
>
>Signed-off-by: Jan Beulich <jbeulich@novell.com>
>
>---
> drivers/char/agp/backend.c | 4 ++--
> drivers/parisc/ccio-dma.c | 4 ++--
> drivers/parisc/sba_iommu.c | 4 ++--
> drivers/xen/balloon.c | 4 ----
> fs/ntfs/malloc.h | 2 +-
> include/linux/mm.h | 1 +
> init/main.c | 4 ++--
> mm/memory_hotplug.c | 6 ++++--
> mm/slab.c | 2 +-
> mm/swap.c | 2 +-
> mm/vmalloc.c | 4 ++--
> net/core/sock.c | 4 ++--
> net/dccp/proto.c | 6 +++---
> net/decnet/dn_route.c | 2 +-
> net/ipv4/route.c | 2 +-
> net/ipv4/tcp.c | 4 ++--
> net/netfilter/nf_conntrack_core.c | 4 ++--
> net/netfilter/x_tables.c | 2 +-
> net/netfilter/xt_hashlimit.c | 8 ++++----
> net/netlink/af_netlink.c | 6 +++---
> net/sctp/protocol.c | 6 +++---
> 21 files changed, 40 insertions(+), 41 deletions(-)
>
>--- linux-2.6.31-rc1/drivers/char/agp/backend.c 2009-06-26 17:49:43.000000000 +0200
>+++ 2.6.31-rc1-use-totalram_pages/drivers/char/agp/backend.c 2009-06-24 16:09:34.000000000 +0200
>@@ -114,9 +114,9 @@ static int agp_find_max(void)
> long memory, index, result;
>
> #if PAGE_SHIFT < 20
>- memory = num_physpages >> (20 - PAGE_SHIFT);
>+ memory = totalram_pages >> (20 - PAGE_SHIFT);
> #else
>- memory = num_physpages << (PAGE_SHIFT - 20);
>+ memory = totalram_pages << (PAGE_SHIFT - 20);
> #endif
> index = 1;
>
>--- linux-2.6.31-rc1/drivers/parisc/ccio-dma.c 2009-06-10 05:05:27.000000000 +0200
>+++ 2.6.31-rc1-use-totalram_pages/drivers/parisc/ccio-dma.c 2009-06-24 16:10:47.000000000 +0200
>@@ -1267,7 +1267,7 @@ ccio_ioc_init(struct ioc *ioc)
> ** Hot-Plug/Removal of PCI cards. (aka PCI OLARD).
> */
>
>- iova_space_size = (u32) (num_physpages / count_parisc_driver(&ccio_driver));
>+ iova_space_size = (u32) (totalram_pages / count_parisc_driver(&ccio_driver));
>
> /* limit IOVA space size to 1MB-1GB */
>
>@@ -1306,7 +1306,7 @@ ccio_ioc_init(struct ioc *ioc)
>
> DBG_INIT("%s() hpa 0x%p mem %luMB IOV %dMB (%d bits)\n",
> __func__, ioc->ioc_regs,
>- (unsigned long) num_physpages >> (20 - PAGE_SHIFT),
>+ (unsigned long) totalram_pages >> (20 - PAGE_SHIFT),
> iova_space_size>>20,
> iov_order + PAGE_SHIFT);
>
>--- linux-2.6.31-rc1/drivers/parisc/sba_iommu.c 2009-06-26 17:49:47.000000000 +0200
>+++ 2.6.31-rc1-use-totalram_pages/drivers/parisc/sba_iommu.c 2009-06-24 16:10:58.000000000 +0200
>@@ -1390,7 +1390,7 @@ sba_ioc_init(struct parisc_device *sba,
> ** for DMA hints - ergo only 30 bits max.
> */
>
>- iova_space_size = (u32) (num_physpages/global_ioc_cnt);
>+ iova_space_size = (u32) (totalram_pages/global_ioc_cnt);
>
> /* limit IOVA space size to 1MB-1GB */
> if (iova_space_size < (1 << (20 - PAGE_SHIFT))) {
>@@ -1415,7 +1415,7 @@ sba_ioc_init(struct parisc_device *sba,
> DBG_INIT("%s() hpa 0x%lx mem %ldMB IOV %dMB (%d bits)\n",
> __func__,
> ioc->ioc_hpa,
>- (unsigned long) num_physpages >> (20 - PAGE_SHIFT),
>+ (unsigned long) totalram_pages >> (20 - PAGE_SHIFT),
> iova_space_size>>20,
> iov_order + PAGE_SHIFT);
>
>--- linux-2.6.31-rc1/drivers/xen/balloon.c 2009-06-10 05:05:27.000000000 +0200
>+++ 2.6.31-rc1-use-totalram_pages/drivers/xen/balloon.c 2009-06-24 16:02:01.000000000 +0200
>@@ -96,11 +96,7 @@ static struct balloon_stats balloon_stat
> /* We increase/decrease in batches which fit in a page */
> static unsigned long frame_list[PAGE_SIZE / sizeof(unsigned long)];
>
>-/* VM /proc information for memory */
>-extern unsigned long totalram_pages;
>-
> #ifdef CONFIG_HIGHMEM
>-extern unsigned long totalhigh_pages;
> #define inc_totalhigh_pages() (totalhigh_pages++)
> #define dec_totalhigh_pages() (totalhigh_pages--)
> #else
>--- linux-2.6.31-rc1/fs/ntfs/malloc.h 2008-04-17 04:49:44.000000000 +0200
>+++ 2.6.31-rc1-use-totalram_pages/fs/ntfs/malloc.h 2009-06-24 16:11:49.000000000 +0200
>@@ -47,7 +47,7 @@ static inline void *__ntfs_malloc(unsign
> return kmalloc(PAGE_SIZE, gfp_mask & ~__GFP_HIGHMEM);
> /* return (void *)__get_free_page(gfp_mask); */
> }
>- if (likely(size >> PAGE_SHIFT < num_physpages))
>+ if (likely((size >> PAGE_SHIFT) < totalram_pages))
> return __vmalloc(size, gfp_mask, PAGE_KERNEL);
> return NULL;
> }
>--- linux-2.6.31-rc1/include/linux/mm.h 2009-06-26 17:50:00.000000000 +0200
>+++ 2.6.31-rc1-use-totalram_pages/include/linux/mm.h 2009-06-24 16:00:50.000000000 +0200
>@@ -25,6 +25,7 @@ extern unsigned long max_mapnr;
> #endif
>
> extern unsigned long num_physpages;
>+extern unsigned long totalram_pages;
> extern void * high_memory;
> extern int page_cluster;
>
>--- linux-2.6.31-rc1/init/main.c 2009-06-26 17:50:00.000000000 +0200
>+++ 2.6.31-rc1-use-totalram_pages/init/main.c 2009-06-24 16:12:30.000000000 +0200
>@@ -691,12 +691,12 @@ asmlinkage void __init start_kernel(void
> #endif
> thread_info_cache_init();
> cred_init();
>- fork_init(num_physpages);
>+ fork_init(totalram_pages);
> proc_caches_init();
> buffer_init();
> key_init();
> security_init();
>- vfs_caches_init(num_physpages);
>+ vfs_caches_init(totalram_pages);
> radix_tree_init();
> signals_init();
> /* rootfs populating might need page-writeback */
>--- linux-2.6.31-rc1/mm/memory_hotplug.c 2009-06-26 17:50:00.000000000 +0200
>+++ 2.6.31-rc1-use-totalram_pages/mm/memory_hotplug.c 2009-06-24 16:04:44.000000000 +0200
>@@ -339,8 +339,11 @@ EXPORT_SYMBOL_GPL(__remove_pages);
>
> void online_page(struct page *page)
> {
>+ unsigned long pfn = page_to_pfn(page);
>+
> totalram_pages++;
>- num_physpages++;
>+ if (pfn >= num_physpages)
>+ num_physpages = pfn + 1;
>
> #ifdef CONFIG_HIGHMEM
> if (PageHighMem(page))
>@@ -831,7 +834,6 @@ repeat:
> zone->present_pages -= offlined_pages;
> zone->zone_pgdat->node_present_pages -= offlined_pages;
> totalram_pages -= offlined_pages;
>- num_physpages -= offlined_pages;
>
> setup_per_zone_wmarks();
> calculate_zone_inactive_ratio(zone);
>--- linux-2.6.31-rc1/mm/slab.c 2009-06-26 17:50:00.000000000 +0200
>+++ 2.6.31-rc1-use-totalram_pages/mm/slab.c 2009-06-24 16:06:21.000000000 +0200
>@@ -1384,7 +1384,7 @@ void __init kmem_cache_init(void)
> * Fragmentation resistance on low memory - only use bigger
> * page orders on machines with more than 32MB of memory.
> */
>- if (num_physpages > (32 << 20) >> PAGE_SHIFT)
>+ if (totalram_pages > (32 << 20) >> PAGE_SHIFT)
> slab_break_gfp_order = BREAK_GFP_ORDER_HI;
>
> /* Bootstrap is tricky, because several objects are allocated
>--- linux-2.6.31-rc1/mm/swap.c 2009-06-10 05:05:27.000000000 +0200
>+++ 2.6.31-rc1-use-totalram_pages/mm/swap.c 2009-06-24 16:06:40.000000000 +0200
>@@ -496,7 +496,7 @@ EXPORT_SYMBOL(pagevec_lookup_tag);
> */
> void __init swap_setup(void)
> {
>- unsigned long megs = num_physpages >> (20 - PAGE_SHIFT);
>+ unsigned long megs = totalram_pages >> (20 - PAGE_SHIFT);
>
> #ifdef CONFIG_SWAP
> bdi_init(swapper_space.backing_dev_info);
>--- linux-2.6.31-rc1/mm/vmalloc.c 2009-06-26 17:50:00.000000000 +0200
>+++ 2.6.31-rc1-use-totalram_pages/mm/vmalloc.c 2009-06-24 16:05:47.000000000 +0200
>@@ -1368,7 +1368,7 @@ void *vmap(struct page **pages, unsigned
>
> might_sleep();
>
>- if (count > num_physpages)
>+ if (count > totalram_pages)
> return NULL;
>
> area = get_vm_area_caller((count << PAGE_SHIFT), flags,
>@@ -1475,7 +1475,7 @@ static void *__vmalloc_node(unsigned lon
> unsigned long real_size = size;
>
> size = PAGE_ALIGN(size);
>- if (!size || (size >> PAGE_SHIFT) > num_physpages)
>+ if (!size || (size >> PAGE_SHIFT) > totalram_pages)
> return NULL;
>
> area = __get_vm_area_node(size, VM_ALLOC, VMALLOC_START, VMALLOC_END,
>--- linux-2.6.31-rc1/net/core/sock.c 2009-06-26 17:50:00.000000000 +0200
>+++ 2.6.31-rc1-use-totalram_pages/net/core/sock.c 2009-06-24 16:14:00.000000000 +0200
>@@ -1169,12 +1169,12 @@ EXPORT_SYMBOL_GPL(sk_setup_caps);
>
> void __init sk_init(void)
> {
>- if (num_physpages <= 4096) {
>+ if (totalram_pages <= 4096) {
> sysctl_wmem_max = 32767;
> sysctl_rmem_max = 32767;
> sysctl_wmem_default = 32767;
> sysctl_rmem_default = 32767;
>- } else if (num_physpages >= 131072) {
>+ } else if (totalram_pages >= 131072) {
> sysctl_wmem_max = 131071;
> sysctl_rmem_max = 131071;
> }
>--- linux-2.6.31-rc1/net/dccp/proto.c 2009-06-10 05:05:27.000000000 +0200
>+++ 2.6.31-rc1-use-totalram_pages/net/dccp/proto.c 2009-06-24 16:13:35.000000000 +0200
>@@ -1049,10 +1049,10 @@ static int __init dccp_init(void)
> *
> * The methodology is similar to that of the buffer cache.
> */
>- if (num_physpages >= (128 * 1024))
>- goal = num_physpages >> (21 - PAGE_SHIFT);
>+ if (totalram_pages >= (128 * 1024))
>+ goal = totalram_pages >> (21 - PAGE_SHIFT);
> else
>- goal = num_physpages >> (23 - PAGE_SHIFT);
>+ goal = totalram_pages >> (23 - PAGE_SHIFT);
>
> if (thash_entries)
> goal = (thash_entries *
>--- linux-2.6.31-rc1/net/decnet/dn_route.c 2009-06-26 17:50:00.000000000 +0200
>+++ 2.6.31-rc1-use-totalram_pages/net/decnet/dn_route.c 2009-06-24 16:17:11.000000000 +0200
>@@ -1750,7 +1750,7 @@ void __init dn_route_init(void)
> dn_route_timer.expires = jiffies + decnet_dst_gc_interval * HZ;
> add_timer(&dn_route_timer);
>
>- goal = num_physpages >> (26 - PAGE_SHIFT);
>+ goal = totalram_pages >> (26 - PAGE_SHIFT);
>
> for(order = 0; (1UL << order) < goal; order++)
> /* NOTHING */;
>--- linux-2.6.31-rc1/net/ipv4/route.c 2009-06-26 17:50:00.000000000 +0200
>+++ 2.6.31-rc1-use-totalram_pages/net/ipv4/route.c 2009-06-24 16:14:48.000000000 +0200
>@@ -3412,7 +3412,7 @@ int __init ip_rt_init(void)
> alloc_large_system_hash("IP route cache",
> sizeof(struct rt_hash_bucket),
> rhash_entries,
>- (num_physpages >= 128 * 1024) ?
>+ (totalram_pages >= 128 * 1024) ?
> 15 : 17,
> 0,
> &rt_hash_log,
>--- linux-2.6.31-rc1/net/ipv4/tcp.c 2009-06-26 17:50:00.000000000 +0200
>+++ 2.6.31-rc1-use-totalram_pages/net/ipv4/tcp.c 2009-06-24 16:14:24.000000000 +0200
>@@ -2857,7 +2857,7 @@ void __init tcp_init(void)
> alloc_large_system_hash("TCP established",
> sizeof(struct inet_ehash_bucket),
> thash_entries,
>- (num_physpages >= 128 * 1024) ?
>+ (totalram_pages >= 128 * 1024) ?
> 13 : 15,
> 0,
> &tcp_hashinfo.ehash_size,
>@@ -2874,7 +2874,7 @@ void __init tcp_init(void)
> alloc_large_system_hash("TCP bind",
> sizeof(struct inet_bind_hashbucket),
> tcp_hashinfo.ehash_size,
>- (num_physpages >= 128 * 1024) ?
>+ (totalram_pages >= 128 * 1024) ?
> 13 : 15,
> 0,
> &tcp_hashinfo.bhash_size,
>--- linux-2.6.31-rc1/net/netfilter/nf_conntrack_core.c 2009-06-26 17:50:00.000000000 +0200
>+++ 2.6.31-rc1-use-totalram_pages/net/netfilter/nf_conntrack_core.c 2009-06-24 16:16:47.000000000 +0200
>@@ -1230,9 +1230,9 @@ static int nf_conntrack_init_init_net(vo
> * machine has 512 buckets. >= 1GB machines have 16384 buckets. */
> if (!nf_conntrack_htable_size) {
> nf_conntrack_htable_size
>- = (((num_physpages << PAGE_SHIFT) / 16384)
>+ = (((totalram_pages << PAGE_SHIFT) / 16384)
> / sizeof(struct hlist_head));
>- if (num_physpages > (1024 * 1024 * 1024 / PAGE_SIZE))
>+ if (totalram_pages > (1024 * 1024 * 1024 / PAGE_SIZE))
> nf_conntrack_htable_size = 16384;
> if (nf_conntrack_htable_size < 32)
> nf_conntrack_htable_size = 32;
>--- linux-2.6.31-rc1/net/netfilter/x_tables.c 2009-06-26 17:50:00.000000000 +0200
>+++ 2.6.31-rc1-use-totalram_pages/net/netfilter/x_tables.c 2009-06-24 16:16:28.000000000 +0200
>@@ -617,7 +617,7 @@ struct xt_table_info *xt_alloc_table_inf
> int cpu;
>
> /* Pedantry: prevent them from hitting BUG() in vmalloc.c --RR */
>- if ((SMP_ALIGN(size) >> PAGE_SHIFT) + 2 > num_physpages)
>+ if ((SMP_ALIGN(size) >> PAGE_SHIFT) + 2 > totalram_pages)
> return NULL;
>
> newinfo = kzalloc(XT_TABLE_INFO_SZ, GFP_KERNEL);
>--- linux-2.6.31-rc1/net/netfilter/xt_hashlimit.c 2009-06-10 05:05:27.000000000 +0200
>+++ 2.6.31-rc1-use-totalram_pages/net/netfilter/xt_hashlimit.c 2009-06-24 16:16:07.000000000 +0200
>@@ -194,9 +194,9 @@ static int htable_create_v0(struct xt_ha
> if (minfo->cfg.size)
> size = minfo->cfg.size;
> else {
>- size = ((num_physpages << PAGE_SHIFT) / 16384) /
>+ size = ((totalram_pages << PAGE_SHIFT) / 16384) /
> sizeof(struct list_head);
>- if (num_physpages > (1024 * 1024 * 1024 / PAGE_SIZE))
>+ if (totalram_pages > (1024 * 1024 * 1024 / PAGE_SIZE))
> size = 8192;
> if (size < 16)
> size = 16;
>@@ -266,9 +266,9 @@ static int htable_create(struct xt_hashl
> if (minfo->cfg.size) {
> size = minfo->cfg.size;
> } else {
>- size = (num_physpages << PAGE_SHIFT) / 16384 /
>+ size = (totalram_pages << PAGE_SHIFT) / 16384 /
> sizeof(struct list_head);
>- if (num_physpages > 1024 * 1024 * 1024 / PAGE_SIZE)
>+ if (totalram_pages > 1024 * 1024 * 1024 / PAGE_SIZE)
> size = 8192;
> if (size < 16)
> size = 16;
>--- linux-2.6.31-rc1/net/netlink/af_netlink.c 2009-06-26 17:50:00.000000000 +0200
>+++ 2.6.31-rc1-use-totalram_pages/net/netlink/af_netlink.c 2009-06-24 16:17:28.000000000 +0200
>@@ -2026,10 +2026,10 @@ static int __init netlink_proto_init(voi
> if (!nl_table)
> goto panic;
>
>- if (num_physpages >= (128 * 1024))
>- limit = num_physpages >> (21 - PAGE_SHIFT);
>+ if (totalram_pages >= (128 * 1024))
>+ limit = totalram_pages >> (21 - PAGE_SHIFT);
> else
>- limit = num_physpages >> (23 - PAGE_SHIFT);
>+ limit = totalram_pages >> (23 - PAGE_SHIFT);
>
> order = get_bitmask_order(limit) - 1 + PAGE_SHIFT;
> limit = (1UL << order) / sizeof(struct hlist_head);
>--- linux-2.6.31-rc1/net/sctp/protocol.c 2009-06-26 17:50:00.000000000 +0200
>+++ 2.6.31-rc1-use-totalram_pages/net/sctp/protocol.c 2009-06-24 16:15:36.000000000 +0200
>@@ -1185,10 +1185,10 @@ SCTP_STATIC __init int sctp_init(void)
> /* Size and allocate the association hash table.
> * The methodology is similar to that of the tcp hash tables.
> */
>- if (num_physpages >= (128 * 1024))
>- goal = num_physpages >> (22 - PAGE_SHIFT);
>+ if (totalram_pages >= (128 * 1024))
>+ goal = totalram_pages >> (22 - PAGE_SHIFT);
> else
>- goal = num_physpages >> (24 - PAGE_SHIFT);
>+ goal = totalram_pages >> (24 - PAGE_SHIFT);
>
> for (order = 0; (1UL << order) < goal; order++)
> ;
>
>
>--
>To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>the body of a message to majordomo@vger.kernel.org
>More majordomo info at http://vger.kernel.org/majordomo-info.html
>Please read the FAQ at http://www.tux.org/lkml/
next prev parent reply other threads:[~2009-07-01 7:41 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-06-30 11:08 [PATCH] replace various uses of num_physpages by totalram_pages Jan Beulich
2009-07-01 4:57 ` Rusty Russell
2009-07-01 6:54 ` Jan Beulich
2009-07-01 7:43 ` Amerigo Wang [this message]
-- strict thread matches above, loose matches on Subject: below --
2009-08-18 15:34 Jan Beulich
2009-08-18 15:34 ` Jan Beulich
2009-08-18 15:38 ` Ingo Molnar
2009-08-18 15:38 ` Ingo Molnar
2009-08-18 15:48 ` Jan Beulich
2009-08-18 15:48 ` Jan Beulich
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=20090701074341.GH6076@cr0.nay.redhat.com \
--to=xiyou.wangcong@gmail.com \
--cc=JBeulich@novell.com \
--cc=linux-kernel@vger.kernel.org \
--cc=rusty@rustcorp.com.au \
/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.