On Wed, Mar 3, 2010 at 9:14 AM, David Rientjes <rientjes@xxxxxxxxxx> wrote: > On Tue, 2 Mar 2010, Minchan Kim wrote: > >> > Why do you reset nice value which set by set_kswapd_nice? >> >> My point is that you reset nice value(which is boosted at wakeup_kswapd) to 0 >> before calling balance_pgdat. It means kswapd could be rescheduled by nice 0 >> before really reclaim happens by balance_pgdat. > > wakeup_kswapd() wakes up kswapd at the finish_wait() point so that it has > the nice value set by set_kswapd_nice() when it calls balance_pgdat(), > loops, and then sets it back to the default nice level of 0. I can't understand your point. Now kswapd is working following as. for (; ;) { prepare_to_wait(); if ( ... ) { ... ... schedule() < --- wakeup point ... set_user_nice(tsk, 0); <-- You reset nice value to zero. order = pgdata->kswapd_max_order; } finish_wait(); balance_pgdat(); << before entering balance_pgdat, the nice vaule will be invalidated. } As above code, wakeup_kswapd() wakes up kswapd at not finish_wait but next line of schedule(). So I think nice vaule promoted by wakeup_kswapd would be invalidated. -- Kind regards, Minchan Kim -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>