lkml.org 
[lkml]   [2009]   [Jul]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    SubjectRe: possible migration bug with hotplug cpu
    So, I found the problem.

    These fields are currently not initialized upon fork. I noted that when I
    updated to 2.6.31-rc2; commit 6c594c21fcb02c662f11c97be4d7d2b73060a205 was
    merged into kernel by Ingo (not present yet in 2.6.30), but it only initializes
    nr_migrations. Why the other fields are not initialized to 0? Even when there
    are more processors, these fields may be wrong if not zeroed when a new task
    is started. Below the fast way to fix it. This fixed the counters for me.

    What do you think of creating a struct sched_statistics embedded into
    sched_entity so we coudl memset it to zero all at once? All fields of
    SCHED_STATS piece should be initialized, right?

    Lucas De Marchi


    diff --git a/kernel/sched.c b/kernel/sched.c
    index fd3ac58..b8d75cf 100644
    --- a/kernel/sched.c
    +++ b/kernel/sched.c
    @@ -2572,15 +2572,37 @@ static void __sched_fork(struct task_struct *p)
    p->se.avg_wakeup = sysctl_sched_wakeup_granularity;

    #ifdef CONFIG_SCHEDSTATS
    - p->se.wait_start = 0;
    - p->se.sum_sleep_runtime = 0;
    - p->se.sleep_start = 0;
    - p->se.block_start = 0;
    - p->se.sleep_max = 0;
    - p->se.block_max = 0;
    - p->se.exec_max = 0;
    - p->se.slice_max = 0;
    - p->se.wait_max = 0;
    + p->se.wait_start = 0;
    + p->se.wait_max = 0;
    + p->se.wait_count = 0;
    + p->se.wait_sum = 0;
    +
    + p->se.sleep_start = 0;
    + p->se.sleep_max = 0;
    + p->se.sum_sleep_runtime = 0;
    +
    + p->se.block_start = 0;
    + p->se.block_max = 0;
    + p->se.exec_max = 0;
    + p->se.slice_max = 0;
    +
    + p->se.nr_migrations_cold = 0;
    + p->se.nr_failed_migrations_affine = 0;
    + p->se.nr_failed_migrations_running = 0;
    + p->se.nr_failed_migrations_hot = 0;
    + p->se.nr_forced_migrations = 0;
    + p->se.nr_forced2_migrations = 0;
    +
    + p->se.nr_wakeups = 0;
    + p->se.nr_wakeups_sync = 0;
    + p->se.nr_wakeups_migrate = 0;
    + p->se.nr_wakeups_local = 0;
    + p->se.nr_wakeups_remote = 0;
    + p->se.nr_wakeups_affine = 0;
    + p->se.nr_wakeups_affine_attempts = 0;
    + p->se.nr_wakeups_passive = 0;
    + p->se.nr_wakeups_idle = 0;
    +
    #endif

    INIT_LIST_HEAD(&p->rt.run_list);

    \
     
     \ /
      Last update: 2009-07-09 14:01    [W:0.023 / U:0.088 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site