Ampere System Performance 분석 : 10 가지 주요 질문과 답변
(이 기사는 원래 Ampere Computing에서 출판 됨)
응용 프로그램은 새로운 클라우드 인스턴스 또는 서버 (또는 SUT, 테스트중인 시스템)에서 실행되거나 성능 문제를 찾거나 사용 가능한 시스템 리소스에서 최적의 성능을 보장하려고합니다. 이 기사에서는 요청해야 할 몇 가지 기본 질문과 답변 방법에 대해 설명합니다.
전제 조건 : 가상 머신 또는 서버를 이해하십시오
문제 해결 또는 성능 분석 연습을 시작하기 전에 사용 가능한 시스템 리소스를 알아야합니다. 시스템 수준 성능은 일반적으로 4 가지 구성 요소와 그 상호 작용 (CPU, 메모리, 네트워크 및 디스크)으로 요약됩니다. Brendan Gregg의 훌륭한 기사 "Linux Performance Analysis : 60000 밀리 초 빠른 결과 가이드", 성능 문제를 신속하게 평가하기위한 훌륭한 출발점을 참조하십시오.
이 기사에서는 성능 문제를 더 깊이 이해하는 방법을 설명합니다.
CPU 유형을 확인하십시오
CPU 유형, CPU 주파수, 코어 수 및 기타 CPU 관련 정보를 표시하는 명령을 실행하십시오.
메모리 구성을 확인하십시오
명령을 실행하면 물리적 메모리 및 총 스왑 메모리 양에 대한 정보 (메모리 활용의 고장 포함)에 대한 정보를 제공합니다. Multichase 벤치 마크를 실행하여 대기 시간, 메모리 대역폭 및로드 대기 시간을 결정하십시오.
네트워크 기능 평가
NIC 카드 하드웨어 설정에 대한 정보를 제공 할 명령을 실행하십시오. 또한 네트워크 장치 드라이버 및 하드웨어 설정을 제어하는 데 사용됩니다. 클라이언트 서버 모델에서 워크로드를 실행하는 경우 클라이언트와 서버 간의 대역폭과 대기 시간을 이해하는 것이 가장 좋습니다. 대역폭을 결정하기 위해 간단한 IPERF3 테스트가 충분하며 대기 시간을 위해 간단한 핑 테스트 가이 값을 제공 할 수 있습니다. 클라이언트-서버 설정에서 네트워크 홉 수를 최소로 유지하는 것이 좋습니다. Traceroute는 라우팅을 표시하고 네트워크 전체의 패킷의 전송 지연을 측정하는 네트워크 진단 명령입니다.
스토리지 인프라를 이해하십시오
워크로드를 실행하기 전에 디스크 기능을 이해하는 것이 중요합니다. 디스크 및 파일 시스템의 처리량과 대기 시간을 이해하면 워크로드를 효율적으로 계획하고 설계하는 데 도움이됩니다. Flexible I/O (또는 "FIO")는 이러한 값을 결정하는 데 이상적인 도구입니다.
이제 상위 10 개 질문을 입력하십시오
> 1. 내 CPU가 양호한 상태입니까? $lscpu
총 소유 비용의 주요 구성 요소 중 하나는 CPU입니다. 따라서 CPU 사용의 효율성을 이해하는 것이 좋습니다. 유휴 CPU는 일반적으로 디스크 또는 네트워크 액세스 대기와 같은 외부 종속성이 있음을 의미합니다. 항상 CPU 사용률을 모니터링하고 핵심 사용법이 균일한지 확인하는 것이 좋습니다.
다음 이미지는 <code>ampere@colo1:~$ lscpu
Architecture: aarch64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 160
On-line CPU(s) list: 0-159
Thread(s) per core: 1
Core(s) per socket: 80
Socket(s): 2
NUMA node(s): 2
Vendor ID: ARM
Model: 1
Model name: Neoverse-N1
Stepping: r3p1
CPU max MHz: 3000.0000
CPU min MHz: 1000.0000
BogoMIPS: 50.00
L1d cache: 10 MiB
L1i cache: 10 MiB
L2 cache: 160 MiB
NUMA node0 CPU(s): 0-79
NUMA node1 CPU(s): 80-159
Vulnerability Itlb multibit: Not affected
Vulnerability L1tf: Not affected
Vulnerability Mds: Not affected
Vulnerability Meltdown: Not affected
Vulnerability Mmio stale data: Not affected
Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1: Mitigation; __user pointer sanitization
Vulnerability Spectre v2: Mitigation; CSV2, BHB
Vulnerability Srbds: Not affected
Vulnerability Tsx async abort: Not affected
Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid
asimdrdm lrcpc dcpop asimddp ssbs </code>
로그인 후 복사
로그인 후 복사
명령의 예제 출력을 보여줍니다.
> 2. 내 CPU가 가능한 가장 높은 주파수로 달리고 있습니까?
최신 CPU는 P 상태를 사용하여 더 높은 주파수가 필요하지 않을 때 CPU 전력 소비를 줄이기 위해 작동 주파수와 전압을 조정합니다. 이를 동적 전압 및 주파수 스케일링 (DVF)이라고하며 운영 체제에서 관리합니다. Linux에서 P 상태는 CPUFREQ 서브 시스템에 의해 관리되며 CPU 실행 빈도를 결정하기 위해 다른 알고리즘 (레귤레이터)을 사용합니다. 일반적으로 성능에 민감한 응용 프로그램의 경우 성능 조정기를 사용하는 것이 가장 좋습니다. 다음 명령은 CPUPOWER 유틸리티를 사용하여이를 달성합니다. CPU의 주파수 활용은 실행되어야한다는 점을 기억하십시오.
응용 프로그램을 실행할 때 CPU의 주파수를 확인하려면 다음 명령을 실행하십시오.
> 3. 응용 프로그램에서 내 시간을 커널 시간과 비교하는 방법은 무엇입니까?
때때로 CPU 시간의 백분율이 사용자 공간에서 또는 특권 시간 (예 : 커널 공간)에서 소비되는지 여부를 찾아야합니다. 커널 시간이 높을수록 특정 범주의 워크로드 (예 : 네트워크 바인딩 워크로드)에 대해 합리적이지만 문제가 발생할 수도 있습니다.
Linux 애플리케이션 상단을 사용하여 아래와 같이 사용자와 커널 시간이 얼마나 오래 소비되는지 확인할 수 있습니다. <code>ampere@colo1:~$ lscpu
Architecture: aarch64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 160
On-line CPU(s) list: 0-159
Thread(s) per core: 1
Core(s) per socket: 80
Socket(s): 2
NUMA node(s): 2
Vendor ID: ARM
Model: 1
Model name: Neoverse-N1
Stepping: r3p1
CPU max MHz: 3000.0000
CPU min MHz: 1000.0000
BogoMIPS: 50.00
L1d cache: 10 MiB
L1i cache: 10 MiB
L2 cache: 160 MiB
NUMA node0 CPU(s): 0-79
NUMA node1 CPU(s): 80-159
Vulnerability Itlb multibit: Not affected
Vulnerability L1tf: Not affected
Vulnerability Mds: Not affected
Vulnerability Meltdown: Not affected
Vulnerability Mmio stale data: Not affected
Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1: Mitigation; __user pointer sanitization
Vulnerability Spectre v2: Mitigation; CSV2, BHB
Vulnerability Srbds: Not affected
Vulnerability Tsx async abort: Not affected
Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid
asimdrdm lrcpc dcpop asimddp ssbs </code>
로그인 후 복사
로그인 후 복사
- 각 CPU의 통계를 확인하고 개별 핫스팟/바쁜 CPU를 점검하십시오. 이것은 각 CPU에 대한 통계를보고하는 멀티 프로세서 통계 도구입니다 (-P 옵션)
<code>ampere@colo1:~$ free
total used free shared buff/cache available
Mem: 130256992 3422844 120742736 4208 6091412 125852984
Swap: 8388604 0 8388604
</code>
로그인 후 복사
<: :> CPU : 논리 CPU ID 또는 모든 CPU에 대한 요약 정보
<:> %usr : 사용자 시간, %nice 제외
우선 순위가 낮은 프로세스의 사용자 시간
<:>%sys : 시스템 시간
%iowait : io 대기
<:>%IRQ : 하드웨어 인터럽트 CPU 사용량
%소프트 : 소프트웨어 인터럽트 CPU 사용량
<:>%도둑질 : 다른 임차인에게 서비스를 제공하는 데 사용되는 시간
%게스트 : 클라이언트 가상 머신에서 소비 된 CPU 시간
최
<: :>%유휴 : 자유 시간
각 CPU에 대한 CPU 사용량을 식별하고 사용자 시간/코어 시간 비율, %USR, %SYS 및 %유휴 상태를 표시하는 것이 핵심 값입니다. 이러한 주요 값은 또한 단일 스레드 애플리케이션 또는 인터럽트 매핑으로 인해 발생할 수있는 "핫스팟"CPU를 식별하는 데 도움이 될 수 있습니다.
> 4. 내 응용 프로그램에 충분한 메모리가 있습니까?
서버를 관리 할 때 새 응용 프로그램을 설치해야 할 수도 있고 응용 프로그램이 속도가 느려지기 시작했을 수도 있습니다. 시스템 리소스를 관리하고 시스템이 설치 한 시스템 메모리 및 시스템 메모리 활용을 이해하기 위해 명령은 귀중한 도구입니다. 는 특히 가상 메모리와 메모리를 적극적으로 교환하는 경우 메모리 활용을 모니터링하는 데 유용한 도구입니다. -
-
. Linux free
명령에는 메모리 및 교환 통계가 표시됩니다. free
출력은 전체 메모리, 중고 메모리 및 시스템의 사용 가능한 메모리를 표시합니다. 중요한 열은 사용 가능한 값으로, 응용 프로그램에 사용 가능한 메모리를 보여주고 교체해야합니다. 또한 즉시 재활용 할 수없는 메모리를 고려합니다.
. 이 명령은 현재 사용 가능한 메모리 및 페이징 통계를 포함하여 시스템 메모리, 건강에 대한 높은 수준의 관점을 제공합니다.
- 명령은 활성 메모리가 스왑되는 (페이징)를 표시합니다.
vmstat
$vmstat
이 명령은 현재 상태에 대한 요약을 인쇄합니다. 열은 킬로 바이트로 기본적으로 다음과 같습니다
<: :> swpd : 교환 된 메모리의 양
무료 : 사용 가능한 메모리
버프 : 버퍼 캐시의 메모리
캐시 : 페이지 캐시의 메모리
si : 메모리에 교환 (페이징)
so : 메모리 교체 (페이징)
SI가 0이 아닌 경우 시스템은 메모리 압력을 받고 메모리를 스왑 장치로 바꾸고 있습니다.
> 5. 충분한 메모리 대역폭을 받고 있습니까?
충분한 메모리 대역폭을 이해하기 위해 먼저 시스템의 "최대 메모리 대역폭"값을 얻으십시오. "최대 메모리 대역폭"값은 다음과 같은 방법으로 찾을 수 있습니다.
기본 드라마 클록 주파수
클럭 당 데이터 전송 수 : "이중 데이터 속도"(DDR*) 메모리가 사용되는 경우 두 번
메모리 버스 (인터페이스) 너비 : 예를 들어, DDR 3의 너비는 64 비트 (행이라고도 함) 입니다.
인터페이스 수 : 현대의 개인용 컴퓨터는 일반적으로 두 개의 메모리 인터페이스 (듀얼 채널 모드)를 사용하여 효과적인 128 비트 버스 너비를 달성합니다.
최대 메모리 대역폭 = 기본 드라마 클록 주파수 * 클럭 당 데이터 전송 횟수 * 메모리 참조 너비 * 인터페이스 수 -
이 값은 "버스트 속도"라고도하는 시스템의 이론적 최대 대역폭을 나타냅니다. 이제 시스템에서 Multichase 또는 대역폭 벤치 마크를 실행하고 이러한 값을 확인할 수 있습니다. -
참고 : 버스트 속도는 지속 불가능한 것으로 밝혀졌으며 구현 된 값은 계산 된 값보다 약간 작을 수 있습니다. -
> 6. 내 워크로드는 모든 CPU를 균형 잡힌 방식으로 사용합니까?
성능 튜닝 또는 문제 해결의 일환으로 서버에서 워크로드를 실행할 때 현재 특정 프로세스의 CPU 핵심과 현재 CPU 코어에서 실행되는 프로세스의 리소스 활용 방법을 알고 싶을 수 있습니다. 첫 번째 단계는 CPU 코어에서 실행되는 프로세스를 찾는 것입니다. 이것은 HTOP을 사용하여 수행 할 수 있습니다. CPU 값은 HTOP의 기본 표시에 반영되지 않습니다. CPU 코어 값을 얻으려면 명령 줄에서 - 를 시작하려면 f2
키를 누르고 열로 이동하여 사용 가능한 열 아래에 프로세서를 추가하십시오. 현재 각 프로세스에서 사용하는 "CPU ID"는 "CPU"열에 나타납니다. -
-
cpu/core를 표시하려면
를 구성하는 방법 :
$htop
Core 4-6 표시 최대 값에 도달하기위한 명령 (HTOP Core Count는 "0"대신 "1"에서 시작) :
-
선택한 통계 코어 확인을위한 명령 : $htop
CPU 코어를 식별 한 후에는
명령을 실행하여 각 CPU의 통계를 확인하고 개별 핫스팟/바쁜 CPU를 확인할 수 있습니다. 이것은 각 CPU (또는 코어)에 대한 통계를보고하는 멀티 프로세서 통계 도구입니다. 에 대한 자세한 내용은 "커널 시간과 비교하여 응용 프로그램에서 시간을 보내는 방법"을 참조하십시오. -
is> 7. 내 네트워크가 내 응용 프로그램에 대한 병목 현상입니까?
네트워크 병목 현상은 서버의 다른 리소스를 포화시키기 전에도 발생할 수 있습니다. 이 문제는 클라이언트 서버 모델에서 워크로드를 실행할 때 발견됩니다. 가장 먼저해야 할 일은 네트워크의 모습을 결정하는 것입니다. 클라이언트와 서버 간의 대기 시간 및 대역폭이 특히 중요합니다. IPERF3, PING 및 TRACEROUTE와 같은 도구는 네트워크의 한계를 결정하는 데 도움이되는 간단한 도구입니다. 네트워크 제한이 식별되면 및 $mpstat
와 같은 도구를 사용하면 네트워크 활용을 모니터링하고 네트워크로 인한 시스템 병목 현상을 식별하는 데 도움이됩니다.
. 이 명령은 CPU 통계, 디스크 통계, 네트워크 통계, 페이징 통계 및 시스템 통계를 포함한 시스템 리소스를 모니터링하는 데 사용됩니다. 네트워크 활용을 모니터링하려면 -n 옵션을 사용하십시오.
이 명령은 시스템에서 수신하고 보낸 패킷의 처리량을 제공합니다. $mpstat
$mpstat
. 이 명령은 처리량 및 활용을 포함한 네트워크 인터페이스 통계를 인쇄합니다.
$dstat
$nicstat
<:> 열에는 다음이 포함됩니다
int : 인터페이스 이름 -
<:>%util : 최대 활용
SAT : 인터페이스 포화 통계를 반영하는 값 -
value 접두사 "r"= 읽기/수신
값 접두사 "w"= 쓰기/전송
1- kb/s : 초당 킬로바이트
2- PK/S : 초당 패킷
-
> 8. 내 디스크는 병목 현상입니까?
네트워크와 마찬가지로 디스크는 애플리케이션 성능 저하의 원인이 될 수 있습니다. 디스크 성능을 측정 할 때 다음 메트릭을 살펴 봅니다.
-
활용률
포화
iops (초당 입력/출력)
- 처리량
응답 시간
좋은 규칙은 응용 프로그램의 서버/인스턴스를 선택할 때 먼저 디스크의 I/O 성능을 벤치마킹하여 디스크 성능의 피크 또는 "상한"을 얻을 수 있도록해야합니다. 성능이 응용 프로그램의 요구를 충족하는지 디스크. Flexible I/O는 이러한 값을 결정하기위한 이상적인 도구입니다. -
응용 프로그램이 실행 된 후 가 실행되면 및
를 사용하여 디스크 리소스 활용을 실시간으로 모니터링 할 수 있습니다. -
명령은 각 디스크에 대한 I/O 통계를 표시하여 워크로드 특성화, 활용 및 채도에 대한 메트릭을 제공합니다.
첫 번째 줄 출력은 커널 버전, 호스트 이름, 데이터 아키텍처 및 CPU 카운트를 포함한 시스템의 요약을 표시합니다. 두 번째 줄은 시작 이후 시스템의 CPU 요약을 보여줍니다.
다음 행에 표시된 각 디스크 장치의 경우 는 열에 기본 세부 사항이 표시됩니다.
TPS : 초당 트랜잭션 수
KB_READ/S : 초당 킬로 바이트의 수
KB_WRTN/S : 킬로바이츠는 초당 작성 입니다
KB_READ : 총 킬로바이트의 총 수
KB_WRITE :
명령은 CPU 통계, 디스크 통계, 네트워크 통계, 페이징 통계 및 시스템 통계를 포함한 시스템 리소스를 모니터링하는 데 사용됩니다. 디스크 사용을 모니터하려면 -d 옵션을 사용하십시오. 이 옵션은 디스크에 총 읽기 (읽기) 및 쓰기 (WRIT) 작업 수를 표시합니다. -
다음 이미지는 쓰기 집약적 인 워크로드를 보여줍니다.
-
NUMA 성능 손실 비용을 지불하고 있습니까? -
비 일관된 메모리 액세스 (NUMA)는 멀티 프로세싱을위한 컴퓨터 메모리 설계이며, 메모리 액세스 시간은 프로세서에 대한 메모리 위치에 따라 다릅니다. NUMA에서 프로세서는 비 로컬 메모리 (프로세서간에 공유되는 다른 프로세서 또는 메모리의 로컬 메모리)보다 자체 로컬 메모리에 더 빨리 액세스 할 수 있습니다. NUMA의 이점은 특히 특정 작업이나 사용자와 밀접한 관련이있는 서버에서 워크로드, 특히 서버에서 제한됩니다.
NUMA 시스템의 경우 프로세서와 메모리 뱅크 사이의 거리가 클수록 프로세서가 해당 메모리 뱅크에 액세스 할 수 있습니다. 성능에 민감한 응용 프로그램의 경우 시스템 운영 체제는 가장 가까운 메모리 뱅크에서 메모리를 할당해야합니다. 시스템 또는 프로세스의 메모리 할당을 실시간으로 모니터링하려면 가 훌륭한 도구입니다. $numastat
명령은 비 일관된 메모리 액세스 (NUMA) 시스템에 대한 통계를 제공합니다. 이 시스템은 일반적으로 여러 CPU 슬롯이있는 시스템입니다.
numastat
Linux 운영 체제는 가장 가까운 NUMA 노드에 메모리를 할당하려고 시도하고 는 메모리 할당에 대한 현재 통계를 표시합니다.
numa_hit : 예상되지 않은 Numa 노드 에 메모리를 할당하십시오
numa_miss : 다른 곳에 있어야하는 로컬 할당을 표시하십시오
numa_foreign : 로컬로 할당 해야하는 원격 할당을 표시
Other_Node :이 노드에 메모리를 할당하고 프로세스는 다른 곳에서 실행됩니다
numa_miss 및 numa_foreign 둘 다 선호하는 numa 노드에 메모리 할당이 표시됩니다. 이상적으로는 NUMA_MISS 및 NUMA_FOREIGN의 값은 메모리 I/O 성능이 불량 할 수 있으므로 최소한으로 유지해야합니다. $numastat
명령은 프로세스의 NUMA 분포를 보는 데 사용될 수도 있습니다.
-
> 10. 응용 프로그램을 실행할 때 CPU는 무엇을하고 있습니까? -
시스템/인스턴스에서 응용 프로그램을 실행할 때 응용 프로그램이 수행하는 작업과 응용 프로그램이 CPU에서 사용하는 리소스를 이해하는 데 관심이 있습니다. 는 시스템에서 실행되는 각 개별 프로세스를 모니터링하는 명령 줄 도구입니다.
- 주요 CPU 사용자는 사용자 시간과 시스템 시간으로 분류됩니다.
이 Linux 도구는 사용자 시간 및 시스템 시간을 포함하여 프로세스 또는 스레드별로 CPU 사용을 분해합니다. 이 명령은 프로세스 (-d 옵션)에 대한 IO 통계를보고 할 수도 있습니다. -
uid : 모니터링되는 작업의 실제 사용자 ID 번호
PID : 모니터링중인 작업의 식별 번호
<: : cpu>
%대기 : 작업이 실행되기를 기다릴 때 사용되는 CPU의 백분율
%CPU : 작업에서 사용하는 CPU 시간의 총 백분율. $numastat -p <process></process>
<: :> CPU : 작업이 첨부 된 프로세서/코어 번호
특정 프로세스에 대한 데이터를 수집하기 위해
를 실행할 수도 있습니다.
파트너십을 위해 전문가 영업 팀에 문의하거나 개발자 액세스 프로그램을 통해 Ampere 시스템에 액세스하는 방법을 배우십시오.
위 내용은 Ampere Altra 기반 인스턴스에서 실행할 때 10 가지 주요 질문의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!