목차
스케줄링 알고리즘 개념" >스케줄링 알고리즘 개념
IO 스케줄러" >IO 스케줄러
1、NOOP" >1、NOOP
4. 예측" >4. 예측
요약" >요약
시스템 튜토리얼 리눅스 하나의 기사로 Linux 커널의 네 가지 주요 IO 스케줄링 알고리즘을 이해하세요.

하나의 기사로 Linux 커널의 네 가지 주요 IO 스케줄링 알고리즘을 이해하세요.

Feb 14, 2024 pm 03:30 PM
linux 리눅스 튜토리얼 리눅스 시스템 리눅스 명령 쉘 스크립트 준비 overflow 임베디드리눅스 리눅스 시작하기 리눅스 학습

Linux 커널에는 Noop IO 스케줄러, 예상 IO 스케줄러, Deadline IO 스케줄러, CFQ IO 스케줄러 등 4가지 유형의 IO 스케줄러가 포함되어 있습니다.

일반적으로 디스크 읽기 및 쓰기 지연은 헤드가 실린더로 이동하여 발생합니다. 이러한 지연을 해결하기 위해 커널은 주로 캐싱 및 IO 스케줄링 알고리즘이라는 두 가지 전략을 채택합니다.

스케줄링 알고리즘 개념

  1. 데이터 블록을 장치에 쓰거나 장치에서 읽으면 해당 요청은 완료를 기다리는 대기열에 배치됩니다.
  2. 각 블록 장치에는 자체 대기열이 있습니다.
  3. I/O 스케줄러는 미디어를 보다 효율적으로 활용하기 위해 이러한 대기열의 순서를 유지하는 역할을 합니다. I/O 스케줄러는 순서가 없는 I/O 작업을 순서가 있는 I/O 작업으로 바꿉니다.
  4. 예약하기 전에 커널은 먼저 대기열에 있는 요청 수를 결정해야 합니다.
一文搞懂 Linux 内核的 4 大 IO 调度算法

IO 스케줄러

一文搞懂 Linux 内核的 4 大 IO 调度算法

IO 스케줄러(IO 스케줄러)는 운영 체제에서 블록 장치에 대한 IO 작업 제출 순서를 결정하는 데 사용되는 방법입니다. 존재 목적은 두 가지가 있습니다. 하나는 IO 처리량을 향상시키는 것이고, 다른 하나는 IO 응답 ​​시간을 줄이는 것입니다.

그러나 IO 처리량과 IO 응답 ​​시간은 종종 모순됩니다. 두 가지의 균형을 최대한 맞추기 위해 IO 스케줄러는 다양한 IO 요청 시나리오에 적응할 수 있는 다양한 예약 알고리즘을 제공합니다. 그 중 데이터베이스와 같은 임의 읽기 및 쓰기 시나리오에 가장 유용한 알고리즘은 DEANLINE입니다.

커널 스택에서 IO 스케줄러의 위치는 다음과 같습니다.

一文搞懂 Linux 内核的 4 大 IO 调度算法

블록 장치에서 가장 비극적인 점은 디스크 회전인데, 이는 매우 시간이 많이 걸리는 프로세스입니다. 각 블록 장치 또는 블록 장치의 파티션은 자체 요청 대기열(request_queue)에 해당하며, 각 요청 대기열은 제출된 요청을 조정하기 위해 I/O 스케줄러를 선택할 수 있습니다.

I/O 스케줄러의 기본 목적은 블록 장치의 해당 섹터 번호에 따라 요청을 정렬하여 헤드 이동을 줄이고 효율성을 높이는 것입니다. 각 장치의 요청 대기열에 있는 요청은 순서대로 응답됩니다.

실제로 이 대기열 외에도 각 스케줄러 자체는 제출된 요청을 처리하기 위해 서로 다른 수의 대기열을 유지하며 대기열 상단에 있는 요청은 응답을 기다리기 위해 적절한 과정에서 요청 대기열로 이동됩니다.

一文搞懂 Linux 内核的 4 大 IO 调度算法

IO 스케줄러의 주요 기능은 디스크 회전의 필요성을 줄이는 것입니다. 주로 2가지 방법을 통해 달성됩니다:

  1. 병합
  2. 정렬

각 장치에는 해당 요청 대기열이 있으며 모든 요청은 처리되기 전에 요청 대기열에 있습니다. 새로운 요청이 올 때 이 요청의 위치가 이전 요청과 인접한 것으로 확인되면 하나의 요청으로 병합될 수 있습니다.

병합된 것을 찾을 수 없는 경우 디스크 회전 방향에 따라 정렬됩니다. 일반적으로 IO 스케줄러의 역할은 단일 요청의 처리 시간에 큰 영향을 주지 않고 병합하고 정렬하는 것입니다.

1、NOOP

一文搞懂 Linux 内核的 4 大 IO 调度算法

FIFO

  1. Noop은 입력 및 출력 스케줄링 알고리즘입니다. NOOP, No Operation은 요청을 하나씩 처리합니다. 이 방법이 실제로는 더 간단하고 더 효과적입니다. 문제는 기존 디스크에서는 허용되지 않는 디스크 검색이 너무 많다는 것입니다. 하지만 SSD 디스크의 경우에는 괜찮습니다. SSD 디스크는 회전할 필요가 없기 때문입니다.
  2. noop의 또 다른 이름은 엘리베이터 스케줄링 알고리즘이라고도 합니다.
  3. 누프의 원리는 무엇인가요?

입력 및 출력 요청을 FIFO 대기열에 넣은 다음 대기열에 있는 입력 및 출력 요청을 순서대로 실행합니다. 새 요청이 올 때:

  1. 병합이 가능하다면 병합하세요

  2. 병합할 수 없는 경우 정렬을 시도합니다. 대기열의 요청이 이미 매우 오래된 경우 이 새 요청은 대기열로 이동할 수 없으며 끝에만 배치될 수 있습니다. 그렇지 않으면 적절한 위치에 삽입하세요

  3. 병합이 불가능하고 삽입하기에 적합한 위치가 없는 경우 요청 대기열의 마지막에 배치됩니다.

  4. 적용 가능한 시나리오

    4.1 입력 및 출력 요청 순서를 수정하고 싶지 않은 경우

    4.2 NAS 저장 장치와 같이 입력 및 출력에 보다 지능적인 스케줄링 알고리즘을 갖춘 장치

    4.3 상위 계층 애플리케이션의 입력 및 출력 요청이 신중하게 최적화되었습니다.

    4.4 SSD 디스크와 같은 비회전 헤드 디스크 장치

2. CFQ (완전히 공정한 대기열)

CFQ(Completely Fair Queuing) 알고리즘은 이름에서 알 수 있듯이 절대적으로 공정한 알고리즘입니다. 스케줄러가 프로세스에 할당한 시간 조각 내에서 프로세스는 기본 블록 장치에 읽기 및 쓰기 요청을 보낼 수 있습니다. 프로세스의 타임 슬라이스가 소모되면 프로세스의 요청 큐는 일시 중지되어 예약을 기다립니다.

각 프로세스의 시간 조각과 각 프로세스의 대기열 길이는 프로세스의 IO 우선 순위에 따라 달라집니다. 각 프로세스에는 IO 우선 순위가 있으며 CFQ 스케줄러는 이를 프로세스를 결정하는 데 고려해야 할 요소 중 하나로 사용합니다. 요청 큐가 블록 장치 사용 권한을 얻을 수 있는 경우.

IO 우선순위는 높은 것부터 낮은 것까지 세 가지 범주로 나눌 수 있습니다.

RT(실시간)

BE(최선을 다해)
유휴(idle)

RT와 BE는 8개의 하위 우선순위로 더 나눌 수 있습니다. ionice를 통해 확인 및 수정이 가능합니다. 우선순위가 높을수록 더 일찍 처리되고, 이 프로세스에 더 많은 시간 조각이 사용되며, 한 번에 더 많은 요청을 처리할 수 있습니다.

사실, 우리는 CFQ 스케줄러의 공정성은 프로세스를 위한 것이며 프로세스에 대한 동기 요청(읽기 또는 동기화 쓰기)만 존재한다는 것을 이미 알고 있습니다. 이러한 요청은 프로세스의 자체 요청 대기열에 들어가고 모든 비동기 요청은 다음과 같습니다. 어떤 프로세스에서 나오든 동일한 우선순위가 공통 대기열에 배치됩니다. 총 8(RT) + 8(BE) + 1(IDLE) = 17개의 비동기 요청 대기열이 있습니다.

Linux 2.6.18부터 CFQ가 기본 IO 스케줄링 알고리즘으로 사용됩니다. 범용 서버의 경우 CFQ가 더 나은 선택입니다. 사용할 구체적인 스케줄링 알고리즘은 특정 비즈니스 시나리오를 기반으로 한 충분한 벤치마크를 기반으로 선택해야 하며, 다른 사람의 말만으로는 결정할 수 없습니다.

3.DEADLINE

DEADLINE은 CFQ를 기반으로 IO 요청이 고갈되는 극단적인 상황을 해결합니다.

CFQ 자체에 있는 IO 정렬 대기열 외에도 DEADLINE은 읽기 IO 및 쓰기 IO를 위한 FIFO 대기열을 추가로 제공합니다.

一文搞懂 Linux 内核的 4 大 IO 调度算法FIFO 대기열 읽기를 위한 최대 대기 시간은 500ms이고 FIFO 대기열 쓰기를 위한 최대 대기 시간은 5초입니다(물론 이러한 매개변수는 수동으로 설정할 수 있습니다).

FIFO 대기열의 IO 요청 우선순위는 CFQ 대기열의 우선순위보다 높고, 읽기 FIFO 대기열의 우선순위는 쓰기 FIFO 대기열의 우선순위보다 높습니다. 우선순위는 다음과 같이 표현될 수 있습니다:

FIFO(읽기) > FIFO(쓰기) > CFQ

마감일 알고리즘은 주어진 IO 요청에 대한 최소 지연 시간을 보장하므로 DSS 애플리케이션에 매우 적합합니다.

마감일은 실제로 Elevator의 개선 사항입니다:

1. 너무 오랫동안 처리할 수 없는 요청은 피하세요.

2. 읽기 작업과 쓰기 작업을 구별합니다.

deadline IO는 3개의 대기열을 유지합니다. 첫 번째 대기열은 Elevator와 동일하며 물리적 위치에 따라 정렬하려고 합니다. 두 번째 큐와 세 번째 큐는 모두 시간별로 정렬되어 있는데, 차이점은 하나는 읽기 작업이고 다른 하나는 쓰기 작업입니다.

Deadline IO는 읽기와 쓰기를 구분합니다. 디자이너는 애플리케이션이 읽기 요청을 보내면 일반적으로 거기서 차단되고 결과가 반환될 때까지 기다릴 것이라고 믿기 때문입니다. 쓰기 요청은 일반적으로 메모리에 쓰기 위한 애플리케이션 요청이 아니며, 백그라운드 프로세스가 이를 디스크에 다시 씁니다. 응용프로그램은 일반적으로 쓰기가 완료될 때까지 기다리지 않고 계속합니다. 따라서 읽기 요청은 쓰기 요청보다 우선순위가 높아야 합니다.

이 설계에서는 각각의 새로운 요청이 첫 번째 대기열에 먼저 배치됩니다. 알고리즘은 Elevator의 알고리즘과 동일하며 읽기 또는 쓰기 대기열의 끝에 추가됩니다. 이런 방식으로 우리는 먼저 첫 번째 대기열의 일부 요청을 처리하고 동시에 두 번째/세 번째 대기열의 처음 몇 요청이 너무 오랫동안 대기했는지 여부를 감지하여 임계값을 초과한 경우 처리됩니다. 이 임계값은 읽기 요청의 경우 5ms, 쓰기 요청의 경우 5초입니다.

개인적으로는 Oracle의 온라인 로그, MySQL의 binlog 등 데이터베이스 변경 로그를 기록하는 데 이런 파티션을 사용하지 않는 것이 가장 좋다고 생각합니다. 이러한 유형의 쓰기 요청은 일반적으로 fsync를 호출하기 때문입니다. 작성을 완료할 수 없는 경우에도 응용 프로그램 성능에 큰 영향을 미칩니다.

4. 예측

CFQ 및 DEADLINE은 분산된 IO 요청을 충족하는 데 중점을 둡니다. 순차 읽기와 같은 지속적인 IO 요청의 경우 최적화가 없습니다.

혼합 무작위 IO 및 순차 IO 시나리오를 충족하기 위해 Linux는 ANTICIPATORY 스케줄링 알고리즘도 지원합니다. DEADLINE을 기준으로 ANTICIPATORY는 각 읽기 IO에 대해 6ms의 대기 시간 창을 설정합니다. OS가 이 6ms 내에 인접한 위치로부터 읽기 IO 요청을 받으면 즉시 만족할 수 있습니다.

요약

IO 스케줄러 알고리즘의 선택은 하드웨어 특성과 애플리케이션 시나리오에 따라 달라집니다.

기존 SAS 디스크에서는 CFQ, DEADLINE 및 ANTICIPATORY가 모두 전용 데이터베이스 서버에 적합하며 DEADLINE은 처리량 및 응답 시간 측면에서 좋은 성능을 발휘합니다.

그러나 SSD 및 Fusion IO와 같은 새로운 솔리드 스테이트 드라이브에서는 가장 간단한 NOOP가 최고의 알고리즘이 될 수 있습니다. 왜냐하면 다른 세 가지 알고리즘의 최적화는 검색 시간 단축을 기반으로 하고 솔리드 스테이트 드라이브에는 그렇지 않기 때문입니다. 탐색 시간이라고 하며 IO 응답 ​​시간이 매우 짧습니다.

一文搞懂 Linux 内核的 4 大 IO 调度算法

위 내용은 하나의 기사로 Linux 커널의 네 가지 주요 IO 스케줄링 알고리즘을 이해하세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Centos와 Ubuntu의 차이 Centos와 Ubuntu의 차이 Apr 14, 2025 pm 09:09 PM

Centos와 Ubuntu의 주요 차이점은 다음과 같습니다. Origin (Centos는 Red Hat, Enterprise의 경우, Ubuntu는 Debian에서 시작하여 개인의 경우), 패키지 관리 (Centos는 안정성에 중점을 둡니다. Ubuntu는 APT를 사용하여 APT를 사용합니다), 지원주기 (Ubuntu는 5 년 동안 LTS 지원을 제공합니다), 커뮤니티에 중점을 둔다 (Centos Conciors on ubuntu). 튜토리얼 및 문서), 사용 (Centos는 서버에 편향되어 있으며 Ubuntu는 서버 및 데스크탑에 적합), 다른 차이점에는 설치 단순성 (Centos는 얇음)이 포함됩니다.

Docker 원리에 대한 자세한 설명 Docker 원리에 대한 자세한 설명 Apr 14, 2025 pm 11:57 PM

Docker는 Linux 커널 기능을 사용하여 효율적이고 고립 된 응용 프로그램 실행 환경을 제공합니다. 작동 원리는 다음과 같습니다. 1. 거울은 읽기 전용 템플릿으로 사용되며, 여기에는 응용 프로그램을 실행하는 데 필요한 모든 것을 포함합니다. 2. Union 파일 시스템 (Unionfs)은 여러 파일 시스템을 스택하고 차이점 만 저장하고 공간을 절약하고 속도를 높입니다. 3. 데몬은 거울과 컨테이너를 관리하고 클라이언트는 상호 작용을 위해 사용합니다. 4. 네임 스페이스 및 CGroup은 컨테이너 격리 및 자원 제한을 구현합니다. 5. 다중 네트워크 모드는 컨테이너 상호 연결을 지원합니다. 이러한 핵심 개념을 이해 함으로써만 Docker를 더 잘 활용할 수 있습니다.

Docker Desktop을 사용하는 방법 Docker Desktop을 사용하는 방법 Apr 15, 2025 am 11:45 AM

Docker Desktop을 사용하는 방법? Docker Desktop은 로컬 머신에서 Docker 컨테이너를 실행하는 도구입니다. 사용 단계는 다음과 같습니다. 1. Docker Desktop 설치; 2. Docker Desktop을 시작하십시오. 3. Docker 이미지를 만듭니다 (Dockerfile 사용); 4. Docker Image 빌드 (Docker 빌드 사용); 5. 도커 컨테이너를 실행하십시오 (Docker Run 사용).

Centos는 유지 보수를 중지합니다. 2024 Centos는 유지 보수를 중지합니다. 2024 Apr 14, 2025 pm 08:39 PM

Centos는 2024 년에 상류 분포 인 RHEL 8이 종료 되었기 때문에 폐쇄 될 것입니다. 이 종료는 CentOS 8 시스템에 영향을 미쳐 업데이트를 계속받지 못하게합니다. 사용자는 마이그레이션을 계획해야하며 시스템을 안전하고 안정적으로 유지하기 위해 Centos Stream, Almalinux 및 Rocky Linux가 포함됩니다.

Centos를 설치하는 방법 Centos를 설치하는 방법 Apr 14, 2025 pm 09:03 PM

CentOS 설치 단계 : ISO 이미지를 다운로드하고 부팅 가능한 미디어를 실행하십시오. 부팅하고 설치 소스를 선택하십시오. 언어 및 키보드 레이아웃을 선택하십시오. 네트워크 구성; 하드 디스크를 분할; 시스템 시계를 설정하십시오. 루트 사용자를 만듭니다. 소프트웨어 패키지를 선택하십시오. 설치를 시작하십시오. 설치가 완료된 후 하드 디스크에서 다시 시작하고 부팅하십시오.

Centos에서 Gitlab의 백업 방법은 무엇입니까? Centos에서 Gitlab의 백업 방법은 무엇입니까? Apr 14, 2025 pm 05:33 PM

CentOS 시스템 하에서 Gitlab의 백업 및 복구 정책 데이터 보안 및 복구 가능성을 보장하기 위해 CentOS의 Gitlab은 다양한 백업 방법을 제공합니다. 이 기사는 완전한 GITLAB 백업 및 복구 전략을 설정하는 데 도움이되는 몇 가지 일반적인 백업 방법, 구성 매개 변수 및 복구 프로세스를 자세히 소개합니다. 1. 수동 백업 gitlab-rakegitlab : 백업 : 명령을 작성하여 수동 백업을 실행하십시오. 이 명령은 gitlab 저장소, 데이터베이스, 사용자, 사용자 그룹, 키 및 권한과 같은 주요 정보를 백업합니다. 기본 백업 파일은/var/opt/gitlab/backups 디렉토리에 저장됩니다. /etc /gitlab을 수정할 수 있습니다

센토에 하드 디스크를 장착하는 방법 센토에 하드 디스크를 장착하는 방법 Apr 14, 2025 pm 08:15 PM

Centos Hard Disk Mount는 다음 단계로 나뉩니다. 하드 디스크 장치 이름 (/dev/sdx)을 결정하십시오. 마운트 포인트를 만듭니다 ( /mnt /newdisk를 사용하는 것이 좋습니다); 마운트 명령을 실행합니다 (mount /dev /sdx1 /mnt /newdisk); 영구 마운트 구성을 추가하려면 /etc /fstab 파일을 편집하십시오. Umount 명령을 사용하여 장치를 제거하여 프로세스가 장치를 사용하지 않도록하십시오.

Centos 후해야 할 일은 유지 보수를 중단합니다 Centos 후해야 할 일은 유지 보수를 중단합니다 Apr 14, 2025 pm 08:48 PM

Centos가 중단 된 후 사용자는 다음과 같은 조치를 취할 수 있습니다. Almalinux, Rocky Linux 및 Centos 스트림과 같은 호환되는 분포를 선택하십시오. Red Hat Enterprise Linux, Oracle Linux와 같은 상업 분포로 마이그레이션합니다. Centos 9 Stream : 롤링 분포로 업그레이드하여 최신 기술을 제공합니다. Ubuntu, Debian과 같은 다른 Linux 배포판을 선택하십시오. 컨테이너, 가상 머신 또는 클라우드 플랫폼과 같은 다른 옵션을 평가하십시오.

See all articles