컴퓨터 성능

컴퓨팅에서 **컴퓨터 성능**(computer performance)은 컴퓨터 시스템이 수행하는 유용한 작업의 양이다. 특정 컨텍스트를 벗어나 컴퓨터 성능은 컴퓨터 프로그램 명령을 실행하는 정확성, 효율 및 속도 측면에서 추정된다. 높은 컴퓨터 성능에는 다음 요소 중 하나 이상이 포함될 수 있다.

* 주어진 작업에 대한 짧은 응답 시간.
* 높은 처리량 (작업 처리 속도).
* 낮은 컴퓨팅 자원 활용.
** 빠른 (또는 고밀도) 데이터 압축 및 압축 해제.
* 컴퓨팅 시스템 또는 애플리케이션의 고가용성.
* 높은 대역폭.
* 짧은 데이터 전송 시간.

## 기술적 및 비기술적 정의

모든 컴퓨터 시스템의 성능은 위에 나열된 측정항목 중 하나 이상을 사용하여 측정 가능한 기술적 용어로 평가할 수 있다. 이러한 방식으로 성능은 다음과 같이 측정될 수 있다.

* 다른 시스템 또는 변경 전후의 동일 시스템과 비교
* 절대적인 용어로, 예를 들어 계약 의무 이행을 위해

위의 정의가 과학적, 기술적 접근 방식과 관련되어 있는 반면, 아널드 앨런이 제시한 다음 정의는 비기술적 독자에게 유용할 것이다.

컴퓨터 성능이라는 단어는 다른 맥락에서 성능이 의미하는 것과 동일한 의미를 갖는다. 즉, "컴퓨터가 수행해야 할 작업을 얼마나 잘 수행하고 있는가?"를 의미한다.

### 소프트웨어 품질의 한 측면으로서

컴퓨터 소프트웨어 성능, 특히 소프트웨어 애플리케이션 응답 시간은 인간-컴퓨터 상호 작용에 중요한 소프트웨어 품질의 한 측면이다.

## 성능 공학
시스템 공학 내의 성능 공학은 솔루션에 대해 정의된 성능 요구 사항을 충족하도록 솔루션이 설계, 구현 및 운영적으로 지원되도록 보장하는 시스템 개발 수명 주기의 모든 단계에서 적용되는 역할, 기술, 활동, 실무, 도구 및 결과물 집합을 포함한다.

성능 공학은 성능 유형 간의 트레이드오프를 지속적으로 다룬다. 때때로 CPU 설계자는 아래에 제시된 성능 측면 중 하나를 개선하여 다른 영역에서 CPU 성능을 희생하지 않고도 전반적으로 더 나은 성능을 가진 CPU를 만들 수 있는 방법을 찾을 수 있다. 예를 들어, 더 좋고 빠른 트랜지스터로 CPU를 만드는 것이다.

그러나 때로는 한 가지 유형의 성능을 극단으로 밀어붙이면 다른 중요한 측면이 인상적인 숫자 하나를 얻기 위해 희생되어 전반적으로 더 나쁜 성능을 가진 CPU가 탄생하기도 한다. 예를 들어, 칩의 클럭 속도가 그렇다(자세한 내용은 메가헤르츠 신화 참조).

### 애플리케이션 성능 공학

애플리케이션 성능 공학(APE)은 점점 더 분산되는 모바일, 클라우드 및 지상 IT 환경에서 애플리케이션 성능과 관련된 문제를 해결하기 위해 설계된 성능 공학 내의 특정 방법론이다. 여기에는 애플리케이션 수명 주기의 모든 단계에서 적용되는 역할, 기술, 활동, 실무, 도구 및 결과물이 포함되어 애플리케이션이 비기능적 성능 요구 사항을 충족하도록 설계, 구현 및 운영적으로 지원되도록 보장한다.

## 성능의 측면
컴퓨터 성능 측정항목 (측정할 것)에는 가용성, 응답 시간, 채널 용량, 레이턴시, 완료 시간, 서비스 시간, 대역폭, 처리량, 상대 효율, 확장성, 전성비, 압축률, 명령어 경로 길이 및 속도 향상이 포함된다. CPU 벤치마크를 사용할 수 있다.

### 가용성

시스템의 가용성은 일반적으로 신뢰성의 요인으로 측정된다. 신뢰성이 증가할수록 가용성도 증가한다(즉, 다운타임이 감소한다). 시스템의 가용성은 신뢰성보다는 테스트 용이성 및 유지 보수성 향상에 중점을 두는 전략을 통해서도 증가시킬 수 있다. 유지 보수성 향상은 일반적으로 신뢰성 향상보다 쉽다. 유지 보수성 추정치(수리율)도 일반적으로 더 정확하다. 그러나 대부분의 경우 신뢰성 추정치의 불확실성이 매우 크기 때문에 유지 보수 수준이 매우 높더라도 가용성(예측 불확실성) 문제에서 지배적일 가능성이 있다.

### 응답 시간

응답 시간은 서비스 요청에 응답하는 데 걸리는 총 시간이다. 컴퓨팅에서 이 서비스는 간단한 디스크 IO부터 복잡한 웹 페이지 로드에 이르는 모든 작업 단위일 수 있다. 응답 시간은 세 가지 숫자의 합이다.
* 서비스 시간 - 요청된 작업을 수행하는 데 걸리는 시간.
* 대기 시간 - 요청이 실행되기 전에 대기열에 있는 요청을 기다려야 하는 시간.
* 전송 시간 – 요청을 작업을 수행하는 컴퓨터로 이동하고 응답을 요청자에게 다시 보내는 데 걸리는 시간.

### 처리 속도

대부분의 소비자는 미리 컴파일된 소프트웨어의 대규모 기반을 실행할 수 있도록 특정 컴퓨터 아키텍처(일반적으로 인텔 IA-32 아키텍처)를 선택한다. 컴퓨터 벤치마크에 대해 상대적으로 잘 알지 못하는 일부 사용자는 작동 주파수를 기반으로 특정 CPU를 선택한다(자세한 내용은 메가헤르츠 신화 참조).

병렬 컴퓨터를 구축하는 일부 시스템 설계자는 달러당 속도를 기준으로 CPU를 선택한다.

### 채널 용량

채널 용량은 통신 채널을 통해 안정적으로 전송될 수 있는 정보율에 대한 가장 엄격한 상한이다. 잡음 채널 부호화 정리에 따르면, 주어진 채널의 채널 용량은 임의로 작은 오류 확률로 달성될 수 있는 정보율(단위 시간당 정보 단위)을 제한한다.

클로드 섀넌이 제2차 세계 대전 중에 개발한 정보 이론은 채널 용량의 개념을 정의하고 이를 계산할 수 있는 수학적 모델을 제공한다. 핵심 결과는 위에서 정의한 채널의 용량이 채널의 입력과 출력 사이의 상호정보의 최댓값으로 주어지며, 여기서 최댓값은 입력 분포에 대한 것이다.

### 레이턴시

레이턴시는 관찰되는 시스템에서 물리적 변화의 원인과 결과 사이의 시간 지연이다. 레이턴시는 물리적 상호 작용이 일어날 수 있는 제한된 속도의 결과이다. 이 속도는 항상 광속보다 낮거나 같다. 따라서 공간 차원이 0이 아닌 모든 물리적 시스템은 어떤 종류의 레이턴시를 경험하게 된다.

레이턴시의 정확한 정의는 관찰되는 시스템과 자극의 본질에 따라 달라진다. 통신에서 레이턴시의 하한은 통신에 사용되는 매체에 의해 결정된다. 신뢰할 수 있는 양방향 통신 시스템에서 레이턴시는 정보가 한 순간에 "전송 중"인 양에 제한이 있는 경우가 많으므로 정보가 전송될 수 있는 최대 속도를 제한한다. 인간-기계 상호 작용 분야에서 인지할 수 있는 레이턴시(사용자가 명령하는 것과 컴퓨터가 결과를 제공하는 시점 사이의 지연)는 사용자 만족도와 사용성에 강한 영향을 미친다.

컴퓨터는 프로세스라고 불리는 명령어 세트를 실행한다. 운영 체제에서 다른 프로세스도 실행 중인 경우 프로세스의 실행이 연기될 수 있다. 또한 운영 체제는 프로세스가 명령하는 동작을 언제 수행할지 스케줄링할 수 있다. 예를 들어, 프로세스가 컴퓨터 카드의 전압 출력을 1000Hz의 속도로 high-low-high-low 등으로 설정하도록 명령한다고 가정해 보자. 운영 체제는 내부 시계를 기반으로 각 전환(high-low 또는 low-high)의 스케줄링을 조정하도록 선택할 수 있다. 레이턴시는 프로세스 명령이 전환을 명령하는 것과 하드웨어가 실제로 전압을 high에서 low 또는 low에서 high로 전환하는 것 사이의 지연이다.

실시간 컴퓨팅 시스템을 구축하는 시스템 설계자는 최악의 응답을 보장하고자 한다. 이는 CPU의 인터럽트 레이턴시가 낮고 결정론적 응답을 가질 때 더 쉽게 할 수 있다.

### 대역폭

컴퓨터 네트워킹에서 대역폭은 사용 가능한 또는 소비되는 데이터 전송 자원의 비트 전송률을 측정하는 것으로, 초당 비트 또는 그 배수(bit/s, kbit/s, Mbit/s, Gbit/s 등)로 표현된다.

대역폭은 때때로 순 비트 전송률(일명 피크 비트 전송률, 정보 전송률 또는 물리 계층 유효 비트 전송률), 채널 용량 또는 디지털 통신 시스템에서 논리적 또는 물리적 통신 경로의 최대 처리량을 정의한다. 예를 들어, 대역폭 테스트는 컴퓨터 네트워크의 최대 처리량을 측정한다. 이러한 용어 사용의 이유는 하틀리의 법칙에 따라 물리적 통신 링크의 최대 데이터 전송률이 헤르츠 단위의 대역폭에 비례하며, 이를 때때로 주파수 대역폭, 스펙트럼 대역폭, RF 대역폭, 신호 대역폭 또는 아날로그 대역폭이라고 부르기 때문이다.

### 처리량

일반적으로 처리량은 생산율 또는 무언가를 처리할 수 있는 속도를 의미한다.

통신 네트워크에서 처리량은 기본적으로 디지털 대역폭 소비와 동의어이다. 무선망 또는 이동 통신망에서 비트/초/헤르츠/면적 단위, 비트/초/헤르츠/사이트 또는 비트/초/헤르츠/셀 단위의 시스템 스펙트럼 효율은 아날로그 대역폭과 시스템 커버리지 면적의 일부 측정값으로 나눈 최대 시스템 처리량(총 처리량)이다.

집적 회로에서, 종종 데이터 흐름 다이어그램의 블록은 단일 입력과 단일 출력을 가지며, 정보의 이산 패킷에서 작동한다. 이러한 블록의 예로는 FFT 모듈 또는 곱셈기가 있다. 처리량 단위는 '메시지당 초' 또는 '출력당 초'인 전달 지연 단위의 역수이므로, 처리량은 ASIC 또는 임베디드 프로세서와 같은 전용 기능을 수행하는 컴퓨팅 장치를 통신 채널과 연결하여 시스템 분석을 단순화하는 데 사용될 수 있다.

### 확장성

확장성은 시스템, 네트워크 또는 프로세스가 증가하는 양의 작업을 효율적으로 처리하는 능력 또는 그러한 성장을 수용하기 위해 확장될 수 있는 능력이다.

### 전력 소비

컴퓨터가 사용하는 전력의 양 (전력 소비). 이는 태양열, 배터리, 인력과 같이 전력원이 제한된 시스템에 특히 중요하다.

#### 전성비

병렬 컴퓨터를 구축하는 시스템 설계자, 예를 들어 구글의 하드웨어는 와트당 속도를 기준으로 CPU를 선택한다. CPU 전력 공급 비용이 CPU 자체 비용보다 크기 때문이다.

우주 비행 컴퓨터의 경우, 와트당 처리 속도 비율이 제한된 온보드 전력 자원 때문에 순수 처리 속도보다 더 유용한 성능 기준이다.

### 압축률

압축은 데이터 저장 공간이나 전송 용량과 같은 자원 사용을 줄이는 데 유용하다. 압축된 데이터는 사용하기 위해 압축 해제되어야 하므로 이 추가 처리 과정은 압축 해제를 통해 계산적 또는 기타 비용을 부과한다. 이는 결코 공짜가 아니다. 데이터 압축은 공간-시간 복잡성 트레이드오프의 영향을 받는다.

### 크기와 무게

이는 주머니에 넣고 다니는 스마트폰부터 우주선에 탑재된 휴대용 임베디드 시스템에 이르기까지 모바일 시스템의 중요한 성능 특징이다.

### 환경 영향

제조 및 재활용 과정뿐만 아니라 사용 중에도 컴퓨팅이 환경에 미치는 영향. 폐기물을 줄이고, 유해 물질을 줄이며, 컴퓨터의 생태발자국을 최소화하는 것을 목표로 측정이 이루어진다.

### 트랜지스터 수

집적 회로(IC)의 트랜지스터 수. 트랜지스터 수는 IC 복잡성의 가장 일반적인 척도이다.

## 벤치마크

CPU의 모든 성능 측면을 테스트하는 프로그램이 너무 많기 때문에, 벤치마크가 개발되었다.

가장 유명한 벤치마크는 SPEC (비영리 컨소시엄)에서 개발한 SPECint 및 SPECfp 벤치마크와 EEMBC (Embedded Microprocessor Benchmark Consortium)에서 개발한 인증 마크 벤치마크이다.

## 소프트웨어 성능 테스트

소프트웨어 공학에서 성능 테스트는 일반적으로 특정 작업 부하에서 시스템이 응답성 및 안정성 측면에서 어떻게 작동하는지 결정하기 위해 수행된다. 또한 시스템의 확장성, 신뢰성 및 자원 사용과 같은 다른 품질 속성을 조사, 측정, 검증 또는 확인하는 데 사용될 수 있다.

성능 테스트는 성능 공학의 하위 집합이며, 성능 공학은 시스템의 구현, 설계 및 아키텍처에 성능을 구축하기 위해 노력하는 새로운 컴퓨터 과학 실습이다.

### 프로파일링 (성능 분석)

소프트웨어 공학에서 프로파일링("프로그램 프로파일링", "소프트웨어 프로파일링")은 예를 들어 프로그램의 공간(메모리) 또는 시간 복잡도, 특정 명령의 사용량, 또는 함수 호출의 빈도와 기간을 측정하는 동적 프로그램 분석의 한 형태이다. 프로파일링 정보의 가장 일반적인 용도는 프로그램 최적화를 돕는 것이다.

프로파일링은 프로파일러(또는 코드 프로파일러)라는 도구를 사용하여 프로그램 소스 코드 또는 이진 실행 형식 중 하나를 계측하여 수행된다. 이벤트 기반, 통계, 계측 및 시뮬레이션 방법과 같이 프로파일러가 사용할 수 있는 여러 가지 기술이 있다.

## 성능 튜닝

성능 튜닝은 시스템 성능을 향상시키는 것이다. 이는 일반적으로 컴퓨터 애플리케이션이지만, 동일한 방법을 경제 시장, 관료 조직 또는 기타 복잡한 시스템에도 적용할 수 있다. 이러한 활동의 동기는 성능 문제라고 불리며, 이는 실제 문제이거나 예상되는 문제일 수 있다. 대부분의 시스템은 증가된 부하에 대해 어느 정도 성능 저하로 반응할 것이다. 더 높은 부하를 수용하는 시스템의 능력을 확장성이라고 하며, 더 높은 부하를 처리하도록 시스템을 수정하는 것은 성능 튜닝과 동의어이다.

체계적인 튜닝은 다음 단계를 따른다.
# 문제를 평가하고 허용 가능한 동작을 분류하는 숫자 값을 설정한다.
# 수정 전 시스템의 성능을 측정한다.
# 성능 향상에 중요한 시스템 부분을 식별한다. 이를 병목 현상이라고 한다.
# 병목 현상을 제거하기 위해 시스템의 해당 부분을 수정한다.
# 수정 후 시스템의 성능을 측정한다.
# 수정이 성능을 향상시키면 채택한다. 수정이 성능을 저하시키면 원래대로 되돌린다.

## 인지된 성능

컴퓨터 공학에서 인지된 성능은 소프트웨어 기능이 작업을 얼마나 빨리 수행하는 것처럼 보이는지를 나타낸다. 이 개념은 주로 사용자 수용 측면에 적용된다.

애플리케이션이 시작되거나 파일이 다운로드되는 데 걸리는 시간은 시작 화면(스플래시 화면 참조)이나 파일 진행 대화 상자를 표시한다고 해서 빨라지지 않는다. 그러나 이는 어떤 인간적 요구를 충족시킨다. 사용자에게 더 빠르게 느껴질 뿐만 아니라 시스템이 요청을 처리하고 있음을 알려주는 시각적 단서를 제공한다.

대부분의 경우 실제 성능을 높이면 인지된 성능이 향상되지만, 물리적 한계로 인해 실제 성능을 높일 수 없는 경우 인지된 성능을 높이는 기술을 사용할 수 있다.

## 성능 방정식
특정 벤치마크 프로그램을 실행하는 데 필요한 총 시간(**t**)은 다음과 같다.
: **<math>t=\tfrac{NC}{f}</math>** 또는 동등하게
: **<math>P=\tfrac{If}{N}</math>**

여기서
*P = \frac{1}{t}는 실행 시간 측면의 "성능"이다.
*N은 실제로 실행된 명령어 수(명령어 경로 길이)이다. 명령어 집합의 코드 밀도는 **N**에 강한 영향을 미친다. **N**의 값은 명령어 집합 시뮬레이터를 사용하여 **정확하게** 결정하거나(사용 가능한 경우) 추정치로 결정할 수 있다. 이 추정치는 부분적으로 입력 변수의 추정 또는 실제 빈도 분포와 HLL 컴파일러에서 생성된 기계어를 검토하여 기반한다. HLL 소스 코드의 줄 수로는 결정할 수 없다. N은 동일한 프로세서에서 실행되는 다른 프로세스의 영향을 받지 않는다. 여기서 중요한 점은 하드웨어가 일반적으로 실행된 프로그램의 N 값을 추적하지 않거나(또는 쉽게 사용할 수 있도록) 않으므로 이 값을 정확하게 결정하는 것은 거의 실행되지 않는 명령어 집합 시뮬레이션을 통해서만 가능하다는 것이다.
*f는 초당 주기 수의 클럭 주파수이다.
*C = \frac{1}{I}는 이 벤치마크에 대한 평균 클럭당 명령어 처리 횟수(CPI)이다.
*I = \frac{1}{C}는 이 벤치마크에 대한 평균 클럭당 명령어 처리 횟수(IPC)이다.

단일 머신에서도 다른 컴파일러나 동일한 컴파일러의 다른 컴파일러 최적화 스위치는 N과 CPI를 변경할 수 있다. 새로운 컴파일러가 다른 것을 악화시키지 않고 N 또는 C를 개선할 수 있다면 벤치마크는 더 빠르게 실행되지만, 종종 그들 사이에 트레이드오프가 있다. 예를 들어, 실행하는 데 오래 걸리는 몇 가지 복잡한 명령어를 사용하는 것이 더 나은가, 아니면 벤치마크를 실행하는 데 더 많은 명령어가 필요하더라도 매우 빠르게 실행되는 명령어를 사용하는 것이 더 나은가?

CPU 설계자는 종종 특정 명령어 집합을 구현해야 하므로 N을 변경할 수 없다.
때때로 설계자는 (바라건대) C를 너무 많이 희생하지 않으면서 f를 크게 개선하는(더 깊은 파이프라인 및 더 빠른 캐시와 같은 기술을 사용하여) 방식으로 성능을 향상시키는 데 중점을 둔다. 이는 스피드 데몬 CPU 설계로 이어진다.
때때로 설계자는 (바라건대) 클럭 주파수를 너무 많이 희생하지 않으면서 CPI를 크게 개선하는(비순차적 명령어 처리, 슈퍼스칼라 CPU, 더 큰 캐시, 개선된 히트율을 가진 캐시, 개선된 분기 예측, 투기적 실행 등과 같은 기술을 사용하여) 방식으로 성능을 향상시키는 데 중점을 둔다. 이는 브레이니악 CPU 설계로 이어진다.
주어진 명령어 집합(따라서 N이 고정됨)과 반도체 공정에 대해 최대 단일 스레드 성능(1/t)은 브레이니악 기술과 스피드레이서 기술 사이의 균형을 필요로 한다.

## 같이 보기
* 알고리즘 효율성
* 컴퓨터 성능 (크기별)
* 네트워크 성능
* 레이턴시 지향 프로세서 아키텍처
* 최적화 (컴퓨터 과학)
* RAM 업데이트 속도
* 완전한 명령어 집합
* 하드웨어 가속
* 속도 향상
* 캐시 교체 정책
* PC 하드웨어 이해하기
* 상대 효율

## 각주