try_to_wake_up() はどこでタスクを CPU 実行キューに追加しますか?

user49404

私はLinux カーネルの try_to_wake_up() 関数をもう少しよく理解しようとしてきました。概念的には、プロセスをウェイクアップするには、プロセスを CPU ランキューに追加する必要があると (考えています)、これがどこで発生しているのかを理解するのに苦労しています。

    //try_to_wake_up()

    if (p == current) {
        /* I omitted some comments here*/

        success = 1;
        cpu = task_cpu(p);        //task_cpu(p) returns READ_ONCE(p->cpu);
        trace_sched_waking(p);    //This is just a logging call
        p->state = TASK_RUNNING; 
        trace_sched_wakeup(p);    //Another logging call
        goto out;
    }

したがって、task_cpu()は CPU ランキューをまったく変更していないように見えるので、ttwu_stat() を呼び出しているラベルを調べることにしました

/*I omitted some intermediate code here*/
out:
    if (success)
        ttwu_stat(p, cpu, wake_flags);
    preempt_enable();

    return success;

しかし、次にttwu_stat() を見てみると、入力引数をインクリメントするだけのこの__schedstat_incマクロへの呼び出しの束のように見えます。

それでは...実際に task_struct* p を CPU 実行キューに追加する場所はどこですか?

どんな考えでも感謝します。

ありがとう。

スティーブン・キット

あなたが引用したコード ブロックは、省略されたコメントで説明されているように、特殊なケースです。

         * We're waking current, this means 'p->on_rq' and 'task_cpu(p)
         * == smp_processor_id()'. Together this means we can special
         * case the whole 'p->on_rq && ttwu_remote()' case below
         * without taking any locks.

ウェイクアップするタスクは現在のタスクであるため、すでに実行キュー ( p->on_rq) にあるため、追加する必要はありません。

実行キューへのタスクの追加は、さらに下で処理されます。

    cpu = select_task_rq(p, p->wake_cpu, SD_BALANCE_WAKE, wake_flags);

これにより、タスクが実行キューに追加され、スケジュールされている CPU が返されるため、必要に応じて移行を処理できます。

#ifdef CONFIG_SMP条件のメリットは、いくつかの説明は:SMPがサポートされていない場合は、複数のタスクをすることはできません同時に実行し、我々は現在のタスクを目覚めていない知っているので、対処する唯一のシナリオは、I / O待ちです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

DataprocでのSpark:CPUごとにより多くのエグゼキューターを実行することは可能ですか?

分類Dev

CPUでTensorflowベンチマークを実行しますか?

分類Dev

CPUがコア間でベクトルレジスタを共有していること、または各コアにプライベートレジスタがあることをどのように知ることができますか

分類Dev

async voidを使用して、特定の遅延後にCPUを消費しないタスクを実行するのは良いことですか?

分類Dev

CPUは、どのデータをどのメモリ(RAM、キャッシュ、レジスタ)に入れるかをどのように決定しますか?

分類Dev

Intel 8086 CPUのスタックの最下部はどこにありますか?

分類Dev

CPUは64ビットモードでどのように追加のレジスタを持つことができますか?

分類Dev

GoogleMaps SDK for iOS - SWIFT 3: マーカーを非表示にしてからマップ ビューを追加し直すと、CPU が 100% でスタックします。

分類Dev

同じCPUで実行されているデバッガーを使用してCPUレジスターを読み取ることはどのように可能ですか?

分類Dev

投機的に実行されたCPUブランチには、RAMにアクセスするオペコードを含めることができますか?

分類Dev

CPUリソースを共有してPHPスクリプトをより高速に実行するにはどうすればよいですか?

分類Dev

クアッドコアを使用していますが、 `/ proc / cpuinfo`にCPUエントリが1つしかありませんか?SMPは私のコンピューターで実行されていますか?

分類Dev

クアッドコアを使用していますが、 `/ proc / cpuinfo`にCPUエントリが1つしかありませんか?SMPは私のコンピューターで実行されていますか?

分類Dev

CPUにはアキュムレータが必要ですか?

分類Dev

CPUコアはSparkクラスター上で複数のアプリケーションを同時に実行できますか?

分類Dev

CPUを実行していないときにgrepは何をしますか?

分類Dev

topコマンドはCPU使用率のすべてのデータをどこで取得しますか?

分類Dev

CPU内のレジスタは算術演算を実行できますか

分類Dev

サーバーCPUが同じベンチマークスコアのMacbookPro CPUよりも高速なタスクを実行するのはなぜですか?

分類Dev

CPUはCPUサイクルごとに複数のNOPを実行できますか?

分類Dev

アクセスのシーケンスが安全であることがわかっている場合、ミューテックスなしでスレッド/ CPUを同期するにはどうすればよいですか?

分類Dev

並列CPUアーキテクチャでは、分散メモリアーキテクチャのCPUはどのように相互に通信しますか?

分類Dev

JavaでコンピューターのCPU、メモリ、ディスクの使用状況を監視するにはどうすればよいですか?

分類Dev

実行速度が遅く、タスクマネージャーがCPUアクティビティを表示していない場合、コンピューターは何を「実行」していますか?

分類Dev

CPUキャッシュはこれにどのように適合しますか?

分類Dev

プログラムは、実行されるたびに同じCPUレジスタを使用しますか?

分類Dev

CPUはデコード後に命令をどこに保存しますか?

分類Dev

CPUのどこにアセンブリスタックがありますか?

分類Dev

リトルエンディアンCPUアーキテクチャで実行する場合、Javaはエンディアンをどのように処理しますか?

Related 関連記事

  1. 1

    DataprocでのSpark:CPUごとにより多くのエグゼキューターを実行することは可能ですか?

  2. 2

    CPUでTensorflowベンチマークを実行しますか?

  3. 3

    CPUがコア間でベクトルレジスタを共有していること、または各コアにプライベートレジスタがあることをどのように知ることができますか

  4. 4

    async voidを使用して、特定の遅延後にCPUを消費しないタスクを実行するのは良いことですか?

  5. 5

    CPUは、どのデータをどのメモリ(RAM、キャッシュ、レジスタ)に入れるかをどのように決定しますか?

  6. 6

    Intel 8086 CPUのスタックの最下部はどこにありますか?

  7. 7

    CPUは64ビットモードでどのように追加のレジスタを持つことができますか?

  8. 8

    GoogleMaps SDK for iOS - SWIFT 3: マーカーを非表示にしてからマップ ビューを追加し直すと、CPU が 100% でスタックします。

  9. 9

    同じCPUで実行されているデバッガーを使用してCPUレジスターを読み取ることはどのように可能ですか?

  10. 10

    投機的に実行されたCPUブランチには、RAMにアクセスするオペコードを含めることができますか?

  11. 11

    CPUリソースを共有してPHPスクリプトをより高速に実行するにはどうすればよいですか?

  12. 12

    クアッドコアを使用していますが、 `/ proc / cpuinfo`にCPUエントリが1つしかありませんか?SMPは私のコンピューターで実行されていますか?

  13. 13

    クアッドコアを使用していますが、 `/ proc / cpuinfo`にCPUエントリが1つしかありませんか?SMPは私のコンピューターで実行されていますか?

  14. 14

    CPUにはアキュムレータが必要ですか?

  15. 15

    CPUコアはSparkクラスター上で複数のアプリケーションを同時に実行できますか?

  16. 16

    CPUを実行していないときにgrepは何をしますか?

  17. 17

    topコマンドはCPU使用率のすべてのデータをどこで取得しますか?

  18. 18

    CPU内のレジスタは算術演算を実行できますか

  19. 19

    サーバーCPUが同じベンチマークスコアのMacbookPro CPUよりも高速なタスクを実行するのはなぜですか?

  20. 20

    CPUはCPUサイクルごとに複数のNOPを実行できますか?

  21. 21

    アクセスのシーケンスが安全であることがわかっている場合、ミューテックスなしでスレッド/ CPUを同期するにはどうすればよいですか?

  22. 22

    並列CPUアーキテクチャでは、分散メモリアーキテクチャのCPUはどのように相互に通信しますか?

  23. 23

    JavaでコンピューターのCPU、メモリ、ディスクの使用状況を監視するにはどうすればよいですか?

  24. 24

    実行速度が遅く、タスクマネージャーがCPUアクティビティを表示していない場合、コンピューターは何を「実行」していますか?

  25. 25

    CPUキャッシュはこれにどのように適合しますか?

  26. 26

    プログラムは、実行されるたびに同じCPUレジスタを使用しますか?

  27. 27

    CPUはデコード後に命令をどこに保存しますか?

  28. 28

    CPUのどこにアセンブリスタックがありますか?

  29. 29

    リトルエンディアンCPUアーキテクチャで実行する場合、Javaはエンディアンをどのように処理しますか?

ホットタグ

アーカイブ