web-dev-qa-db-ja.com

apt-getが100%を使用しないのはなぜですか(cpu OR disk OR net))?

どして apt-getnot CPU、ディスク、またはネットワークの100%を使用します-またはそれに近いですか?遅いシステム(Raspberry Pi 2+)でも、CPU負荷は最大で30%です。私はそれが人工的に抑制されているか、それが最大になるはずだと思っています何か動作中...またはそれがそれよりも速くそれができるはずです。

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

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

更新:apt-getは、更新をフェッチする必要があります(アップストリーム/プロバイダーの帯域幅によって制限される場合があります)。しかし、「アンパック」などになると、CPU使用率は少なくともgo up(max outでない場合)になるはずです。メインドライブにSSDを使用し、/ tmpにRAMディスクを使用する、かなりまともなホームワークステーションでは、これは当てはまりません。

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

21
KlaymenDK

アプリがCPU-boundの場合のみ、アプリはCPUを最大にします。アプリはCPU-boundであり、すべてのデータをすばやく取得でき、データを処理するプロセッサが待機している場合です。

一方、apt-getIO-boundです。つまり、データをかなり速く処理できますが、(ディスクまたはネットワークから)データをロードするのに時間がかかります。その間、プロセッサは他の処理を実行したり、他のプロセスが必要としない場合はアイドル状態にしたりできます。

通常、すべてのIOリクエスト(ディスク、ネットワーク)は低速であり、アプリケーションスレッドがリクエストを作成するたびに、データがカーネルにロードされるまで、カーネルはプロセッサから削除します(= these = IO要求は呼び出されますブロッキング要求)。

28
PSkocik

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

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

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

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


これは、Ubuntuを実行している8コア(4コア Hyper-Threading )マシンの例です。1つのコアを使用する無限プロセスを作成するために、cat /dev/zero > /dev/nullコマンドで1つのスレッドを起動しました完全に。

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

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

htop

コマンドの100%列の値がCPU%であることにも注意してください。これは、すべてのコアではなく1つのコアに関連しているためです。

15
A.L

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

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

最後に、ネットワークのパーセンテージは、可能な最大ネットワークcard使用に対応し、接続には対応しません。したがって、1 Gb /秒のネットワークアダプターを使用している場合でも、この帯域幅に到達するインターネット接続はほとんどありません。

2
Aymeric R.

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

topは、user + _system + iowait全体で100%を示す必要があります。ALで説明されているように、コアの数で100%を割った値は、topが100%役立つとは言いませんが、学ぶのに非常に役立つ万能ツールです。

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

2
sourcejedi