03. CPU/IO bound

Last updated - 2023년 05월 02일 Edit Source

    유튜버 쉬운코드 님의 운영체제 강의를 정리한 내용


    # CPU/IO bound

    # 기초용어

    CPU (Central Processing Unit)

    • 명령어를 실행하는 연산 장치
    • 프로세스의 명령어를 해석하고 실행하는 장치

    IO (Input / Output)

    • 파일을 읽고 쓰거나 네트워크의 어딘가와 데이터를 주고 받는 것
    • 입출력 장치와 데이터를 주거나 받는 것

    버스트 (Burst)

    • 어떤 현상이 짧은 시간 안에 집중적으로 일어나는 일

    CPU 버스트

    • 프로세스가 CPU에서 한 번에 연속적으로 실행되는 시간
    • 메모리에 올라가있는 프로세스가 자신의 차례가 되어서 CPU에서 실행됐을 때, 자신의 명령어들이 CPU에서 연속적으로 실행되는 시간을 의미

    IO 버스트

    • 프로세스가 IO 작업을 요청하고 결과를 기다리는 시간

    프로세스의 인생은 CPU 버스트와 IO 버스트의 연속


    CPU 버스트 길이에 따른 빈도

    • 대부분의 프로세스들의 CPU 버스트가 8ms 안으로 끝나는 것을 볼 수 있음
    • 보통의 프로세스는 CPU 작업을 수행할 때 길게하지 않고 짧게 끝낸다는 것을 의미

    CPU bound 프로세스

    • CPU burst가 많은 프로세스 (연산 작업이 많은)
    • ex) 동영상 편집 프로그램, 머신러닝 프로그램

    IO bound 프로세스

    • IO burst가 많은 프로세스
    • ex) (일반적인) 백엔드 API 서버
      • 보통의 API 서버들은 HTTP 요청을 받으면 DB 서버나 캐시 서버에 데이터를 요청하고 요청한 데이터를 받아서 적당한 형태로 가공한 뒤에 HTTP 응답을 하는 것이 일반적인 형태이니까
      • DB 서버나 캐시 서버에 요청하는 작업이 IO 작업
      • 이 IO 작업은 네트워크를 타는 부분이라서 CPU에서 명령어가 몇 십개 처리되는 것보다 훨씬 오래걸림



    # CPU bound 프로그램

    Quiz) 듀얼 코어 CPU에서 동작할 CPU bound 프로그램을 구현한다면 몇 개의 스레드를 쓰는게 좋을까?

    • ex) 10억 개의 사진을 읽어서 사진에 사람이 있는지 없는지 마킹하는 프로그램
    • 무조건 스레드가 많으면 처리 속도가 빠를까?

    Goetz (2002, 2006) recommends
    CPU bound 프로그램에서 적절한 스레드 수는 number of CPUs + 1


    ex) 듀얼 코어 CPU에 스레드가 4개인 상황

    • 컨택스트 스위칭이 많이 발생 → 오버헤드 커질 것

    ex) 듀얼 코어 CPU에 코어 개수만큼만 스레드 2개인 상황

    • 컨택스트 스위칭이 발생하지 않기 때문에 이로 인한 CPU 낭비 발생 ❌
    • 그래서 스레드를 코어 개수 정도나, 코어 개수보다 1개 더 둔 정도로 추천한다는 의미



    # IO bound 프로그램

    Quiz) IO bound 프로그램은 스레드 몇 개로 구현해야 적절할까?

    • 사실 CPU bound 프로그램과 다르게 적절한 가이드라인은 없음
    • 여러 상황에 맞춰서 적절한 스레드 수를 찾아야 함
      • 컴퓨터 스펙, 프로그램 특성 등등 …

    ex) 만약 백엔드 API 서버가 thread per request 방식이라면?

    • 몇 개의 스레드들을 미리 만들어 놓을지 여러 상황을 고려해서 결정하는 것이 필요
      • API 서버의 하드웨어 스펙이 어느정도인지
      • API 애플리케이션의 IO burst 비중이 대략적으로 어느 정도인지
      • 예상되는 트래픽의 패턴은 어떤지

    Comment