지속적인 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) blockdevhdparm( 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.