오버헤드

오버헤드(overhead)는 컴퓨터 시스템에서 모든 사용자 또는 프로세스에 이점을 제공하지만 특정 작업에 직접적으로 기인할 수 없는 공유 기능으로 구성된다. 따라서 조직의 오버헤드와 유사하다. 컴퓨터 시스템 오버헤드는 시스템 사양을 읽고 예상할 수 있는 것보다 느린 처리, 적은 메모리, 적은 저장 용량, 적은 네트워크 대역폭 또는 더 큰 지연 시간으로 나타난다. 이는 엔지니어링 오버헤드의 특별한 경우이다. 오버헤드는 구조, 오류 수정 및 기능 포함과 관련하여 소프트웨어 설계의 결정적인 요소가 될 수 있다. 컴퓨팅 오버헤드의 예는 객체 지향 프로그래밍(OOP), 함수형 프로그래밍, 데이터 전송, 자료 구조, 데이터 저장 장치의 파일 시스템에서 찾을 수 있다.

소프트웨어 설계

구현 선택
프로그래머/소프트웨어 엔지니어는 여러 알고리즘, 인코딩, 자료형 또는 자료 구조 중에서 선택할 수 있으며, 각각은 알려진 특성을 가지고 있다. 이들 중에서 선택할 때 각자의 오버헤드도 고려해야 한다.

절충
소프트웨어 공학에서 오버헤드는 신제품에 기능을 포함할지 여부, 또는 버그를 수정할지 여부에 대한 결정에 영향을 미칠 수 있다. 오버헤드가 높은 기능은 포함되지 않을 수 있으며, 포함하려면 큰 재정적 인센티브가 필요하다. 종종 소프트웨어 공급업체는 제품의 버그를 잘 알고 있지만, 오버헤드 때문에 버그를 수정하는 보상이 가치가 없는 경우가 많다.

예를 들어, 암묵적 자료 구조 또는 간결 자료 구조는 낮은 공간 오버헤드를 제공하지만, 느린 성능을 희생한다(공간/시간 절충).

소프트웨어의 런타임 복잡도
알고리즘 복잡도는 일반적으로 점근 표기법을 사용하여 지정된다. 이것은 어떤 작업이 실행하는 데 걸리는 시간이나 사용하는 메모리 양에 대해서는 언급하지 않지만, 입력 크기에 따라 증가하는 방식에 대해서는 언급한다. 오버헤드는 의도적으로 이 계산에 포함되지 않는데, 이는 기계마다 다르지만 알고리즘의 근본적인 실행 시간은 변하지 않기 때문이다.

이는 모든 종류의 리소스를 고려하는 알고리즘 효율성과는 대조되어야 한다. 이는 복잡성과 오버헤드의 조합이다(그러나 사소한 것은 아니다).

예시

컴퓨터 프로그래밍(런타임 및 계산 오버헤드)
함수를 호출하면 작은 런타임 오버헤드가 발생한다. 때로는 컴파일러가 이러한 함수 호출 중 일부를 인라이닝하여 이 오버헤드를 최소화할 수 있다.

CPU 캐시

CPU 캐시에서 "캐시 크기"(또는 용량)는 캐시가 저장하는 데이터의 양을 나타낸다. 예를 들어, "4 KB 캐시"는 4 KB의 데이터를 저장하는 캐시이다. 이 예에서 "4 KB"는 프레임, 주소 및 태그 정보와 같은 오버헤드 비트를 제외한다. Presentation for course in Computer Architecture.

통신(데이터 전송 오버헤드)
통신 네트워크를 통해 데이터 페이로드를 안정적으로 보내려면 페이로드 자체뿐만 아니라 더 많은 것을 보내야 한다. 또한 목적지에 도달하는 데 필요한 다양한 제어 및 신호 데이터(TCP)를 보내는 것도 포함된다. 이는 추가 데이터가 메시지의 본질적인 의미에 기여하지 않기 때문에 소위 프로토콜 오버헤드를 발생시킨다.Common Performance Issues in Network Applications Part 1: Interactive Applications, Windows XP Technical Articles, MicrosoftProtocol Overhead in IP/ATM Networks, Minnesota Supercomputer Center

전화 통신에서는 번호 다이얼링 및 통화 설정 시간이 오버헤드이다. 양방향(그러나 반이중) 라디오에서는 충돌을 피하기 위해 "over" 및 기타 신호가 필요한 것이 오버헤드이다.

프로토콜 오버헤드는 비응용 바이트(프로토콜 및 프레임 동기화)의 백분율을 메시지의 총 바이트 수로 나눈 값으로 표현될 수 있다.

인코딩 및 자료 구조(크기 오버헤드)
정보 및 데이터의 인코딩 또한 오버헤드를 발생시킨다. "2011-07-12 07:18:47"이라는 날짜와 시간은 유닉스 시간으로 32비트 부호 있는 정수 1310447927로 표현될 수 있으며, 4바이트만을 소비한다. ISO 8601 형식의 UTF-8 인코딩된 문자열 2011-07-12 07:18:47로 표현되면 날짜는 19바이트를 소비하여 이진 정수 표현에 비해 375%의 크기 오버헤드를 발생시킨다. XML로 이 날짜는 인덱스 1을 가진 CHANGEDATE라는 의미론적 컨텍스트를 추가하면서 218자의 오버헤드로 다음과 같이 작성될 수 있다.
<?xml version="1.0" encoding="UTF-8"?>
<datetime qualifier="changedate" index="1">
  <year>2011</year>
  <month>07</month>
  <day>12</day>
  <hour>07</hour>
  <minute>18</minute>
  <second>47</second>
</datetime>
UTF-8로 인코딩된 XML에서 발생하는 349바이트는 원래 정수 표현에 비해 8625%의 크기 오버헤드와 상관관계가 있다.

 파일 시스템 
파일 자체 외에도 컴퓨터 파일 시스템은 디렉터리 이름 및 목록, 파일 이름, 파일의 섹터 위치, 마지막 수정 및 생성 날짜 및 시간과 같은 속성, 파일이 조각화되는 방식, 공간의 쓰기 및 비어 있는 부분, 일부 파일 시스템의 저널을 저장하는 데 공간의 일부를 차지한다.

많은 작은 파일은 적은 수의 큰 파일보다 더 많은 오버헤드를 생성한다.

 같이 보기 
 슬랙 공간
 최소 권한의 원칙
 범용 튜링 기계

 각주 

분류:소프트웨어 최적화