태그 보관물: block-device

block-device

LVM, Device-Mapper, Software Raid 및 Block Devices에 대한 Readahead 설정-무엇이 이길까요? StartSec

나는 이것에 대한 정답을 찾으려고 노력해 왔으며 애매한 것으로 판명되었습니다. 이 질문답변 은 가깝지만 실제로 원하는 세부 사항을 제공하지는 않습니다. 내가 아는 것부터 시작해 봅시다.

표준 블록 장치가 있고 실행 sudo blockdev --report하면 다음과 같은 결과가 나타납니다.

RO    RA   SSZ   BSZ   StartSec            Size   Device
rw   256   512  4096          0    500107862016   /dev/sda
rw   256   512  4096       2048    399999238144   /dev/sda1
rw   256   512  1024  781252606            1024   /dev/sda2

이제 --setra파티션 중 하나를 사용하여 기본 256을 128로 변경하기로 결정하면 다음 과 같이 전체 블록 장치에서 발생합니다.

sudo blockdev --setra 128 /dev/sda1
sudo blockdev --report
RO    RA   SSZ   BSZ   StartSec            Size   Device
rw   128   512  4096          0    500107862016   /dev/sda
rw   128   512  4096       2048    399999238144   /dev/sda1
rw   128   512  1024  781252606            1024   /dev/sda2

이것은 나에게 완벽하게 이해됩니다. 블록 레벨 장치는 파티션이 아닌 설정이있는 곳이므로 모든 것이 변경됩니다. 또한 RA 설정과 장치 사이의 기본 관계는 나에게 의미가 있습니다. 일반적으로 다음과 같습니다.

RA * sector size (default = 512 bytes)

따라서 기본 섹터 크기를 사용하여 위에서 변경 한 내용은 미리 읽기가 128k에서 64k로 떨어집니다. 지금까지는 모든 것이 좋았습니다.

그러나 소프트웨어 RAID 또는 LVM 및 장치 매퍼를 추가하면 어떻게됩니까? 보고서가 다음과 같다고 상상해보십시오.

RO    RA   SSZ   BSZ   StartSec            Size   Device
rw   256   512  4096          0     10737418240   /dev/xvda1
rw   256   512  4096          0    901875499008   /dev/xvdb
rw   256   512  4096          0    108447924224   /dev/xvdj
rw   256   512  4096          0    108447924224   /dev/xvdi
rw   256   512  4096          0    108447924224   /dev/xvdh
rw   256   512  4096          0    108447924224   /dev/xvdg
rw  4096   512  4096          0    433787502592   /dev/md0
rw  4096   512   512          0    429496729600   /dev/dm-0

이 경우 mdadm으로 만든 md0 위에 장치 매핑 된 dm-0 LVM 장치가 있습니다. 이는 실제로 4 개의 장치 xvdg-j에 걸쳐 RAID0 스트라이프입니다.

md0과 dm-0은 모두 블록 장치보다 훨씬 높은 RA에 대해 4096으로 설정되어 있습니다. 여기 몇 가지 질문이 있습니다.

  • RA 설정은 가상 블록 장치 체인으로 어떻게 전달됩니까?
  • dm-0은 실제로 액세스하는 최상위 블록 장치이기 때문에 모든 것을 능가합니까?
  • 것인가 lvchange -r는 DM-0 장치에 영향을하고 여기에 표시하지?

간단하다면 사용중인 가상 블록 장치의 RA 설정이 전달됩니다. 이는 dm-0 (또는 md0)의 읽기가 4 x 4096 RA 읽기로 변환됨을 의미합니까? (각 블록 장치에 하나씩). 그렇다면 이러한 설정이 위 시나리오에서 미리 읽기의 크기를 폭발적으로 의미합니다.

그런 다음 미리 읽기 설정이 실제로 수행하는 작업을 파악하는 관점에서 :

가상 장치의 실제 미리 읽기 값을 결정하기 위해 위의 섹터 크기에 해당하는 것을 사용하십시오.

  • RAID의 스트라이프 크기 (md0)?
  • 다른 섹터 크기에 해당합니까?
  • 구성 가능하고 어떻게?
  • FS가 중요한 역할을합니까 (주로 ext4 및 XFS에 관심이 있습니까)?
  • 또는 방금 전달 된 경우 최상위 장치의 RA 설정에 실제 블록 장치의 섹터 크기를 곱한 것입니까?

마지막으로 스트라이프 크기와 RA 설정간에 선호되는 관계가 있습니까? 여기서 스트라이프가 RAID 장치에서 제거 될 가장 작은 요소 인 경우 최소 데이터 단위를 서비스하기 위해 2 개의 디스크 액세스가 필요하지 않으며 RA를 만들고 싶을 것입니다. 단일 액세스로 요청을 수행 할 수있을만큼 큽니다.



답변

RA 설정은 가상 블록 장치 체인으로 어떻게 전달됩니까?

따라 다릅니다. Xen domU 내부에 있고 RA = 256이라고 가정합니다. / dev / xvda1은 / dev / dm1 아래에 보이는 dom0의 실제 LV입니다. 따라서 RA (domU (/ dev / xvda1)) = 256이고 RA (dom0 (/ dev / dm1)) = 512입니다. dom0 커널은 domU 커널 이외의 다른 RA를 사용하여 / dev / dm1에 액세스합니다. 그렇게 간단합니다.

/ dev / md0 (/ dev / sda1, / dev / sda2) sittuation이라고 가정하면 또 다른 sittutation이 발생합니다.

blockdev --report | grep sda
rw   **512**   512  4096          0   1500301910016   /dev/sda
rw   **512**   512  4096       2048      1072693248   /dev/sda1
rw   **512**   512  4096    2097152   1499227750400   /dev/sda2
blockdev --setra 256 /dev/sda1
blockdev --report | grep sda
rw   **256**   512  4096          0   1500301910016   /dev/sda
rw   **256**   512  4096       2048      1072693248   /dev/sda1
rw   **256**   512  4096    2097152   1499227750400   /dev/sda2

/ dev / md0 RA를 설정해도 / dev / sdX 블록 장치에는 영향을 미치지 않습니다.

rw   **256**   512  4096       2048      1072693248   /dev/sda1
rw   **256**   512  4096    2097152   1499227750400   /dev/sda2
rw   **512**   512  4096          0      1072627712   /dev/md0

따라서 일반적으로 커널은 실제로 설정된 방식으로 블록 장치에 액세스합니다. 하나의 논리 볼륨은 RAID (일부) 또는 devicemapper 장치를 통해 액세스 될 수 있으며 각각 다른 RA가 있습니다.

답은-RA 설정은 IMHO가 블록 장치 체인으로 전달되지 않지만 최상위 장치 RA 설정이 무엇이든 구성 장치에 액세스하는 데 사용됩니다

dm-0은 실제로 액세스하는 최상위 블록 장치이기 때문에 모든 것을 능가합니까?

“이제 모두 트럼프”에 의한 깊은 전파를 의미한다면-이전의 의견에 따라 시스템의 장치마다 다른 RA가있을 수 있다고 생각합니다.

lvchange -r이 dm-0 장치에 영향을 미치고 여기에 표시되지 않습니까?

예, 그러나 이것은 특별한 경우입니다. LVM의 / dev / vg0 / blockdevice 인 / dev / dm0이 있다고 가정 해 봅시다. 당신이 할 경우 :

lvchange -r 512 /dev/vg0/blockdevice

커널 액세스와 관련하여 / dev / dm0 및 / dev / vg0 / blockdevice는 정확히 동일한 블록 장치이므로 / dev / dm0도 변경됩니다.

그러나 / dev / vg0 / blockdevice가 Xen domU의 / dev / dm0 및 / dev / xvda1과 동일하다고 가정합니다. / dev / xvda1의 RA를 설정하면 적용되지만 dom0은 여전히 ​​자체 RA를 가지고 있음을 알 수 있습니다.

가상 장치의 실제 미리 읽기 값을 결정하기 위해 위의 섹터 크기에 해당하는 것을 사용하십시오.

나는 일반적으로 다른 값을 실험하고 hdparm으로 테스트하여 RA를 발견합니다.

RAID의 스트라이프 크기 (md0)?

같은 상기와.

FS가 중요한 역할을합니까 (주로 ext4 및 XFS에 관심이 있습니까)?

물론-이것은 매우 큰 주제입니다. 나는 당신이 여기에서 시작하는 것이 좋습니다 http://archives.postgresql.org/pgsql-performance/2008-09/msg00141.php


답변

설명하기 어려운 대답을 알고 있으므로 예를 들어 설명하겠습니다. 이를 위해 3 개의 블록 장치가 있고 표준 섹터를 가정하여 RA를 4 (4 * 512 바이트)라고 설정하십시오. 3 개의 디스크를 사용하는 RAID-5 구성표를 사용한다면, 고유 디스크의 스트라이프에 닿은 읽기는 처음에 블록 장치 RA를 설정 한 요소에 따라 RA를 합성합니다. 따라서 읽기가 정확히 3 개의 디스크에 걸쳐있는 경우 유효 RA는 12 * 512 바이트입니다. 이것은 MD 또는 LVM과 같은 다양한 수준으로 RA를 세팅함으로써 합성 될 수있다. 일반적으로 내 앱이 RA의 혜택을받는 경우 가능한 가장 높은 계층으로 설정하여 RA를 불필요하게 합성하지 않도록합니다. 그런 다음 2049 섹터에서 파일 시스템을 시작하고 각 섹터 시작을 8로 나눌 수있는 숫자에서 오프셋합니다. 나는 당신이 요구하는 것을 벗어날 수 있지만 이것은 2 ¢입니다.


답변

그것은 설명을위한 것입니다. RAID 및 LVM 설정으로 몇 가지 테스트를 수행하여 올바른지 확인했습니다.

https://fatalfailure.wordpress.com/2017/05/13/where-to-set-readahead-lvm-raid-devices-device-mapper-block-devices

중요한 것은 OS가 사용하는 것입니다


답변