mirror of https://gitee.com/openkylin/linux.git
mm: optimize get_scan_ratio for no swap
Rik suggests a simplified get_scan_ratio() for !CONFIG_SWAP. Yes, the gcc optimizer gives us that, when nr_swap_pages is #defined as 0L. Move usual declaration to swapfile.c: it never belonged in page_alloc.c. Signed-off-by: Hugh Dickins <hugh@veritas.com> Cc: Lee Schermerhorn <lee.schermerhorn@hp.com> Acked-by: Rik van Riel <riel@redhat.com> Cc: Nick Piggin <nickpiggin@yahoo.com.au> Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Cc: Robin Holt <holt@sgi.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
60371d971a
commit
b962716b45
|
@ -163,7 +163,6 @@ struct swap_list_t {
|
|||
/* linux/mm/page_alloc.c */
|
||||
extern unsigned long totalram_pages;
|
||||
extern unsigned long totalreserve_pages;
|
||||
extern long nr_swap_pages;
|
||||
extern unsigned int nr_free_buffer_pages(void);
|
||||
extern unsigned int nr_free_pagecache_pages(void);
|
||||
|
||||
|
@ -291,6 +290,7 @@ extern struct page *swapin_readahead(swp_entry_t, gfp_t,
|
|||
struct vm_area_struct *vma, unsigned long addr);
|
||||
|
||||
/* linux/mm/swapfile.c */
|
||||
extern long nr_swap_pages;
|
||||
extern long total_swap_pages;
|
||||
extern void si_swapinfo(struct sysinfo *);
|
||||
extern swp_entry_t get_swap_page(void);
|
||||
|
@ -331,7 +331,8 @@ static inline void disable_swap_token(void)
|
|||
|
||||
#else /* CONFIG_SWAP */
|
||||
|
||||
#define total_swap_pages 0
|
||||
#define nr_swap_pages 0L
|
||||
#define total_swap_pages 0L
|
||||
#define total_swapcache_pages 0UL
|
||||
|
||||
#define si_swapinfo(val) \
|
||||
|
|
|
@ -69,7 +69,6 @@ EXPORT_SYMBOL(node_states);
|
|||
|
||||
unsigned long totalram_pages __read_mostly;
|
||||
unsigned long totalreserve_pages __read_mostly;
|
||||
long nr_swap_pages;
|
||||
int percpu_pagelist_fraction;
|
||||
|
||||
#ifdef CONFIG_HUGETLB_PAGE_SIZE_VARIABLE
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
|
||||
static DEFINE_SPINLOCK(swap_lock);
|
||||
static unsigned int nr_swapfiles;
|
||||
long nr_swap_pages;
|
||||
long total_swap_pages;
|
||||
static int swap_overflow;
|
||||
static int least_priority;
|
||||
|
|
12
mm/vmscan.c
12
mm/vmscan.c
|
@ -1327,12 +1327,6 @@ static void get_scan_ratio(struct zone *zone, struct scan_control *sc,
|
|||
unsigned long anon_prio, file_prio;
|
||||
unsigned long ap, fp;
|
||||
|
||||
anon = zone_page_state(zone, NR_ACTIVE_ANON) +
|
||||
zone_page_state(zone, NR_INACTIVE_ANON);
|
||||
file = zone_page_state(zone, NR_ACTIVE_FILE) +
|
||||
zone_page_state(zone, NR_INACTIVE_FILE);
|
||||
free = zone_page_state(zone, NR_FREE_PAGES);
|
||||
|
||||
/* If we have no swap space, do not bother scanning anon pages. */
|
||||
if (nr_swap_pages <= 0) {
|
||||
percent[0] = 0;
|
||||
|
@ -1340,6 +1334,12 @@ static void get_scan_ratio(struct zone *zone, struct scan_control *sc,
|
|||
return;
|
||||
}
|
||||
|
||||
anon = zone_page_state(zone, NR_ACTIVE_ANON) +
|
||||
zone_page_state(zone, NR_INACTIVE_ANON);
|
||||
file = zone_page_state(zone, NR_ACTIVE_FILE) +
|
||||
zone_page_state(zone, NR_INACTIVE_FILE);
|
||||
free = zone_page_state(zone, NR_FREE_PAGES);
|
||||
|
||||
/* If we have very few page cache pages, force-scan anon pages. */
|
||||
if (unlikely(file + free <= zone->pages_high)) {
|
||||
percent[0] = 100;
|
||||
|
|
Loading…
Reference in New Issue