Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 53796
b: refs/heads/master
c: 382591d
h: refs/heads/master
v: v3
  • Loading branch information
David Rientjes authored and Andi Kleen committed May 2, 2007
1 parent 7999268 commit 89d6c26
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 16 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 14694d736bb66d0ec250d05c81c6e98a19c229c6
refs/heads/master: 382591d500bbcd20a44416c5e0e292708468587c
14 changes: 9 additions & 5 deletions trunk/Documentation/x86_64/boot-options.txt
Original file line number Diff line number Diff line change
Expand Up @@ -153,11 +153,15 @@ NUMA
If a number, fakes CMDLINE nodes and ignores NUMA setup of the
actual machine. Otherwise, system memory is configured
depending on the sizes and coefficients listed. For example:
numa=fake=2*512,1024,4*256
gives two 512M nodes, a 1024M node, and four 256M nodes. The
remaining system RAM is allocated to an additional node. If
the last character of CMDLINE is a *, the remaining system RAM
is instead divided up equally among its coefficient.
numa=fake=2*512,1024,4*256,*128
gives two 512M nodes, a 1024M node, four 256M nodes, and the
rest split into 128M chunks. If the last character of CMDLINE
is a *, the remaining memory is divided up equally among its
coefficient:
numa=fake=2*512,2*
gives two 512M nodes and the rest split into two nodes.
Otherwise, the remaining system RAM is allocated to an
additional node.

numa=hotadd=percent
Only allow hotadd memory to preallocate page structures upto
Expand Down
47 changes: 37 additions & 10 deletions trunk/arch/x86_64/mm/numa.c
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,21 @@ static int __init split_nodes_equally(struct bootnode *nodes, u64 *addr,
return i - node_start + 1;
}

/*
* Splits the remaining system RAM into chunks of size. The remaining memory is
* always assigned to a final node and can be asymmetric. Returns the number of
* nodes split.
*/
static int __init split_nodes_by_size(struct bootnode *nodes, u64 *addr,
u64 max_addr, int node_start, u64 size)
{
int i = node_start;
size = (size << 20) & FAKE_NODE_MIN_HASH_MASK;
while (!setup_node_range(i++, nodes, addr, size, max_addr))
;
return i - node_start;
}

/*
* Sets up the system RAM area from start_pfn to end_pfn according to the
* numa=fake command-line option.
Expand All @@ -370,9 +385,10 @@ static int __init numa_emulation(unsigned long start_pfn, unsigned long end_pfn)
struct bootnode nodes[MAX_NUMNODES];
u64 addr = start_pfn << PAGE_SHIFT;
u64 max_addr = end_pfn << PAGE_SHIFT;
unsigned int coeff;
unsigned int num = 0;
int num_nodes = 0;
int coeff_flag;
int coeff = -1;
int num = 0;
u64 size;
int i;

Expand All @@ -390,36 +406,47 @@ static int __init numa_emulation(unsigned long start_pfn, unsigned long end_pfn)
}

/* Parse the command line. */
for (coeff = 1; ; cmdline++) {
for (coeff_flag = 0; ; cmdline++) {
if (*cmdline && isdigit(*cmdline)) {
num = num * 10 + *cmdline - '0';
continue;
}
if (*cmdline == '*')
coeff = num;
if (*cmdline == '*') {
if (num > 0)
coeff = num;
coeff_flag = 1;
}
if (!*cmdline || *cmdline == ',') {
if (!coeff_flag)
coeff = 1;
/*
* Round down to the nearest FAKE_NODE_MIN_SIZE.
* Command-line coefficients are in megabytes.
*/
size = ((u64)num << 20) & FAKE_NODE_MIN_HASH_MASK;
if (size) {
if (size)
for (i = 0; i < coeff; i++, num_nodes++)
if (setup_node_range(num_nodes, nodes,
&addr, size, max_addr) < 0)
goto done;
coeff = 1;
}
if (!*cmdline)
break;
coeff_flag = 0;
coeff = -1;
}
if (!*cmdline)
break;
num = 0;
}
done:
if (!num_nodes)
return -1;
/* Fill remainder of system RAM, if appropriate. */
if (addr < max_addr) {
if (coeff_flag && coeff < 0) {
/* Split remaining nodes into num-sized chunks */
num_nodes += split_nodes_by_size(nodes, &addr, max_addr,
num_nodes, num);
goto out;
}
switch (*(cmdline - 1)) {
case '*':
/* Split remaining nodes into coeff chunks */
Expand Down

0 comments on commit 89d6c26

Please sign in to comment.