Skip to the content.

ttwu

经典路线

@[
    resched_curr+5
    enqueue_task_fair+563
    enqueue_task+55
    ttwu_do_activate+111
    try_to_wake_up+713
    hrtimer_wakeup+34
    __hrtimer_run_queues+332
    hrtimer_interrupt+255
    __sysvec_apic_timer_interrupt+82
    sysvec_apic_timer_interrupt+110
    asm_sysvec_apic_timer_interrupt+26
    cpuidle_enter_state+220
    cpuidle_enter+45
    do_idle+459
    cpu_startup_entry+41
    start_secondary+291
    common_startup_64+318
]: 884

在一个 waitq 的唤醒:

实现细节

ipi

请求者,添加任务到队列中

@[
    smp_call_function_many_cond+1
    on_each_cpu_cond_mask+64
    flush_tlb_mm_range+392
    ptep_clear_flush+101
    do_wp_page+942
    __handle_mm_fault+2859
    handle_mm_fault+383
    do_user_addr_fault+380
    exc_page_fault+130
    asm_exc_page_fault+38
]: 3

static DEFINE_PER_CPU_SHARED_ALIGNED(struct llist_head, call_single_queue);

然后接受者收到中断,来进行切换:

@[
    resched_curr+5
    enqueue_task_fair+559
    enqueue_task+55
    ttwu_do_activate+111
    sched_ttwu_pending+245
    __flush_smp_call_function_queue+320
    __sysvec_call_function_single+28
    sysvec_call_function_single+110
    asm_sysvec_call_function_single+26
    finish_task_switch.isra.0+161
    __schedule+940
    schedule_idle+35
    cpu_startup_entry+41
    start_secondary+286
    common_startup_64+318
]: 1366

TODO

  1. 那么 kernel/trace/trace_sched_wakeup.c 是做什么的?

本站所有文章转发 CSDN 将按侵权追究法律责任,其它情况随意。