지속적인 blockdev 설정 미리 읽기 설정


14

나는 약간의 SSD가 위로 장착있어 /dev/sda1및 /dev/sdb1SLES 11 SP2 서버에, 나는이 (가)로 설정 미리 읽기 조정할 수 있었다 blockdev --setra:

sudo blockdev --setra 4096 /dev/sda
sudo blockdev --setra 4096 /dev/sdb
sudo blockdev --getra /dev/sda
4096
sudo blockdev --getra /dev/sdb
4096

부팅시이 설정을 유지하려면 어떻게합니까? 특히,에 해당 설정 sysctl.conf이 있습니까? 아니면 rc 스크립트가이를 수행하도록 설정해야합니까?


2
이에 대한 '적절한'솔루션이 있는지는 모르겠지만 udev 규칙은 RC 스크립트보다 더 적합 할 것입니다.
— Patrick

3
SSD BTW에서 미리 읽기 를 늘리려 는 이유는 무엇 입니까? SSD의 탐색 시간이 짧다는 점을 알 수 없습니다.
— Stéphane Chazelas

답변:


16

udev를 사용하여 SSD 디스크의 매개 변수를 설정하는 것이 좋습니다. 이렇게하면 SSD 등에 더 적합한 특정 대기열 스케줄러를 구성 할 수 있습니다. 또한 많은 매개 변수를 기반으로 일부 장치에만 매개 변수를 적용 할 수 있습니다.

다음을 실행하여 장치 (예 : 디스크 모델 및 제조업체)와 일치시키는 데 필요한 특정 속성을 얻을 수 있습니다.

udevadm info -a -p /sys/block/sda

그리고 블록 장치에 대한 모든 ATTR 쌍을 확인하십시오.

또 다른 이점은 플러그 가능 디스크 (예 : 인클로저 또는 핫스왑 베이)에 대한 매개 변수를 설정하는 기능이며 장치 매개 변수가 일치하는 경우 모든 새 장치에 설정이 적용됩니다.

다음은 Intel SSD의 특정 스케줄러, 원하는 미리 읽기 값 (4096 블록 = 2048kb)을 적용하고 다른 모든 SSD에 대해 다른 스케줄러를 적용하는 예입니다.

cat /etc/udev/rules.d/99-ssd.rules
# http://unix.stackexchange.com/a/71409/36574
# Setting specific kernel parameters for a subset of block devices (Intel SSDs)
SUBSYSTEM=="block", ATTRS{model}=="Intel SSDSC*", ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{bdi/read_ahead_kb}="2048", ATTR{queue/scheduler}="deadline"
# for all other non-rotational block devices set a scheduler to 'noop' and readahead to 1024KB
SUBSYSTEM=="block", ATTR{queue/rotational}=="0", ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{bdi/read_ahead_kb}="1024", ATTR{queue/scheduler}="noop"

파일을 저장 한 후 규칙이 장치와 일치하는지 그리고 udevadm을 사용하여 udev가 수행 할 작업을 테스트 할 수 있습니다.

udevadm test --action=add /sys/block/sda

이것은 udev가로드하는 모든 규칙, 일치하는 것, 일치하지 않는 것 및 장치가 연결될 때 udev가 내리는 결정을 인쇄합니다.

도움이 되었기를 바랍니다.


좋은 정보. 나는 기회를 얻고 당신에게 돌아올 때 비슷한 udev 규칙을 시도 할 것입니다. 우리는를 사용 OCZ vertex 3하고 있지만 제안 된 규칙이 모델 필드를 제외하고 인텔에만 해당되는 것으로 생각하지 않습니까?
— Banjer

예, 인텔 SSD에만 해당되는 것은 없으며 속성별로 필터링하는 예제로 사용했습니다. udevadm info하드웨어에 특정한 매개 변수를 찾으 려면 사용해야 합니다.
— zorlem

10

미리 읽기는 적어도 /sys( /sys/class/block/sda/queue/read_ahead_kb) blockdev및 hdparm( hdparm -a) 를 통해 설정할 수 있습니다 .

hdparm데비안과 그 파생 제품에는 hdparm.conf부팅시 및 핫 플러그시 ( udev규칙을 통해 ) 장치 별 속성을 지정 하는 기능 이 있습니다 .

그래서 당신은 가질 수 있습니다 :

/dev/disk/by-id/my-disk... {
  read_ahead_sect = 4096
}

( sda한 부팅에서 다음 부팅으로 변경할 수있는 것보다 ID를 사용하는 것이 좋습니다 ).


hdparmSLES 11에서 볼 수 있지만 찾을 수없는 것 같습니다 hdparm.conf. Google은 hdparm적어도 SuSE에서 설정을 유지 하려면 rc 스크립트가 필요하다고 말합니다 .
— Banjer

@Banjer, 그렇습니다. 데비안 확장 (Ubuntu에서 약간 수정되었습니다) : 초기 부팅시 실행되는 쉘 스크립트와 파일을 구문 분석하고 hdparm그에 따라 호출하는 장치 핫 플러그입니다 . 답변을 업데이트했습니다.
— Stéphane Chazelas

/sys@zorlem udev규칙은 부팅 구성에 꽤 좋지만 경로 를 지정하기 위해 +1입니다 .
— Totor

-1

에 해당하는 것은 sysctl없으므로 그렇습니다 /etc/rc.local. 개인적으로 우분투에서는 부팅 후 변경 사항이 한 번 더 설정되므로 변경 사항 crontab을 유지하는 데 사용 하는 것이 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.