mcexec: memory policy control by environmental variable
Refs: #1470 Change-Id: I3d556cae90d31d81572b1c4e5c680e826577d428
This commit is contained in:
@@ -542,6 +542,26 @@ static int process_msg_prepare_process(unsigned long rphys)
|
||||
}
|
||||
vm->numa_mem_policy = MPOL_BIND;
|
||||
}
|
||||
else if (pn->mpol_mode != MPOL_MAX) {
|
||||
int bit;
|
||||
|
||||
vm->numa_mem_policy = pn->mpol_mode;
|
||||
|
||||
memset(&vm->numa_mask, 0, sizeof(vm->numa_mask));
|
||||
|
||||
for_each_set_bit(bit, pn->mpol_nodemask,
|
||||
PLD_PROCESS_NUMA_MASK_BITS) {
|
||||
if (bit >= ihk_mc_get_nr_numa_nodes()) {
|
||||
kprintf("%s: error: NUMA id %d is larger than mask size!\n",
|
||||
__func__, bit);
|
||||
return -EINVAL;
|
||||
}
|
||||
set_bit(bit, &vm->numa_mask[0]);
|
||||
}
|
||||
|
||||
dkprintf("%s: numa_mem_policy: %d, numa_mask: %ld\n",
|
||||
__func__, vm->numa_mem_policy, vm->numa_mask[0]);
|
||||
}
|
||||
|
||||
proc->uti_thread_rank = pn->uti_thread_rank;
|
||||
proc->uti_use_last_cpu = pn->uti_use_last_cpu;
|
||||
|
||||
@@ -559,6 +559,8 @@ struct process {
|
||||
size_t mpol_threshold;
|
||||
unsigned long heap_extension;
|
||||
unsigned long mpol_bind_mask;
|
||||
int mpol_mode;
|
||||
|
||||
int uti_thread_rank; /* Spawn on Linux CPU when clone_count reaches this */
|
||||
int uti_use_last_cpu; /* Work-around not to share CPU with OpenMP thread */
|
||||
int clone_count;
|
||||
|
||||
@@ -183,6 +183,18 @@ typedef unsigned long __cpu_set_unit;
|
||||
#define MPOL_NO_BSS 0x04
|
||||
#define MPOL_SHM_PREMAP 0x08
|
||||
|
||||
/* should be the same as process.h */
|
||||
#define PLD_PROCESS_NUMA_MASK_BITS 256
|
||||
|
||||
enum {
|
||||
PLD_MPOL_DEFAULT,
|
||||
PLD_MPOL_PREFERRED,
|
||||
PLD_MPOL_BIND,
|
||||
PLD_MPOL_INTERLEAVE,
|
||||
PLD_MPOL_LOCAL,
|
||||
PLD_MPOL_MAX, /* always last member of enum */
|
||||
};
|
||||
|
||||
#define PLD_MAGIC 0xcafecafe44332211UL
|
||||
|
||||
struct program_load_desc {
|
||||
@@ -217,6 +229,10 @@ struct program_load_desc {
|
||||
unsigned long heap_extension;
|
||||
long stack_premap;
|
||||
unsigned long mpol_bind_mask;
|
||||
int mpol_mode;
|
||||
unsigned long mpol_nodemask[PLD_PROCESS_NUMA_MASK_BITS /
|
||||
(sizeof(unsigned long) * 8)];
|
||||
|
||||
int thp_disable;
|
||||
int uti_thread_rank; /* N-th clone() spawns a thread on Linux CPU */
|
||||
int uti_use_last_cpu; /* Work-around not to share CPU with OpenMP thread */
|
||||
|
||||
Reference in New Issue
Block a user