2008-12-16 05:13:44

by Miao Xie

[permalink] [raw]
Subject: Why are the pages not migrated to current cpuset after 'memory_migrate' is set true

Hi, Paul

I found the pages that task had allocated to it on nodes in its previous cpuset
were not migrated to the tasks' current cpuset after 'memory_migrate' was set
true. It looks strange for users. Why are the pages not migrated to current
cpuset after 'memory_migrate' is set true?

Step I did
1, allocate pages on cpuset (mems is 0, memory_migrate is 0)
2, change cpuset's mems (mems: 0 -> 1)
3, change cpuset's memory_migrate(memory_migrate: 0 -> 1)

Regards
Miao Xie


2008-12-16 06:30:27

by Daisuke Nishimura

[permalink] [raw]
Subject: Re: Why are the pages not migrated to current cpuset after 'memory_migrate' is set true

Hi.

On Tue, 16 Dec 2008 13:11:57 +0800, Miao Xie <[email protected]> wrote:
> Hi, Paul
>
> I found the pages that task had allocated to it on nodes in its previous cpuset
> were not migrated to the tasks' current cpuset after 'memory_migrate' was set
> true. It looks strange for users. Why are the pages not migrated to current
> cpuset after 'memory_migrate' is set true?
>
I don't know the reason of current behavior, but

> Step I did
> 1, allocate pages on cpuset (mems is 0, memory_migrate is 0)
> 2, change cpuset's mems (mems: 0 -> 1)
> 3, change cpuset's memory_migrate(memory_migrate: 0 -> 1)
>
from/to which node kernel should migrate pages in general ?

Should kernel remember previous value of "mems" ? What if we change "mems"
several times before setting memory_migrate ON ?

IMHO, current behavior is not so strange. All users have to do is
set memory_migrate ON *before* changing "mems" or attaching task
if they want to migrate pages.


Thanks,
Daisuke Nishimura.

2008-12-16 08:25:41

by Paul Menage

[permalink] [raw]
Subject: Re: Why are the pages not migrated to current cpuset after 'memory_migrate' is set true

On Mon, Dec 15, 2008 at 9:11 PM, Miao Xie <[email protected]> wrote:
> I found the pages that task had allocated to it on nodes in its previous cpuset
> were not migrated to the tasks' current cpuset after 'memory_migrate' was set
> true. It looks strange for users. Why are the pages not migrated to current
> cpuset after 'memory_migrate' is set true?
>
> Step I did
> 1, allocate pages on cpuset (mems is 0, memory_migrate is 0)
> 2, change cpuset's mems (mems: 0 -> 1)
> 3, change cpuset's memory_migrate(memory_migrate: 0 -> 1)

As Daisuke says, migration only occurs when the mems file is changed
*after* memory_migrate has been set to 1.

Paul