CS
  • CS-Study
  • database
    • B-Tree와 B+Tree
    • DB JOIN
    • DB Lock
    • DB 트래픽
    • DBCP (DB Connection Pool)
    • Flyway
    • Message Broker
    • MySQL InnoDB 스토리지 엔진
    • MySQL 엔진 아키텍처
    • RDB와 NoSQL
    • Redis
    • SQL Injection
    • 스키마 (Schema)
    • Table Scan과 Index Scan
    • Apache Kafka
    • Key
    • 뷰 (View)
    • 인덱스
    • 정규화
    • RDBMS, NoSQL의 클러스터링/리플리케이션 방식
    • 트랜잭션(Transaction)
    • 트랜잭션의 격리성(Transaction Isolation)
    • 프로시저와 트리거
    • DB 정규화 (Normalization)
  • etc
    • MSA
    • REST, REST API, RESTful
    • SOLID 원칙
    • TDD (Test-Driven Development)
    • 서버리스
    • 컨테이너와 도커
  • java
    • Collections
    • Garbage Collection
    • Generic
    • JDBC
    • Java Virtual Machine(JVM)
    • Java Thread
    • Java8 vs Java11 vs Java17
    • 객체지향 프로그래밍 OOP (Object Oriented Programing)
    • Optional
    • RxJava(Reactive Programming)
    • 문자열(String & StringBuffer & StringBuilder)
    • Synchronized
    • Virtual Thread
    • Wrapper Class
    • Equals()와 Hashcode()
    • final
    • Jackson 라이브러리
    • 리플렉션(Reflection)
    • static class와 static method
    • 스트림(Stream)과 람다(Lambda)
    • 스프링 프레임워크에서 사용되는 디자인 패턴
    • 예외처리(Exception)
    • Java Annotation
    • 추상클래스와 인터페이스
  • network
    • 3-way handshake
    • 4-way Handshake
    • DHCP(Dynamic Host Configuration Protocol)
    • DMZ(DeMilitarized Zone)
    • DNS(Domain Name System)
    • HTTP Method
    • HTTP 버전 비교
    • HTTP status code
    • HTTP
    • IP Address
    • Mutiplexing & Demultiplexing
    • OSI 7계층
    • SOP, CORS
    • TCP와 UDP
    • XSS와 CSRF
    • gRPC
    • Stateless와 Connectionless
    • 라우터 Router
    • 로드밸런서(Load Balancer)
    • 브라우저에 URL입력시 네트워크 상 일어나는 일
    • 서브넷 마스크, 게이트웨이
    • 웹 소켓과 소켓 통신
    • 쿠키(Cookie)와 세션(Session)
  • operating-system
    • IPC (Inter Process Communication)
    • 인터럽트
    • TLB
    • 스레싱 Thrashing
    • Thread Pool, Fork-Join
    • Thread Safe
    • 프로세스
    • 가상 메모리
    • 데드락 (DeadLock, 교착 상태)
    • 동기/비동기 & 블로킹/논블록킹
    • 동기화(Synchronization)
    • 메모리 할당과 단편화
    • 뮤텍스와 세마포어, 모니터
    • 세그먼테이션과 페이징
    • 운영체제
    • 캐시 메모리
    • Context switching(문맥 교환)
    • 컴파일
    • 파일 시스템
    • 페이지 교체 알고리즘(Page Replacement Algorithm)
    • 프로세서 스케줄링 알고리즘
    • 프로세스 주소 공간
  • spring
    • @Transactional
    • AOP(Aspect-Oriented Programming)
    • DTO, DAO, VO, Entity
    • DispatcherServlet
    • Hibernate, JPA, Spring Data JPA
    • Ioc와 DI
    • JPA 연관관계 맵핑
    • N+1 Problem
    • ORM
    • Persistence Context
    • SQL Mapper vs ORM vs QueryBuilder
    • Servlet Filter와 Spring Interceptor
    • Servlet
    • Spring MVC와 Spring Boot
    • Tomcat
    • WebFlux
Powered by GitBook
On this page
  • 배경
  • 주요 원인
  • 프레임 할당
  • Local Replacement
  • Global Replacement
  • 스레싱 해결 방안
  • 워킹셋 알고리즘(Working Set)
  • 페이지 부재 빈도 알고리즘(Page Fault Frequency)
  • 페이지 크기
  • 페이지 크기 작게 설정시
  • 페이지 크기 크게 설정시
  1. operating-system

스레싱 Thrashing

PreviousTLBNextThread Pool, Fork-Join

Last updated 11 months ago

CPU작업 시간보다 메모리와 스왑영역 간 페이지 교체에 시간을 많이 소비하는 것

배경

  • 작업은 디스크 I/O 작업으로 CPU를 사용하지 않는 작업

  • 스와핑 시간이 많아질 수록 CPU가 일하는 시간이 감소 함

페이지 부재 (Page Fault) CPU를 점유하고 있는 프로세스가 필요로 하는 데이터가 물리 메모리에 없는 경우

다중 프로그램 정도 (MPD: Multi-Programming Degree)

  • 메모리에 동시에 올라가 있는 프로세스의 수

  • 운영체제는 CPU 이용률이 낮으면 MPD를 높임

    • 과도하게 MPD가 높아질 경우 → 프로세스에게 할당되는 메모리 양 감소 → 페이지 부재 발생 → 프로세스 수행시간 보다 페이지 교체 시간이 많은 상태 됨

즉 스레싱이란 페이지 부재율이 증가하여 CPU 이용율이 급격히 떨어지는 현상

주요 원인

  • 부적절한 페이지 교체 정책

    • 페이지 교체 정책 실패

    • page 추가 hit rate 감소

  • 시스템 리소스 부족

    • 작은 L2캐시 및 낮은 메모리용량으로 인한 빈번한 Page Fault 발생

    • Single Core 혹은 저성능 CPU/CORE 사용

  • 프로그램 메모리 관리 실패

    • 과도한 thread()와 무분별한 fork()로 과도한 프로세스 발생

    • exit(0) 미사용 혹은 G/C 미수행으로 메모리 누수/관리 실패

프레임 할당

  • 스레싱은 각 프로세스에 프레임을 할당하는 정도와 연관 됨

  • 프레임 할당 방법

    • 감당할 수 있을 정도의 페이지 부재를 일으키며, 전체 프로세스가 원할하게 돌아가게 함

    • 2가지의 프레임 할당 방법 존재

Local Replacement

  • 프로세스 별로 할당된 프레임의 크기가 고정되어 있음

  • 메모리 상의 자기 자신의 프로세스 페이지에 대해서만 교체 작업 수행

  • 페이지 부재 발생 시

  • 프로세스 안에서 페이지 교체 정책을 통해 자체적으로 메모리 확보

Global Replacement

  • 프로세스의 우선 순위를 따져 각 프로세스에게 동적으로 우선 순위 할당 진행

  • 메모리 상의 모든 프로세스 페이지에 대한 교체 작업 수행

  • 페이지 부재 발생 시

    • 다른 프로세스가 가지고 있던 프레임을 가져와 사용할 수 있음

스레싱 해결 방안

워킹셋 알고리즘(Working Set)

  • 개념

    • 지역성 집합이 메모리에 동시에 올라갈 수 있도록 보장하는 메모리 관리 알고리즘

  • 방법

  • 워킹셋 윈도우 : 페이지를 참조하는 횟수

    • ex) 10,000번의 명령어 수행을 워킹셋 윈도우로 정한다

      • 현재 시점 T로부터 이전 10,000개의 명령어에 속한 녀석들이 워킹셋이 된다는 의미

    • 시간이 지남에 따라 자주 참조하는 페이지들의 집합은 변할 수 있기 때문에 워킹셋도 시간에 따라 변함

페이지 부재 빈도 알고리즘(Page Fault Frequency)

  • 개념

    • 프로세스의 페이지 부재율을 주기적으로 조사하고 이 값에 근거하여 각 프로세스에 할당할 프레임 양을 동적으로 조절하는 알고리즘

  • 방법

    • 시스템이 미리 정해 놓은 상한값(Upper bound)을 넘어가거나 하한값(Lower bound)이하로 떨어지게 되면 운영체제가 메모리에 올라가있는 프로세스의 수를 조절

      • 페이지 부재 비율 상한선 초과 → 할당한 프레임이 적다는 것 → 프레임 할당량 늘려줌

      • 페이지 부재 비율 하한선보다 낮음 → 할당한 프레임이 많다는 것 → 할당한 프레임 어느정도 회수

페이지 크기

  • 페이지의 일반적인 크기 4KB ~ 4MB

    • 페이지의 크기는 점점 커왔고, 현재도 계속 증가 하고 있음

페이지 크기 작게 설정시

  • 장점

    • 내부 단편화(Internal Fragmentation)가 줄어듦

    • 메모리 사용의 효율성을 높일 수 있음

  • 단점

    • 개별 페이지에 대한 페이지 테이블을 들고 다니는 데 많은 메모리가 필요할 수 있음

    • 잦은 페이지 부재로 인한 오버헤드가 커질 수 있음

페이지 크기 크게 설정시

  • 장점

    • 필요한 페이지 테이블의 수는 작음

    • 페이지 부재를 핸들링하는데 드는 오버헤드가 적음

  • 단점

    • 내부 단편화가 큼

ref

을 활용하여 프로세스가 많이 참조하는 페이지 집합을 메모리 공간에 계속 상주시켜 빈번한 페이지 교체현상을 줄이는 방법

페이지 크기는 와 페이지 부재의 trade-off관계

지역성
운영체제 KOCW 양희재 교수님
[운영체제/OS] 프레임 할당(Frame allocation)과 Page fault 관련 기타 이슈들
[시나공 정보처리기사] 2415506 스래싱
스레싱 (Thrashing)
스레싱(thrashing)이란 무엇인가
스와핑
내부 단편화