오버헤드
오버헤드(overhead)는 컴퓨터 시스템에서 모든 사용자 또는 프로세스에 이점을 제공하지만 특정 작업에 직접적으로 기인할 수 없는 공유 기능으로 구성된다. 따라서 조직의 오버헤드와 유사하다. 컴퓨터 시스템 오버헤드는 시스템 사양을 읽고 예상할 수 있는 것보다 느린 처리, 적은 메모리, 적은 저장 용량, 적은 네트워크 대역폭 또는 더 큰 지연 시간으로 나타난다.[1] 이는 엔지니어링 오버헤드의 특별한 경우이다. 오버헤드는 구조, 오류 수정 및 기능 포함과 관련하여 소프트웨어 설계의 결정적인 요소가 될 수 있다. 컴퓨팅 오버헤드의 예는 객체 지향 프로그래밍(OOP), 함수형 프로그래밍, 데이터 전송, 자료 구조, 데이터 저장 장치의 파일 시스템에서 찾을 수 있다.
소프트웨어 설계
[편집]구현 선택
[편집]프로그래머/소프트웨어 엔지니어는 여러 알고리즘, 인코딩, 자료형 또는 자료 구조 중에서 선택할 수 있으며, 각각은 알려진 특성을 가지고 있다. 이들 중에서 선택할 때 각자의 오버헤드도 고려해야 한다.
절충
[편집]소프트웨어 공학에서 오버헤드는 신제품에 기능을 포함할지 여부, 또는 버그를 수정할지 여부에 대한 결정에 영향을 미칠 수 있다. 오버헤드가 높은 기능은 포함되지 않을 수 있으며, 포함하려면 큰 재정적 인센티브가 필요하다. 종종 소프트웨어 공급업체는 제품의 버그를 잘 알고 있지만, 오버헤드 때문에 버그를 수정하는 보상이 가치가 없는 경우가 많다.
예를 들어, 암묵적 자료 구조 또는 간결 자료 구조는 낮은 공간 오버헤드를 제공하지만, 느린 성능을 희생한다(공간/시간 절충).
소프트웨어의 런타임 복잡도
[편집]알고리즘 복잡도는 일반적으로 점근 표기법을 사용하여 지정된다. 이것은 어떤 작업이 실행하는 데 걸리는 시간이나 사용하는 메모리 양에 대해서는 언급하지 않지만, 입력 크기에 따라 증가하는 방식에 대해서는 언급한다. 오버헤드는 의도적으로 이 계산에 포함되지 않는데, 이는 기계마다 다르지만 알고리즘의 근본적인 실행 시간은 변하지 않기 때문이다.
이는 모든 종류의 리소스를 고려하는 알고리즘 효율성과는 대조되어야 한다. 이는 복잡성과 오버헤드의 조합이다(그러나 사소한 것은 아니다).
예시
[편집]컴퓨터 프로그래밍(런타임 및 계산 오버헤드)
[편집]함수를 호출하면 작은 런타임 오버헤드가 발생한다.[2] 때로는 컴파일러가 이러한 함수 호출 중 일부를 인라이닝하여 이 오버헤드를 최소화할 수 있다.[3]
CPU 캐시
[편집]CPU 캐시에서 "캐시 크기"(또는 용량)는 캐시가 저장하는 데이터의 양을 나타낸다. 예를 들어, "4 KB 캐시"는 4 KB의 데이터를 저장하는 캐시이다. 이 예에서 "4 KB"는 프레임, 주소 및 태그 정보와 같은 오버헤드 비트를 제외한다.[4]
통신(데이터 전송 오버헤드)
[편집]통신 네트워크를 통해 데이터 페이로드를 안정적으로 보내려면 페이로드 자체뿐만 아니라 더 많은 것을 보내야 한다. 또한 목적지에 도달하는 데 필요한 다양한 제어 및 신호 데이터(TCP)를 보내는 것도 포함된다. 이는 추가 데이터가 메시지의 본질적인 의미에 기여하지 않기 때문에 소위 프로토콜 오버헤드를 발생시킨다.[5][6]
전화 통신에서는 번호 다이얼링 및 통화 설정 시간이 오버헤드이다. 양방향(그러나 반이중) 라디오에서는 충돌을 피하기 위해 "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%의 크기 오버헤드와 상관관계가 있다.
파일 시스템
[편집]파일 자체 외에도 컴퓨터 파일 시스템은 디렉터리 이름 및 목록, 파일 이름, 파일의 섹터 위치, 마지막 수정 및 생성 날짜 및 시간과 같은 속성, 파일이 조각화되는 방식, 공간의 쓰기 및 비어 있는 부분, 일부 파일 시스템의 저널을 저장하는 데 공간의 일부를 차지한다.
많은 작은 파일은 적은 수의 큰 파일보다 더 많은 오버헤드를 생성한다.
같이 보기
[편집]각주
[편집]- ↑ Denning, Peter (January 2003). 〈Overhead〉. 《Encyclopedia of Computer Science》. John Wiley and Sons. 1341–1343쪽. ISBN 978-0-470-86412-8.
- ↑ “Inline functions (C++)”. 《Microsoft Learn》. Microsoft. 2024년 1월 22일. 2024년 3월 22일에 확인함.
- ↑ Mahaffey, Terry (2019년 7월 24일). “Inlining Decisions in Visual Studio”. 《C++ Team Blog》. Microsoft.
- ↑ Sorin, Daniel J. (2009). “Caches and Memory Hierarchies” (PDF). 2019년 3월 13일에 확인함. Presentation for course in Computer Architecture.
- ↑ Common Performance Issues in Network Applications Part 1: Interactive Applications, Windows XP Technical Articles, Microsoft
- ↑ Protocol Overhead in IP/ATM Networks, Minnesota Supercomputer Center