powerpc: Update page-in counter for CMM
A new field has been added to the VPA as a method for the client OS to communicate to firmware the number of page-ins it is performing when running collaborative memory overcommit. The hypervisor will use this information to better determine if a partition is experiencing memory pressure and needs more memory allocated to it. Signed-off-by: Brian King <brking@linux.vnet.ibm.com> Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
Родитель
1ef8014deb
Коммит
409001948d
|
@ -133,7 +133,8 @@ struct lppaca {
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
// CACHE_LINE_4-5 0x0180 - 0x027F Contains PMC interrupt data
|
// CACHE_LINE_4-5 0x0180 - 0x027F Contains PMC interrupt data
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
u8 pmc_save_area[256]; // PMC interrupt Area x00-xFF
|
u32 page_ins; // CMO Hint - # page ins by OS x00-x04
|
||||||
|
u8 pmc_save_area[252]; // PMC interrupt Area x04-xFF
|
||||||
} __attribute__((__aligned__(0x400)));
|
} __attribute__((__aligned__(0x400)));
|
||||||
|
|
||||||
extern struct lppaca lppaca[];
|
extern struct lppaca lppaca[];
|
||||||
|
|
|
@ -37,6 +37,7 @@ struct lppaca lppaca[] = {
|
||||||
.end_of_quantum = 0xfffffffffffffffful,
|
.end_of_quantum = 0xfffffffffffffffful,
|
||||||
.slb_count = 64,
|
.slb_count = 64,
|
||||||
.vmxregs_in_use = 0,
|
.vmxregs_in_use = 0,
|
||||||
|
.page_ins = 0,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
#include <linux/kprobes.h>
|
#include <linux/kprobes.h>
|
||||||
#include <linux/kdebug.h>
|
#include <linux/kdebug.h>
|
||||||
|
|
||||||
|
#include <asm/firmware.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/mmu.h>
|
#include <asm/mmu.h>
|
||||||
|
@ -318,9 +319,16 @@ good_area:
|
||||||
goto do_sigbus;
|
goto do_sigbus;
|
||||||
BUG();
|
BUG();
|
||||||
}
|
}
|
||||||
if (ret & VM_FAULT_MAJOR)
|
if (ret & VM_FAULT_MAJOR) {
|
||||||
current->maj_flt++;
|
current->maj_flt++;
|
||||||
else
|
#ifdef CONFIG_PPC_SMLPAR
|
||||||
|
if (firmware_has_feature(FW_FEATURE_CMO)) {
|
||||||
|
preempt_disable();
|
||||||
|
get_lppaca()->page_ins++;
|
||||||
|
preempt_enable();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
} else
|
||||||
current->min_flt++;
|
current->min_flt++;
|
||||||
up_read(&mm->mmap_sem);
|
up_read(&mm->mmap_sem);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче