왜 100 % (CPU 나 디스크 또는 인터넷)을 사용하지 apt-get을합니까?


21

CPU, 디스크 또는 네트워크의 100 %를 사용 하지 apt-get 않는 이유는 무엇 입니까? 느린 시스템 (Raspberry Pi 2+)에서도 최대 30 %의 CPU로드를 얻습니다. 나는 인위적으로 스로틀되고 있거나 작동하는 동안 무언가 를 최대한 활용해야한다고 생각하고 있습니다 .

편집 : 나는 패널의 CPU / 디스크 / 네트워크 모니터와 Ubuntu MATE의 시스템 모니터 앱을 통해 대략 측정하고 있습니다.

내가 왜 틀렸는 지 설명해주세요. :-)

업데이트 : 내가 이해 apt-get필요가 업데이트를 가져 오기 위해 (상류 / 제공자 대역폭에 의해 제한 될 수 있음). 하지만 "풀기"등등 된 후에는, CPU 사용은 최소한한다 올라가 (하지 최대 아웃 경우). 메인 드라이브에 SSD를 사용하고 / tmp에 램 디스크를 사용하는 상당히 괜찮은 홈 워크 스테이션에서는 그렇지 않습니다.

아니면 좀 더 자세히 살펴 봐야 할 수도 있습니다.


디스크 및 네트워크로드를 어떻게 측정합니까?
JigglyNaga

1
디스크 IO는 네트워크 IO와 같습니다. 여전히 앱을 차단하여 CPU를 사용하지 못하게합니다. 아아, apt-get이것을 최적화하는 데 특히 좋지 않습니다. 다운로드가 완료 될 때까지는 대부분의 페이로드가 이미 설치되어 있지만 불행히도 설치되지 않을 수 있습니다. 어쨌든 독립형 설치는 대부분 데이터를 디스크로 추출합니다. 이러한 작업은 IO가 결합 본질적으로, 그리고 할 수 있지만 마무리 읽기 또는 쓰기에 디스크 드라이브에 기다릴 단순히별로 다른있다.
PSkocik

30 % CPU로드 수를 어떻게 얻었 습니까?
AL

1
@PSkocik "다운로드 할 때 설치할 수 있다고 생각합니다"apt-get 다운로드 만하면 dpkg가 설치됩니다. 그리고 dpkg는 apt-get이 패키지를 설치하는 순서에서 apt-get보다 더 똑똑합니다. apt-get이 다운로드하는 것과 같지 않을 수도 있습니다.
Braiam

절반 틱 동안 100 % CPU 바운드, 나머지 절반 동안 100 % IO 바운드 응용 프로그램은 CPU 바운드 또는 IO 바운드가 아닌 것으로 나타납니다.
MSalters

답변:


28

앱이 CPU 바운드 인 경우 앱은 CPU를 최대로 사용합니다 . 앱은 모든 데이터를 빠르게 가져올 수 있고 프로세서가 데이터를 처리하는 것이 대기중인 경우 CPU에 바인딩 됩니다.

apt-get반면에 IO-bound 입니다. 즉, 데이터를 빠르게 처리 할 수 ​​있지만 (디스크 또는 네트워크에서) 데이터를로드하는 데 시간이 걸리며,이 과정에서 프로세서가 다른 작업을 수행하거나 다른 프로세스가 필요하지 않으면 유휴 상태가 될 수 있습니다.

일반적으로 모든 IO 요청 (디스크, 네트워크)은 느리고 응용 프로그램 스레드에서 하나를 만들 때마다 데이터가 커널에로드 될 때까지 (=이 IO 요청을 차단 요청 이라고 함) 커널은 프로세서에서이를 제거합니다 .


6
apt명령을 사용하면 많은 파일이 동기화 모드에서 열려 있거나 디스크의 데이터가 자주 충돌하여 디스크 충돌을 일으켜 시스템 충돌이 심각한 결과를 초래할 수 있기 때문에 디스크의 데이터가 일관된 상태로 유지되도록 요청하기 때문에 더욱 악화됩니다. aptwith 명령을 실행 eatmydata하면 안정성이 떨어지지 만 성능을 크게 향상시킬 수 있습니다 (패키지 설치의 일부로 시작된 서비스가 eatmydata 설정을 상속한다는 점은 말할 것도 없습니다)
Stéphane Chazelas

마지막 시점에서 Lol :). 2010 년에 bugs.debian.org/cgi-bin/bugreport.cgi?bug=578635 커밋 이후 eatmydata에 숫자가 있습니까? "극적으로"가 여전히 올바른 단어인지는 모르겠습니다.
sourcejedi

아, 아마도 (적어도 일부 클라우드 제공 업체에서는) bugs.launchpad.net/cloud-init/+bug/1236531/comments/6
sourcejedi

1
@sourcejedi 상대적으로 고급형 SD 카드 (하지만 여전히 고급형 SSD가 아닌 SD 카드)를 사용하는 Raspberry Pi2에서 나는“극적으로”약간 과소 평가 된 것으로 간주합니다. 플래시 미디어에서 dpkg의 성능은 정말 짜증납니다.
Gilles 'SO- 악마 그만해'

1
디스크 -IO- 바운드 인 경우 100 % 디스크 대역폭을 사용하지 않는 이유는 무엇입니까?
user253751

15

느린 시스템 (Raspberry Pi 2+)에서도 최대 30 %의 CPU로드를 얻습니다.

Raspberry Pi 2+에는 4 개의 코어가 있습니다. 일부 모니터링 도구의 경우 100 % 사용량은 100 %로 사용 된 모든 코어에 해당합니다. 쿼드 코드 프로세서에서 하나의 코어 만 사용하는 경우 CPU로드는 25 %입니다. 언급 한 30 % CPU로드는 일부 프로세스가 다른 코어에서 실행되는 동안 대략 100 %로 사용되는 코어입니다.

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

때문에 apt-get멀티 스레드가 아닌, 모든 CPU 자원의 25 %를 더 이상의 프로세서를 사용하지 않습니다.


다음은 Ubuntu를 실행하는 8 코어 ( Hyper-Threading을 사용하는 4 코어 ) 시스템의 예입니다. 나는 cat /dev/zero > /dev/null하나의 코어를 완전히 활용하는 무한한 프로세스를 만들기 위해 명령으로 하나의 스레드를 시작했습니다 .

의 그래프를 보면 htop평균 부하 ( Avgbar)가 12.7%100 %로 사용 된 하나의 코어에 해당하며 모든 CPU 리소스의 1/8이기도합니다.

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

멈춤

명령 100%CPU%열 값이 있음을 알 수 있습니다. 이는 모든 코어가 아니라 하나의 코어에 상대적이기 때문입니다.


+1, (100 / nCores)의 배수에 가까운 사용량 %는 항상 추가 조사를 트리거해야합니다. 코어 당 사용량을 표시 할 수있는 모니터를 사용하여이를 확인할 수 있으며 실제로 배제 할 수 있습니다. 여기서 0 <= the % <= 100 * nCores
underscore_d

아닌가 /dev/zero > /dev/nullurandom을이 엔트로피 풀을 고갈 때문에 더 좋은 예는?
Filip Haglund

@FilipHaglund cat /dev/zero > /dev/null는 동일한 결과를 제공합니다. 감사합니다. urandom은 엔트로피 풀을 모르는 엔트로피 풀을 고갈시킵니다. 어떻게 문제가 될 수 있습니까?
AL

1
프로그램이 암호화를 사용하는 경우 보안 암호화 키를 생성하려면 실제로 임의의 데이터가 필요합니다. 컴퓨터는 마우스가 다른 것들 사이에서 움직이는 것을 보면서 엔트로피를 생성합니다. 하드웨어 난수 생성기는 있지만 대부분의 컴퓨터에는 생성기가 없습니다. 엔트로피가 모두 소진되면 안전한 엔트로피가 필요한 코드가 더 생성 될 때까지 기다려야합니다. Urandom은 사용 가능한 경우 진정한 임의의 비트를 사용하거나 덜 안전한 임의의 비트를 반환합니다.
Filip Haglund

프로그램이 암호화를 사용하는 경우 임의의 키를 생성하는 동안 아무도 CPU 벤치 마크를 수행하지 않을 것이라고 생각하더라도 예방책으로 답변을 업데이트했습니다.
AL

2

실제로 IO %를 측정하지 않는다고 생각합니다. Linux IO % 위젯을 보지 못했습니다. (저는 Windows 10 작업 관리자를 매우 부러워합니다.) iotop명령을 사용하여 확인하면 100 % IO가 표시됩니다.

topAL에 설명 된대로 100 %를 코어 수로 나눈 값에 대해 user+ system+에 걸쳐 100 %를 표시해야합니다 .100 % 도움이 iowait되지 top는 않지만 실제로 배우는 데 유용한 유용한 도구가 될 수 있습니다.

"무작위 IO"라고하는 많은 작은 파일의 압축을 풀기 때문에 처리량 이 최대 값보다 낮습니다. 디스크 동기화 / 캐시 플러시도 있지만 Linux에서는 2010 년부터 설치된 각 패키지마다 몇 개만 있습니다. ( 파일 당 하나씩 사용됨 ).


옵션을 사용 iotop --only하면 실제로 I / O를 수행하는 프로세스 또는 스레드 만 표시됩니다 . --only
AL

4
iostat, dstat, atop ...은 권한없이 디스크 디스크 사용률을 보여줍니다. 작업 별 활용을 위해 권한이 필요합니다
Stéphane 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.