MM: deferred zero cleaning on Linux CPUs

Change-Id: Icdb8ac807688533be7a95b7101edfd904250cd02
This commit is contained in:
Balazs Gerofi
2020-09-06 11:47:56 +09:00
committed by Masamichi Takagi
parent e7b8aeb4f7
commit 41f5c0bdde
7 changed files with 386 additions and 144 deletions

View File

@@ -55,6 +55,8 @@ typedef unsigned long ihk_mc_ap_flag;
#define IHK_MC_AP_BANDWIDTH 0x010000
#define IHK_MC_AP_LATENCY 0x020000
/* Only allocate from the closest NUMA node */
#define IHK_MC_AP_NUMA_STRICT 0x040000
#define IHK_MC_PG_KERNEL 0
#define IHK_MC_PG_USER 1

View File

@@ -17,6 +17,7 @@
#define __HEADER_GENERIC_IHK_PAGE_ALLOC
#include <list.h>
#include <llist.h>
#include <rbtree.h>
/* XXX: Physical memory management shouldn't be part of IHK */
@@ -31,9 +32,11 @@ struct node_distance {
struct free_chunk {
unsigned long addr, size;
struct rb_node node;
struct llist_node list;
};
#endif
struct ihk_mc_numa_node {
int id;
int linux_numa_id;
@@ -41,17 +44,17 @@ struct ihk_mc_numa_node {
struct list_head allocators;
struct node_distance *nodes_by_distance;
#ifdef IHK_RBTREE_ALLOCATOR
struct rb_root zeroed_chunks;
ihk_atomic_t zeroing_workers;
ihk_atomic_t nr_to_zero_pages;
struct llist_head zeroed_list;
struct llist_head to_zero_list;
struct rb_root free_chunks;
mcs_lock_node_t lock;
unsigned long nr_pages;
/*
* nr_free_pages: all freed pages
* nr_zeroed_pages: zeroed free pages
* Invariant: nr_zeroed_pages <= nr_free_pages
* nr_free_pages: all freed pages, zeroed if zero_at_free
*/
unsigned long nr_zeroed_pages;
unsigned long nr_free_pages;
unsigned long min_addr;
unsigned long max_addr;