1

1270v3 とシングル スレッド アプリを使用すると、パフォーマンスが限界に達しますが、top などの監視ツールを見ると、この全体がどのように機能するのか理解できません。この種のトピックに関する素晴らしい記事を見つけようとしましたが、それらは私が理解できない言語で説明されているか、知りたいことに関するものではありません. このようなことはこちらで質問してよろしいでしょうか。

私の理解では、シングル スレッド アプリはすべて/ほとんどの作業で 1 つのスレッドしか使用しません。そのため、パフォーマンスは CPU のシングルスレッド能力によって定義されます。この質問を書く前に、CPU 周波数をいじってみたところ、実行中のアプリのインスタンスは 2 つしかありませんが、使用量はすべてのコアで共有されていることに気付きました。したがって、スレッドはこれらのコアの間を飛び回っていると思います。そこで、CPU スケーリングを でパフォーマンスに設定しましたcpufreq-set -g performance。その結果、永続的に 3.5GHz (100%) になっているものを除いて、すべての CPU コア/スレッドが以前と同じように約 2GHz のままでした。1 つのコアのスケーリングのみを変更したのに、使用量がまだすべてのコアで共有されているのはなぜですか? アプリは約 300% で実行されているということですが、100% で CPU コアに固執しないのはなぜですか?

さらに、CPU の 1 つだけがスケールアップされていることに気付いたので、ヘルプ ページを調べたところ-r、パフォーマンス設定ですべてのコアをスケールする必要があることがわかりました。残念ながら何も変わりません。(これは Ubuntu 1404 のバグですか?) それで-c、番号8(8 スレッド) で使用しました -> 機能しませんでした。4-> 動作しますが、8 コアのうち 2 コアのみをスケーリングします。 7-> 4 コアをスケーリングします。それで、これはハイパースレッディングをサポートしていないのでしょうか、それともプログラム全体にバグがあるのでしょうか?

ただし、私が理解しているように、最大​​周波数の CPU とスレッドは、共有されているように見える平均使用量を表示するため、監視ツールでジャンプします。私はこれを正しく理解しましたか?

1つのCPUを3.5GHzに強制し、アプリをこのコアに強制するとパフォーマンスが向上しますか、それとも毎秒表示されるデータ間の平均計算についてのみ疑問に思っていることです. cpufreq-set -c 7 -g performanceもしそうなら、消費電力が問題にならないのであれば、私はそれで最高に動くべきであるというのは正しいですか?

ここまで読んでくれてありがとう。全体を理解するのに少しお時間をいただければ幸いです。

スクリーンショットの例:

http://i.imgur.com/VFEBvLx.png

http://i.imgur.com/cBKOnJM.png

http://i.imgur.com/bgQfwfU.png

4

1 に答える 1

2

あなたの混乱の多くは、ハードウェアの実際の機能に対する cpufreq の機能のあいまいなマッピングに関係していると思います。

ここでは、HW と OS で何が行われているかについて説明します。

プロセッサは、同じシリコン基板上のコアの集まりです。コアは、いくつかの拡張機能を備えた CPU と呼ばれていたものです。CPU には複数のハードウェア スレッド (ハイパースレッディング) を実行する機能があり、各ハードウェア スレッドは古いタイプの CPU の 1 つと同等です。これらをすべてまとめると、1270v3 はクアッド コア (私の記憶が正しければ) であり、同じシリコン基板上に 4 つのコアがあることを意味します。各コアは 2 つの HW スレッドをサポートできます。各 HW スレッドは、OS が CPU と呼ぶものに相当します (仮想 CPU と呼びます)。したがって、OS の観点から見ると、1270v3 には 8 つの (仮想) CPU があります。

OS は、パッケージ、コア、またはハードウェア スレッドを認識しません。CPU が見え、8 個あるように見えます。

問題をさらに複雑にしているのは、最新のプロセッサには、P ステート、C ステート、およびパッケージ C ステートと呼ばれる省電力ステートをサポートするさまざまな HW があることです。なぜこれらについて言及するのですか?これは、プロセッサの周波数と密接に関連しているからです。また、cpufreq は、ユーザーがプロセッサの周波数を制御できると公言しています。

さて、マンページやウェブ上の他の資料を読む以外に、私は cpufreq に精通していません。読んでみるとかなり特異点が多いので、大局的に何をしているのかをお話しします。

一般的な意味で、cpufreq には、ハードウェアまたはカーネルでサポートされている場合とサポートされていない場合がある多くの汎用機能があります。機能はあるように見えますが、期待どおりに動作しないため、これは混乱を招きます。たとえば、cpufreq は、各 CPU の周波数を個別に設定できるという印象を与えます。実際には、ハイパースレッディング システムでは、2 つの「CPU」が各コアに関連付けられており、周波数が同じでなければなりません。

cpufreq が制御するはずの機能の多くは、プロセッサの電力効率特性に関連付けられていますが、プロセッサの実際のハードウェア機能へのマッピングは不完全で誤解を招くものです。cpufreq では最大周波数と最小周波数を設定できるように見えますが、プロセッサ ハードウェアはこのようには機能しません。1270v3 などの最新の Intel プロセッサには、P ステートと呼ばれるものがあります。これらの P ステートは、アプリケーションの実行に時間がかかるという犠牲を払ってプロセッサの消費電力を削減するために、プロセッサの周波数を遅くする (そして電圧を下げる) 周波数と電圧のペアです。これらの周波数と電圧の組み合わせは恣意的ではありませんが、cpufreq は恣意的であるという印象を与えます。

これはどういう意味ですか?コメンターが言及したスレッド移行の問題に加えて、cpufreq は、実際には持っていない機能を持っているように見えるため、期待どおりに動作しません。また、実際に持っている機能は、実際のハードウェアと OS の機能。

あなたのテキストにさらにいくつかのコメントを埋め込みました。

1270v3 とシングル スレッド アプリを使用すると、パフォーマンスが限界に達しますが、top などの監視ツールを見ると、この全体がどのように機能するのか理解できません。この種のトピックに関する素晴らしい記事を見つけようとしましたが、理解できない言語で説明されているか、知りたいことに関するものではありません。このようなことをここで質問してよろしいかと思います。

私の理解では、シングル スレッド アプリはすべて/ほとんどの作業で 1 つのスレッドしか使用しません。[はい。ただし、これは、スレッドが特定の仮想 CPU またはコアにロックされているという意味ではありません。] したがって、パフォーマンスは、CPU のシングルスレッドの能力によって定義されます。【そんな単純じゃない。OS はスレッドを移行し、独自のメンテナンス プロセスがあります] この質問を書く前に、CPU 周波数をいじってみたところ、実行中のアプリのインスタンスは 2 つしかありませんが、使用法はすべてのコアで共有されていることに気付きました。したがって、スレッドはこれらのコアの間を飛び回っていると思います。そこで、cpufreq-set -g performance で CPU スケーリングをパフォーマンスに設定しました。その結果、永続的に 3.5GHz (100%) になっているものを除いて、すべての CPU コア/スレッドが以前と同じように約 2GHz のままでした。1つのコアのスケーリングを変更しただけなので、使用量がまだすべてのコアで共有されているのはなぜですか? アプリは約 300% で実行されているということですが、100% で CPU コアに固執しないのはなぜですか? [あなたが何を観察しているのか見えないので、あなたが何を求めているのかよくわかりません。]

さらに、CPU の 1 つだけがスケールアップされていることに気付いたので、ヘルプ ページを調べたところ、パフォーマンス設定ですべてのコアをスケールする必要がある -r が見つかりました。残念ながら何も変わりません。(これは Ubuntu 1404 のバグですか?) -c を 8 (8 スレッド) で使用しました -> 機能しませんでした。4 -> 動作しますが、8 コアのうち 2 コアのみをスケーリングします。7 -> 4 コアをスケーリングします。[私は cpufreq を使用していないので、その動作について直接話すことはできませんが、マンページでは、「 -c 」は仮想 CPU の数ではなく、特定の仮想 CPU を参照していることを暗示しています。ハイパースレッディングをサポートしていますか、それともプログラム全体にバグがありますか? [繰り返しますが、あなたの説明からあなたが何をしているのかわかりませんが、n->n/2 の動作は私には理にかなっています。コアの周波数を変更できますが、各コアには 2 つのハイパースレッド/仮想 CPU があるため、

ただし、私が理解しているように、最大​​周波数の CPU とスレッドは、共有されているように見える平均使用量を表示するため、監視ツールでジャンプします。私はこれを正しく理解しましたか?[繰り返しますが、あなたが何を観察しているのかわかりません。物理的にも上部でも、CPU の指定は変更されるべきではありません。つまり、CPU001 は常に同じ仮想 CPU を参照します。ユーザースレッドは可能ですが、最大周波数のコアは物理的に飛び回るべきではありません。注意すべきことは、監視ツールは CPU をかなり頻繁に使用する可能性があるということです。この大量の使用により、スレッドが別の仮想 CPU にジャンプする場合、プロセッサの使用状況を把握することが難しくなる可能性があります。]

1つのCPUを3.5GHzに強制し、アプリをこのコアに強制するとパフォーマンスが向上しますか、それとも毎秒表示されるデータ間の平均計算についてのみ疑問に思っていることです. [たくさんの役立つスクリーン ショットを含むかなり適切な atop の説明を見つけました: http://www.unixmen.com/linux-basics-monitor-system-resources-processes-using-atop/]もしそうなら、消費電力が問題にならないのであれば、cpufreq-set -c 7 -g performance で最適に実行する必要があるというのは正しいですか? [それはすべて、システムで実行されている他のプロセスに依存します。システムがプロセスを除いてほとんどアイドル状態の場合、コアを特定の周波数に強制しても違いはありません。【「知事」が何をするのか疑わしい。この用語は、電力効率/パフォーマンス (「バランス」、「省電力」、「パフォーマンス」など) に言及しているように見えますが、詳細は今日のハードウェアの機能と一致していません。]

ここまで読んでくれてありがとう

于 2014-07-31T00:58:35.003 に答える