WindowsでGNUmakeを使用すると、負荷平均値は正確に何を表しますか?
例えば:
make -j --load-average=2.5
2.5はどういう意味ですか?
WindowsでGNUmakeを使用すると、負荷平均値は正確に何を表しますか?
例えば:
make -j --load-average=2.5
2.5はどういう意味ですか?
これは、実行可能なプロセスの数が一定期間の平均で 2.5 を下回るまで、make が新しいスレッドを開始しないことを意味します。
編集、つるの発言に従って
、実行可能なプロセス、Unix の用語では、CPU 時間を待機しているか、すぐに実行されているプロセスです。技術的には、TASK_RUNNING 状態のプロセスです。
しかし...これにより、元の質問を読み直し、その「Windows上」の部分に注意するようになりました....
これにより、私の元の答えは、大まかに言えば、Unixのようなホスト上のGNU Makeに対して正しいです。 Windows では事実です。動作の不一致は、2 つのオペレーティング システムが「現在の」CPU 負荷を表すために非常に異なるメトリックを提供するという事実によるものです。したがって、Make のロジックは、 --load-average 機能を提供するために、これらの CPU 負荷の読み取り値を異なる方法で解釈する必要があります。
このパラメーターの目的は、--load-average
新しいスレッドをいつ開始できるかについて Make にガイダンスを提供することです。これにより、Make は CPU リソースを他のアプリケーション (およびそのアプリケーション内) とよりエレガントに共有できます。
Linux では、このパラメーターのセマンティックはその名前に非常に近いです。新しい Make スレッドは、カーネルによって報告されるload-averageの場合に許可されます (これは「1 分間」の負荷平均であると想定していますが、 5 分の 1) は、パラメーター値よりも小さいです。
Windows では、Make は、CPU 負荷 (GetSystemTimes 関数によって報告される) とメモリ負荷 (たとえば、GlobalMemoryStatusEx 関数から) の加重平均から負荷平均を計算します。
Windows では - どうやら何もありません。これは UNIX 用語です: http://en.wikipedia.org/wiki/Load_%28computing%29
私の Cygwin のコピーは、uptime
コマンドを実行するとゼロ負荷平均を報告します。Windows でこれを簡単に計算する方法はないと思います。過去に Cygwin メーリング リストで質問されました。
つまり、実装されていないため、常にゼロです。
getloadavg
GNU Make 3.81 ソースから直接の の実装を次に示します。
# if !defined (LDAV_DONE) && (defined (__MSDOS__) || defined (WINDOWS32))
# define LDAV_DONE
/* A faithful emulation is going to have to be saved for a rainy day. */
for ( ; elem < nelem; elem++)
{
loadavg[elem] = 0.0;
}
# endif /* __MSDOS__ || WINDOWS32 */
GNU make の新しいバージョンは確認していませんが、変更されているとは思えません。