apt-getが100%(CPUまたはディスクまたはネット)を使用しないのはなぜですか?


21

CPU、ディスク、ネットワークのいずれかを100%使用しapt-get ない、あるいはそれに近いものにしないのはなぜですか?遅いシステム(Raspberry Pi 2+)でも、CPU負荷は最大30%です。私はただ、それが人為的に絞られている、それが機能している間に何かを最大化すべきか、それともそれよりも速くそれをすることができると考えています。

編集:パネルのcpu / disk / netモニターとUbuntu MATEのシステムモニターアプリを使用して大まかに測定しています。

私が間違っている理由を説明してください。:-)

更新:更新apt-getを取得する必要があることを理解しています(アップストリーム/プロバイダーの帯域幅によって制限される場合があります)。ただし、「アンパック」などを行うと、CPU使用率は少なくとも(最大値でない場合は)上がるはずです。メインドライブにSSDを使用し、/ tmpにramdiskを使用するかなりまともなホームワークステーションでは、これは当てはまりません。

または、もっと詳しく調べる必要があるかもしれません。


ディスクとネットワークの負荷をどのように測定していますか?
-JigglyNaga

1
ただし、ディスクIOはネットワークIOと同じです。それでもアプリをブロックし、CPUを使用できなくなります。残念ながら、apt-getこれを最適化するのは特に得意ではありません。ダウンロード時にインストールできるので、ダウンロードが完了するまでにほとんどのペイロードがすでにインストールされていると思いますが、残念ながらインストールされていません。いずれの場合でも、スタンドアロンインストールはほとんどの場合、データをディスクに抽出するだけです。これらの操作は本質的にIOにバインドされており、ディスクドライブが読み取りまたは書き込みを完了するのを待つ以外にすべきことは他にありません。
PSkocik

どのようにして30%のCPU負荷値を取得しましたか?
-AL

1
@PSkocik「ダウンロード時にインストールできると思います」apt-getだけでダウンロード、dpkgがインストールされます。また、dpkgはapt-getよりも賢く、大量のパッケージをインストールする必要がありますが、これはapt-getがダウンロードするパッケージとは異なる場合があります。
Braiam

CPUの100%が半ティックにバインドされ、残りの半分が100%IOにバインドされているアプリケーションは、CPUバインドにもIOバインドにも表示されないことに注意してください。
–MSalters

回答:


28

アプリは、CPU バウンドの場合にのみCPUを最大化します。すべてのデータを迅速に取得でき、データを処理するプロセッサが待機している場合、アプリはCPUにバインドされます。

apt-get一方、IOにバインドされています。つまり、データをかなり迅速に処理できますが、データの読み込み(ディスクまたはネットワークから)には時間がかかり、その間、プロセッサは他のプロセスを必要としない場合は他の処理を行うか、アイドル状態になります。

通常、すべてのIOリクエスト(ディスク、ネットワーク)は遅く、アプリケーションスレッドが1つを作成するたびに、カーネルはデータがカーネルにロードされるまでプロセッサからそれを削除します(=これらのIOリクエストはブロッキングリクエストと呼ばれます)。


6
aptコマンド、それは多くのファイルが同期モードで開かれているという事実によって悪化だ、またはシステムクラッシュとして一貫性のある状態でディスク滞在に保証データに要求されているディスクに頻繁に明示的なフラッシュとそうでない深刻な影響を与える可能性があります。実行aptして、コマンドはeatmydataしばしば劇的に低減し、信頼性を犠牲にしてパフォーマンスを向上させることができます(パッケージのインストールの一部がeatmydataの設定を継承しますなどのサービスが開始されていることは言うまでもありません)
ステファンChazelas

その最後の点で笑:)。bugs.debian.org/cgi-bin/bugreport.cgi?bug=578635に2010年のコミット以降、eatmydataの番号はありますか?「ドラマチックに」という言葉がまだ正しいかどうかはわかりません。
sourcejedi

ああ、おそらく(少なくとも一部のクラウドプロバイダーでは)bugs.launchpad.net/cloud-init/+bug/1236531/comments/6
sourcejedi

1
@sourcejedi比較的ハイエンドのSDカード(ただし、ハイエンドのSSDではなくSDカード)を搭載したRaspberry Pi2では、「劇的に」控えめな表現だと思います。フラッシュメディアでのdpkgのパフォーマンスは本当に悪いです。
ジル 'SO-悪であるのをやめる'

1
ディスクIOバウンドの場合、100%のディスク帯域幅を使用していないのはなぜですか?
user253751

15

遅いシステム(Raspberry Pi 2+)でも、CPU負荷は最大30%です。

Raspberry Pi 2+には4つのコアがあります。一部の監視ツールでは、100%の使用率が100%で使用されているすべてのコアに対応します。クアッドコードプロセッサで1つのコアのみを使用する場合、CPU負荷は25%です。あなたが言及する30%のCPU負荷は、いくつかのプロセスが他のコアで実行されている間、ほぼ100%で使用される1つのコアです:

(100% on one core out of 4 = 100 / 4 = 25%) + some processes ≃ 30%

以来apt-get、マルチスレッド化されていない、それはすべてのCPUリソースの25%である、複数のプロセッサを使用することはありません。


Ubuntuを実行している8コア(ハイパースレッディングを備えた4コア)マシンの例を次に示しcat /dev/zero > /dev/nullます。1つのコアを完全に利用する無限のプロセスを作成するために、コマンドで1つのスレッドを起動しました。

のグラフhtopを見ると、平均負荷(Avgバー)は12.7%であり、100%で使用される1つのコアに対応し、すべてのCPUリソースの1/8であることがわかります。

(100% = 100 / 8 = 12.5%) + some background processes ≃ 12.7%.

htop

また、コマンドは、の値があることに注意することが可能100%CPU%、それはしていないコアのすべてに一つのコアに比べてだから、列、これはです。


+1、(100 / nCores)の倍数に近い使用率%は、常にさらなる調査をトリガーします。これは、0 <= the%<= 100 * nCores
underscore_d

/dev/zero > /dev/nullurandomはエントロピープールを使い果たすので、より良い例ではありませんか?
フィリップハグランド

@FilipHaglund cat /dev/zero > /dev/nullでも同じ結果が得られます。そのデバイスは知りませんでした、ありがとう。urandomはエントロピープール使い果たします
-AL

1
プログラムが暗号を使用する場合、安全な暗号化キーを生成するには真にランダムなデータが必要です。コンピューターは、マウスの動きを見ることでエントロピーを生成します。ハードウェア乱数ジェネレーターがありますが、ほとんどのコンピューターにはありません。エントロピーがすべて使い果たされた場合、セキュアなエントロピーを必要とするコードは、さらに生成されるのを待つ必要があります。Urandomは、使用可能な場合は真にランダムなビットを使用し、そうでない場合は安全性の低いランダムビットを返します。
フィリップハグランド

プログラムが暗号を使用する場合ランダムキーの生成中にCPUベンチマークを実行する人はいないと考えても、予防策として回答を更新しました。
-AL

2

実際にIO%を測定していないと思います。Linux IO%ウィジェットは見たことがありません。(私はWindows 10タスクマネージャーにとてもうらやましいです:)。iotopコマンドを使用して確認すると、100%IOが表示されます。

topuser+ system+ 全体で100%を表示する必要iowaitがあります。ALで説明されているように、コアカウントで100%を除算した値topは100%役立つとは言えませんが、学ぶのに非常に便利な万能ツールです。

スループットは最大値よりも低くなります。これは、「ランダムIO」とも呼ばれる多数の小さなファイルを解凍するためです。ディスク同期/キャッシュフラッシュもいくつかありますが、Linuxの2010年以降は、インストールされたパッケージごとにそれらのいくつかしかありません。(以前はファイルごとに1つでした)。


を使用するとiotop --only、この--onlyオプションは実際にI / Oを実行しているプロセスまたはスレッドのみを表示します
-AL

4
iostat、dstat、atop ...は、特権を必要とせずにディスクごとのディスク使用率を表示します。それはあなたが権限を必要とすることをタスク単位の利用のためだ
ステファンChazelas

@StéphaneChazelas絶対に正しい。私が作ろうとしていた(忍者の編集)ポイントは、OPがいくつかのGUIツールに言及しているということです。また、Gnome System Monitorのような私が見た特定のGUIツールは、スループットを表示しますが、IO%は表示しません。
sourcejedi

2

実際、IO /ネットワークリクエストはCPUオペレーションに比べて本当に遅いです。これは、ネットワークカードがデータをフェッチしている間、またはディスクがこのデータを書き込んでいる間、CPUはまったく何もしません(とにかくこのプロセスのために)。

ハードドライブがネットワーク接続よりも高速である場合(おそらく正しい)、受信した以上の書き込みは行われません。

最後に、ネットワークの割合は、接続ではなくネットワークカードの最大使用可能量に対応します。したがって、1Gb / sのネットワークアダプターを使用している可能性がありますが、この帯域幅に達するインターネット接続が存在する可能性はほとんどありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.