Tôi đã cố gắng tìm một câu trả lời thẳng vào câu hỏi này, và nó đã tỏ ra khó nắm bắt. Câu hỏi này và câu trả lời của nó rất gần, nhưng không thực sự cung cấp cho tôi các chi tiết cụ thể mà tôi muốn. Hãy bắt đầu với những gì tôi nghĩ rằng tôi biết.
Nếu bạn có một thiết bị khối tiêu chuẩn và bạn chạy, sudo blockdev --report
bạn sẽ nhận được một cái gì đó như thế này:
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
Bây giờ, bạn quyết định thay đổi 256 thành 128 mặc định đó bằng cách sử dụng --setra
trên bất kỳ phân vùng nào và điều đó xảy ra với toàn bộ thiết bị khối, như vậy:
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
Điều này có ý nghĩa hoàn hảo với tôi - thiết bị cấp khối là nơi cài đặt chứ không phải phân vùng, vì vậy tất cả đều thay đổi. Ngoài ra, mối quan hệ mặc định giữa cài đặt RA và thiết bị có ý nghĩa với tôi, nói chung là:
RA * sector size (default = 512 bytes)
Do đó, những thay đổi tôi đã thực hiện ở trên, với kích thước cung mặc định sẽ giảm giá trị đọc từ 128k xuống còn 64k. Tất cả tốt và tốt cho đến nay.
Tuy nhiên, điều gì xảy ra khi chúng ta thêm vào một phần mềm RAID, hoặc LVM và trình ánh xạ thiết bị? Thay vào đó hãy tưởng tượng báo cáo của bạn trông như thế này:
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
Trong trường hợp này, chúng tôi có một thiết bị LVM dm-0 được ánh xạ trên md0 được tạo bởi mdadm, trên thực tế là một dải RAID0 trên bốn thiết bị xvdg-j.
Cả md0 và dm-0 đều có cài đặt 4096 cho RA, cao hơn nhiều so với các thiết bị khối. Vì vậy, một số câu hỏi ở đây:
- Làm thế nào để cài đặt RA được truyền xuống chuỗi thiết bị khối ảo?
- Có dm-0 át tất cả bởi vì đó là thiết bị chặn cấp cao nhất mà bạn đang thực sự truy cập?
- Sẽ
lvchange -r
có tác động đến thiết bị dm-0 và không hiển thị ở đây?
Nếu nó đơn giản như, cài đặt RA từ thiết bị khối ảo mà bạn đang sử dụng được truyền vào, điều đó có nghĩa là việc đọc từ dm-0 (hoặc md0) sẽ dịch thành 4 x 4096 RA đọc? (một trên mỗi thiết bị khối). Nếu vậy, điều đó có nghĩa là các cài đặt này sẽ làm nổ kích thước của giá trị đọc trong kịch bản trên.
Sau đó, về mặt tìm hiểu những gì thiết lập readahead thực sự đang làm:
Bạn sử dụng gì, tương đương với kích thước cung ở trên để xác định giá trị đọc thực tế cho thiết bị ảo:
- Kích thước sọc của RAID (cho md0)?
- Một số ngành khác tương đương với quy mô?
- Nó có thể cấu hình, và làm thế nào?
- Có phải FS đóng một phần (tôi chủ yếu quan tâm đến ext4 và XFS)?
- Hoặc, nếu nó được truyền lại, có phải chỉ đơn giản là cài đặt RA từ thiết bị cấp cao nhất nhân với kích thước cung của các thiết bị khối thực?
Cuối cùng, liệu có bất kỳ mối quan hệ ưa thích nào giữa kích thước sọc và cài đặt RA (ví dụ) không? Ở đây tôi nghĩ rằng nếu dải là phần tử nhỏ nhất sẽ bị loại khỏi thiết bị RAID, thì lý tưởng nhất là bạn không muốn có 2 truy cập đĩa để phục vụ đơn vị dữ liệu tối thiểu đó và muốn tạo RA đủ lớn để thực hiện yêu cầu với một truy cập duy nhất.