카테고리 없음

디스크 스케줄러 설정

미니대왕님 2023. 6. 23. 09:55
[root@m-k8s queue]# cat /sys/block/dm-0/queue/scheduler
none
[root@m-k8s queue]# cat /sys/block/dm-1/queue/scheduler
none
[root@m-k8s queue]# cat /sys/block/sda/queue/scheduler
noop [deadline] cfq
[root@m-k8s queue]# cat /sys/block/sr0/queue/scheduler
noop [deadline] cfq

cat /sys/block/dm-0/queue/scheduler
cat /sys/block/dm-1/queue/scheduler
cat /sys/block/sda/queue/scheduler
cat /sys/block/sr0/queue/scheduler


lrwxrwxrwx  1 root root 0 Jun 21 04:59 loop0 -> ../devices/virtual/block/loop0/
lrwxrwxrwx  1 root root 0 Jun 21 04:59 loop1 -> ../devices/virtual/block/loop1/
lrwxrwxrwx  1 root root 0 Jun 21 04:59 loop10 -> ../devices/virtual/block/loop10/
lrwxrwxrwx  1 root root 0 Jun 21 04:59 loop11 -> ../devices/virtual/block/loop11/
lrwxrwxrwx  1 root root 0 Jun 21 04:59 loop12 -> ../devices/virtual/block/loop12/
lrwxrwxrwx  1 root root 0 Jun 21 04:59 loop13 -> ../devices/virtual/block/loop13/
lrwxrwxrwx  1 root root 0 Jun 21 04:59 loop14 -> ../devices/virtual/block/loop14/
lrwxrwxrwx  1 root root 0 Jun 21 04:59 loop15 -> ../devices/virtual/block/loop15/
lrwxrwxrwx  1 root root 0 Jun 21 05:00 loop16 -> ../devices/virtual/block/loop16/
lrwxrwxrwx  1 root root 0 Jun 21 04:59 loop2 -> ../devices/virtual/block/loop2/
lrwxrwxrwx  1 root root 0 Jun 21 04:59 loop3 -> ../devices/virtual/block/loop3/
lrwxrwxrwx  1 root root 0 Jun 21 04:59 loop4 -> ../devices/virtual/block/loop4/
lrwxrwxrwx  1 root root 0 Jun 21 04:59 loop5 -> ../devices/virtual/block/loop5/
lrwxrwxrwx  1 root root 0 Jun 21 04:59 loop6 -> ../devices/virtual/block/loop6/
lrwxrwxrwx  1 root root 0 Jun 21 04:59 loop7 -> ../devices/virtual/block/loop7/
lrwxrwxrwx  1 root root 0 Jun 21 04:59 loop8 -> ../devices/virtual/block/loop8/
lrwxrwxrwx  1 root root 0 Jun 21 04:59 loop9 -> ../devices/virtual/block/loop9/
lrwxrwxrwx  1 root root 0 Jun 21 04:59 sda -> ../devices/pci0000:00/0000:00:14.0/host2/target2:0:0/2:0:0:0/block/sda/
lrwxrwxrwx  1 root root 0 Jun 21 04:59 sdb -> ../devices/pci0000:00/0000:00:14.0/host2/target2:0:1/2:0:1:0/block/sdb/
root@master:/sys/block# cd loop0/
root@master:/sys/block/loop0# ll

1. 디스크 스케줄러는 저장 장치에 제출된 I/O 요청의 순서를 지정합니다.

2. 여러 가지 방법으로 스케줄러를 구성할 수 있습니다.

3. TuneD를 사용하여 디스크 스케줄러 설정 에 설명된 대로 TuneD를 사용하여 스케줄러 를 설정합니다.

4. udev 규칙을 사용하여 디스크 스케줄러 설정udev 에 설명된 대로 를 사용하여 스케줄러를 설정합니다.

5. 특정 디스크에 대한 스케줄러 임시 설정에 설명된 대로 실행 중인 시스템에서 스케줄러를 일시적으로 변경합니다.

6. Red Hat Enterprise Linux 8에서 블록 장치는 다중 대기열 스케줄링만 지원합니다. 
7. 이를 통해 블록 레이어성능이빠른 SSD(Solid-State Drive) 및 멀티 코어 시스템으로 잘 확장될 수 있습니다.

8. Red Hat Enterprise Linux 7 및 이전 버전에서 사용할 수 있었던 기존의 단일 대기열 스케줄러는 제거되었습니다.

 

# 사용 가능한 디스크 스케줄러

     :  다중 대기열 디스크 스케줄러는 Red Hat Enterprise Linux 8에서 지원됩니다

1. none선입선출(FIFO) 스케줄링 알고리즘을 구현합니다. 간단한 마지막 적중 캐시를 통해 일반 블록 계층에서
    요청을병합합니다.
2. mq-deadline : 요청이 스케줄러에 도달하는 시점부터 요청에 대해 보장된 대기 시간을 제공하려고 시도합니다.
mq-deadline : 대기 중인 I/O 요청을 읽기 또는 쓰기 배치로 정렬한 다음 LBA(논리 블록 주소 지정) 
              순서가 증가하는 대로 실행하도록 예약합니다. 애플리케이션이 읽기 I/O 작업을 차단할 
              가능성이 높기 때문에 기본적으로 읽기 일괄처리가 쓰기 일괄 처리보다 우선합니다. 
              배치를 처리 한 후 mq-deadline쓰기 작업에 프로세서 시간이 부족한 시간을 확인하고 
              적절하게 다음 읽기 또는 쓰기 배치를 예약합니다.

              이 스케줄러는 대부분의 사용 사례에 적합하지만 특히 쓰기 작업이 대부분 비동기인 
              경우에 적합합니다.

3. bfq : 데스크톱 시스템 및 대화형 작업을 대상으로 합니다.

스케줄러 bfq :  단일 애플리케이션이 모든 대역폭을 사용하지 않도록 합니다. 실제로 저장 장치는 마치 
               유휴 상태인 것처럼 항상 반응합니다. 기본 구성에서는 bfq최대 처리량을 달성하는 것보다
               대기 시간을 가장 짧게 제공하는 데 중점을 둡니다. bfq코드를 기반으로 합니다 cfq. 
               고정된 시간 조각에 대해 각 프로세스에 디스크를 부여하지 않고 섹터 수로 측정된 예산을 
               프로세스에 할당합니다. 이 스케줄러는 대용량 파일을 복사하는 데 적합하며 이 경우 시스템이
               응답하지 않는 상태가 되지 않습니다.

4. kyber : 스케줄러는 블록 I/O 계층 

kyber : 제출된 모든 I/O 요청의 대기 시간을 계산하여 대기 시간 목표를 달성하도록 자체 조정합니다. 
        캐시 누락 및 동기식 쓰기 요청의 경우 읽기에 대한 대상 대기 시간을 구성할 수 있습니다. 
        이 스케줄러는 NVMe, SSD 또는 기타 대기 시간이 짧은 장치와 같은 빠른 장치에 적합합니다.
 

# 다양한 디스크 스케줄러

 디스크 스케줄러

사용사례 디스크 스케쥴러
SCSI 인터페이스가 있는 기존 HDD mq-deadline또는 를 사용하십시오 bfq.
고성능 SSD 또는 빠른 스토리지를 갖춘 CPU 기반 시스템 none특히 엔터프라이즈 응용 프로그램을 실행할 때 를 사용하십시오 . 또는 를 사용하십시오 kyber.
데스크톱 또는 대화형 작업 사용하십시오 bfq.
가상 손님 사용하십시오 mq-deadline. 다중 대기열이 가능한 HBA(호스트 버스 어댑터) 드라이버와 함께 none.

#. 기본 디스크 스케줄러

블록 장치는 다른 스케줄러를 지정하지 않는 한 기본 디스크 스케줄러를 사용합니다.

메모

특히 블록 장치 의 경우 non-volatile Memory Express (NVMe)기본 스케줄러는 none이며 Red Hat은 이를 변경하지

않을 것을 권장합니다.

커널은 장치 유형에 따라 기본 디스크 스케줄러를 선택합니다. 자동으로 선택된 스케줄러가 일반적으로 최적의 설정입니다. 다른 스케줄러가 필요한 경우 Red Hat은 udev규칙 또는 TuneD 애플리케이션을 사용하여 구성할 것을 권장합니다. 선택한 장치를 일치시키고 해당 장치에 대해서만 스케줄러를 전환하십시오.

#. 활성 디스크 스케줄러 결정

이 절차는 지정된 블록 장치에서 현재 활성화된 디스크 스케줄러를 결정합니다.

절차

  • 파일 내용 읽기 : /sys/block/device/queue/scheduler파일 이름에서 device를 블록 장치 이름(예: )으로 바꿉니다 sdc.
  • 활성 스케줄러는 대괄호( [ ]) 안에 나열됩니다.
    # cat /sys/block/ device /queue/scheduler
    
    [mq-deadline] kyber bfq 없음
# cat /sys/block/ device /queue/scheduler

[mq-deadline] kyber bfq 없음

#. TuneD를 사용하여 디스크 스케줄러 설정

이 절차는 선택한 블록 장치에 대해 지정된 디스크 스케줄러를 설정하는 TuneD 프로필을 생성하고 활성화합니다 . 

이 설정은 시스템을 재부팅해도 지속됩니다. 다음 명령 및 구성에서 다음을 바꿉니다.

  • 예를 들어 블록 장치의 이름을 가진 장치 /sdf
  • 예를 들어 장치에 대해 설정하려는 디스크 스케줄러가 포함 된 selected-schedulerbfq

전제 조건

절차

  1. 선택 사항: 프로필의 기반이 될 기존 TuneD 프로필을 선택합니다. 사용 가능한 프로필 목록은 RHEL과 함께 배포된 TuneD 프로필을 참조하세요 .
    $ tuned-adm 활성
  2. 현재 활성화된 프로필을 보려면 다음을 사용하십시오.
  3. TuneD 프로필을 보관할 새 디렉터리를 만듭니다 .
    # mkdir /etc/tuned/ 내 프로필
  4. 선택한 블록 장치의 시스템 고유 식별자를 찾습니다.
    메모

    이 예제의 명령은 WWN(World Wide Name) 또는 지정된 블록 장치와 관련된 일련 번호로 식별되는 모든 값을 반환합니다. WWN을 사용하는 것이 좋지만 지정된 장치에 대해 WWN을 항상 사용할 수 있는 것은 아니며 예제 명령에서 반환된 모든 값을 장치 시스템 고유 ID 로 사용할 수 있습니다 .

  5. $ udevadm 정보 --query=property --name=/dev/ 장치 | grep -E '(WWN|SERIAL)'
    
    ID_WWN= 0x5002538d00000000_ 
    ID_SERIAL= 일반-_SD_MMC_20120501030900000-0:0 
    ID_SERIAL_SHORT= 20120501030900000
  6. 구성 파일을 만듭니다 . 파일에서 다음 옵션을 설정합니다. /etc/tuned/my-profile/tuned.conf
    1. 선택 사항: 기존 프로필을 포함합니다.
      [기본]
      include= 기존 프로필
    2. WWN 식별자와 일치하는 장치에 대해 선택한 디스크 스케줄러를 설정합니다.여기:
      • IDNAME을 사용 중인 식별자의 이름으로 바꿉니다 (예: ID_WWN).
      • 기기 시스템 고유 ID를 선택한 식별자의 값(예: )으로 바꿉니다 0x5002538d00000000.
        devices_udev_regex=(ID_WWN= 0x5002538d00000000 )|(ID_WWN= 0x1234567800000000 )
      • 옵션 에서 여러 장치를 일치시키려면 devices_udev_regex식별자를 괄호로 묶고 세로 막대로 구분합니다.
        [디스크]
        devices_udev_regex= IDNAME = 장치 시스템 고유 ID 
        elevator= selected-scheduler
  7. 프로필 활성화:
    # tuned-adm 프로필 내 프로필

확인 단계

  1. TuneD 프로필이 활성화되고 적용되었는지 확인합니다.
    $ 조정-adm 확인
    
    확인 성공, 현재 시스템 설정이 사전 설정 프로필과 일치합니다.
    자세한 내용은 TuneD 로그 파일('/var/log/tuned/tuned.log')을 참조하십시오.
  2. $ tuned-adm 활성
    
    현재 활성 프로필: my-profile
  3. 파일 의 내용을 읽습니다 . /sys/block/device/queue/scheduler파일 이름에서 device를 블록 장치 이름(예: )으로 바꿉니다 sdc.
  4. 활성 스케줄러는 대괄호( []) 안에 나열됩니다.
  5.  
    # cat /sys/block/ device /queue/scheduler
    
    [mq-deadline] kyber bfq 없음

추가 리소스

12.6. udev 규칙을 사용하여 디스크 스케줄러 설정

이 절차는 규칙을 사용하여 특정 블록 장치에 대해 지정된 디스크 스케줄러를 설정합니다 udev. 이 설정은 시스템을 재부팅해도 지속됩니다.

다음 명령 및 구성에서 다음을 바꿉니다.

  • 예를 들어 블록 장치의 이름을 가진 장치sdf
  • 예를 들어 장치에 대해 설정하려는 디스크 스케줄러가 포함 된 selected-schedulerbfq

절차

  1. 블록 장치의 시스템 고유 식별자를 찾습니다.
    메모

    이 예제의 명령은 WWN(World Wide Name) 또는 지정된 블록 장치와 관련된 일련 번호로 식별되는 모든 값을 반환합니다. WWN을 사용하는 것이 좋지만 지정된 장치에 대해 WWN을 항상 사용할 수 있는 것은 아니며 예제 명령에서 반환된 모든 값을 장치 시스템 고유 ID 로 사용할 수 있습니다 .

  2. $ udevadm 정보 --name=/dev/ 장치 | grep -E '(WWN|SERIAL)'
    E: ID_WWN= 0x5002538d00000000 
    E: ID_SERIAL= Generic-_SD_MMC_20120501030900000-0:0 
    E: ID_SERIAL_SHORT= 20120501030900000
  3. 규칙을 구성합니다 udev. /etc/udev/rules.d/99-scheduler.rules다음 내용으로 파일을 만듭니다 .여기:
    • IDNAME을 사용 중인 식별자의 이름으로 바꿉니다 (예: ID_WWN).
    • 기기 시스템 고유 ID를 선택한 식별자의 값(예: )으로 바꿉니다 0x5002538d00000000.
  4. ACTION=="추가|변경", SUBSYSTEM=="차단", ENV{ IDNAME }==" 장치 시스템 고유 ID ", ATTR{queue/scheduler}=" selected-scheduler "
  5. 다시 로드 udev규칙:
  6. # udevadm 제어 --reload-rules
  7. 스케줄러 구성을 적용합니다.
  8. # udevadm 트리거 --type=devices --action=변경

확인 단계

  • 활성 스케줄러를 확인합니다.
  • # cat /sys/block/ device /queue/scheduler

12.7. 특정 디스크에 대한 스케줄러 임시 설정

이 절차는 특정 블록 장치에 대해 지정된 디스크 스케줄러를 설정합니다. 이 설정은 시스템 재부팅 시 지속되지 않습니다.

절차

  • 선택한 스케줄러의 이름을 파일에 씁니다 . /sys/block/device/queue/scheduler파일 이름에서 device를 블록 장치 이름(예: )으로 바꿉니다 sdc.
  • # echo selected-scheduler > /sys/block/ device /queue/scheduler

확인 단계

  • 기기에서 스케줄러가 활성화되어 있는지 확인합니다.
  • # cat /sys/block/ device /queue/scheduler