본문 바로가기
OS 운영체제

오버헤드 (Overhead)

by yororing 2024. 8. 26.

00 개요

  • CPU 사용 시간에 관해 알아볼 때 오버헤드(overhead)라는 개념이 나와서 이에 대한 정리
  • 오버헤드를 최소화하는 것이 시스템 성능을 최적화하는 데 중요한 역할을 함
  • 개발자는 항상 오버헤드를 고려하여 시스템을 설계하고 최적화하는 것이 중요

01 오버헤드(Overhead)란

1. 정의

  • 오버헤드는 시스템에서 주어진 작업을 수행하기 위해 필요한 추가적인(간접적인) 자원 (메모리 등)이나 시간 비용을 의미 
  • 이는 프로세스나 프로그램이 본래의 목표를 달성하기 위해 반드시 필요한 부분은 아니지만, 작업을 지원하기 위해 불가피하게 발생하는 부가적인 작업
  • 즉, 반드시 존재함 

2. 개념 설명

  • 오버헤드는 주로 컴퓨터 시스템의 성능을 저하시킬 수 있는 요소 여겨짐
  • 효율적인 시스템 운영을 위해 오버헤드를 최소화하는 것 중요
  • 예를 들어, 프로그램의 실행 속도, 메모리 사용량, 네트워크 대역폭 등이 오버헤드로 인해 영향을 받을 수 있음

3. 오버헤드가 발생할 수 있는 상황

  • 프로세스 스케줄링: 운영체제가 여러 프로세스를 관리하고 스케줄링할 때, 각 프로세스 전환 시 오버헤드 발생
  • 메모리 관리: 가상 메모리 시스템에서 페이지 폴트가 발생하면, 메모리를 할당하고 관리 시 오버헤드 발생
  • 함수 호출: 함수 호출 시 스택에 인수와 return 주소를 저장하는 등의 작업 시 오버헤드 발생
  • 네트워크 통신: 네트워크 프로토콜에 따라 데이터 패킷을 전송할 때 패킷 헤더, 오류 검사, 재전송 등의 작업 시 오버헤드 발생

4. 오버헤드 종류 및 예시

  • 여러가지 시스템 구성 요소에서 발생하는 오버헤드 종류:
  • 시간 오버헤드: 작업 수행 시 추가로 소요되는 시간
    • 예) 함수 호출 시의 호출 시간, 문맥 전환(context switching) 시의 전환 시간 등
      • 함수 호출 오버헤드: 프로그래밍에서 함수 실행 시, 함수 호출, 매개변수 전달, return 주소 저장, 함수 종료 후 return 값 처리 등의 작업에 소요되는 자원 및 시간
      • 문맥 교환 오버헤드: 운영체제가 한 프로세스에서 다른 프로세스로 CPU 전환 시, 현재 프로세스의 상태를 저장하고, 새 프로세스의 상태를 복구하는 과정에서 소비되는 CPU 시간
  • 처리 오버헤드: 작업을 처리하기 위해 추가로 수행해야 하는 연산.
    • 예) 데이터 암호화, 압축, 해제압축 등
  • 메모리 오버헤드: 작업을 위해 추가로 할당되는 메모리
    • 예) 데이터 구조에 저장된 메타데이터, 캐시 등
    • 메모리 할당과 해제, 데이터 구조의 크기, 메모리 관리의 복잡성 등과 관련된 오버헤드로, 프로그램의 메모리 사용 효율성에 영향 끼
  • 네트워크 오버헤드: 네트워크 통신 과정에서 발생하는 추가적인 데이터나 비용
    • 예) 패킷 전송 시 발생하는 추가적인 데이터, 예) TCP/IP 헤더
    • 네트워크 장비, 통신 경로, 프로토콜 등과 관련된 오버헤드로, 데이터 전송의 효율성 및 성능에 영향 끼침 

6. 오버헤드 예시

    • 가상화 오버헤드: 가상화 환경에서 하드웨어 리소스를 가상화하여 여러 가상 머신을 운영할 때 발생하는 성능 손실
      • 시간: 가상화 환경에서 가상 머신(VM)을 운영할 때 발생하는 추가적인 지연이나 성능 저하
      • 처리: 가상화 레이어에서 추가적으로 처리해야 하는 작업 또는 연산으로 인한 성능 손실
      • 메모리: 가상화 환경에서 가상 머신이 사용하는 메모리 자원의 추가적인 소모
      • 네트워크: 가상화 환경에서 네트워크 성능에 영향을 미치는 추가적인 데이터 전송이나 처리 비용
    •  
    •  
  • DB 오버헤드: DB에서 쿼리문 수행 시 쿼리문을 파싱하고 실행 시 발생하는 시간
  • 메모리 관리 오버헤드: 운영체제가 메모리를 관리하기 위해 페이지 테이블이나 캐시를 관리하는 데 드는 메모리와 시간

5. 오버헤드 감소 방법

  • 알고리즘 최적화: 코드 리팩토링으로 불필요한 계산이나 작업을 줄이는 것 
    • 코드에서 불필요한 함수 호출이나 복잡한 로직을 줄여 오버헤드 최소화 
    • 즉, 코드 구조 단순화, 중복된 코드 제거
    • 예) 반복적으로 호출되는 함수나 자주 변경되는 데이터 구조 최적화
  • 효율적인 자원 관리: 메모리 관리, 네트워크 통신 등에서 효율적인 자원 관리 방식 도입하는 것
    • 예) 메모리 접근 최소화, 캐시 활용 극대화
  • 알맞은 시스템 설계: 시스템 설계 단계에서 불필요한 작업을 줄이는 것
    • 예) 멀티스레딩 대신 이벤트 기반 프로그래밍 모델 사용
    • 예) 작업 병렬 처리 및 비동기 처리

 

 

 

참조

  1. chatgpt
  2. https://ko.wikipedia.org/wiki/%EC%98%A4%EB%B2%84%ED%97%A4%EB%93%9C
  3. https://velog.io/@has0327/%EC%98%A4%EB%B2%84%ED%97%A4%EB%93%9COverHead-%EC%98%A4%EB%B2%84%ED%94%8C%EB%A1%9C%EC%9A%B0Overflow 
  4. https://sakuraop.tistory.com/m/496 
  5.  
  6.  

'OS 운영체제' 카테고리의 다른 글

bitmask (비트마스크)  (0) 2024.09.05
failover (자동 전환)  (0) 2024.08.27
shared memory (공유 메모리)  (0) 2024.08.15
알아두면 좋은 운영체계의 용어  (0) 2024.06.01
운영체제 정의, 기능, 종류  (0) 2024.06.01