aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/swap.h
diff options
context:
space:
mode:
authorShaohua Li <shli@kernel.org>2013-02-22 19:34:37 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2013-02-23 20:50:17 -0500
commit33806f06da654092182410d974b6d3c5396ea3eb (patch)
tree7f7da99d94481a1d4c78ebf05b410fc8ba654a39 /include/linux/swap.h
parent9800339b5e0f0e24ab3dac349e0de80d2018832e (diff)
swap: make each swap partition have one address_space
When I use several fast SSD to do swap, swapper_space.tree_lock is heavily contended. This makes each swap partition have one address_space to reduce the lock contention. There is an array of address_space for swap. The swap entry type is the index to the array. In my test with 3 SSD, this increases the swapout throughput 20%. [akpm@linux-foundation.org: revert unneeded change to __add_to_swap_cache] Signed-off-by: Shaohua Li <shli@fusionio.com> Cc: Hugh Dickins <hughd@google.com> Acked-by: Rik van Riel <riel@redhat.com> Acked-by: Minchan Kim <minchan@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include/linux/swap.h')
-rw-r--r--include/linux/swap.h9
1 files changed, 5 insertions, 4 deletions
diff --git a/include/linux/swap.h b/include/linux/swap.h
index 8c66486a8ca8..235c039892ee 100644
--- a/include/linux/swap.h
+++ b/include/linux/swap.h
@@ -8,7 +8,7 @@
8#include <linux/memcontrol.h> 8#include <linux/memcontrol.h>
9#include <linux/sched.h> 9#include <linux/sched.h>
10#include <linux/node.h> 10#include <linux/node.h>
11 11#include <linux/fs.h>
12#include <linux/atomic.h> 12#include <linux/atomic.h>
13#include <asm/page.h> 13#include <asm/page.h>
14 14
@@ -330,8 +330,9 @@ int generic_swapfile_activate(struct swap_info_struct *, struct file *,
330 sector_t *); 330 sector_t *);
331 331
332/* linux/mm/swap_state.c */ 332/* linux/mm/swap_state.c */
333extern struct address_space swapper_space; 333extern struct address_space swapper_spaces[];
334#define total_swapcache_pages swapper_space.nrpages 334#define swap_address_space(entry) (&swapper_spaces[swp_type(entry)])
335extern unsigned long total_swapcache_pages(void);
335extern void show_swap_cache_info(void); 336extern void show_swap_cache_info(void);
336extern int add_to_swap(struct page *); 337extern int add_to_swap(struct page *);
337extern int add_to_swap_cache(struct page *, swp_entry_t, gfp_t); 338extern int add_to_swap_cache(struct page *, swp_entry_t, gfp_t);
@@ -382,7 +383,7 @@ mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent, bool swapout)
382 383
383#define nr_swap_pages 0L 384#define nr_swap_pages 0L
384#define total_swap_pages 0L 385#define total_swap_pages 0L
385#define total_swapcache_pages 0UL 386#define total_swapcache_pages() 0UL
386 387
387#define si_swapinfo(val) \ 388#define si_swapinfo(val) \
388 do { (val)->freeswap = (val)->totalswap = 0; } while (0) 389 do { (val)->freeswap = (val)->totalswap = 0; } while (0)