1

タスクの移行によるオーバーヘッドを測定しようとしています。オーバーヘッドによって、そのようなアクティビティに関連するレイテンシを測定したいと思います。コアごとに個別の実行キューが利用可能であり、カーネルは実行キューを定期的にチェックして、不均衡があるかどうかを確認し、移行を行うカーネル スレッド (おそらくより高い優先度) を起動します。

この値を測定するためにタイム スタンプを挿入できるカーネル ソース コードへのポインタを教えてもらえますか?

このようなオーバーヘッドを得るためにおそらく調査する他のパフォーマンスメトリックはありますか?

4

1 に答える 1

0

このトピックについて議論した前の投稿があり、誰かがシステムのオーバーヘッドを取得する方法についていくつかのコードを投稿したことを覚えています。

タイムスタンプを挿入するためのコードを追加したいのですが、タスクのスケジュールが非常に頻繁であるため、実行可能だと思いますか? 前に投稿したトピックをフォローできると思います。

投稿からソースコードを保存したことがあります。作者に感謝します!

double getCurrentValue() {
    double percent;
    FILE* file;
    unsigned long long totalUser, totalUserLow, totalSys, totalIdle, total;

    file = fopen("/proc/stat", "r");
    fscanf(file, "cpu %Ld %Ld %Ld %Ld", &totalUser, &totalUserLow,
        &totalSys, &totalIdle);
    fclose(file);

    if (totalUser < lastTotalUser || totalUserLow < lastTotalUserLow ||
        totalSys < lastTotalSys || totalIdle < lastTotalIdle) {
        //Overflow detection. Just skip this value.
        percent = -1.0;
    }
    else {
        total = (totalUser - lastTotalUser) + (totalUserLow - lastTotalUserLow) +
            (totalSys - lastTotalSys);
        percent = total;
        total += (totalIdle - lastTotalIdle);
        percent /= total;
        percent *= 100;
    }

    lastTotalUser = totalUser;
    lastTotalUserLow = totalUserLow;
    lastTotalSys = totalSys;
    lastTotalIdle = totalIdle;

    return percent;
}
于 2013-03-05T03:26:38.417 に答える