Max-hw-sectors-kb bei LSI Controllern anpassen
Im Linux Block Layer kann man mit dem max_sectors_kb Parameter die Größe eines einzelnen Filesystem Requests limitieren. Der größtmögliche Wert eines Filesystem Requests wird im vom Linux SysFS aus read-only Parameter max_hw_sectors_kb angeführt. Dieser Artikel zeigt, wie der max_hw_sectors_kb und damit auch der max_sectors_kb Parameter bei Logical Disks eines LSI RAID Controllers angepasst werden kann.
Inhaltsverzeichnis |
Bedeutung
Die Bedeutung dieser SysFS Dateien (Parameter) ist in der Linux Kernel Dokumentation beschrieben:[1]
Queue sysfs files ================= This text file will detail the queue files that are located in the sysfs tree for each block device. Note that stacked devices typically do not export any settings, since their queue merely functions are a remapping target. These files are the ones found in the /sys/block/xxx/queue/ directory. Files denoted with a RO postfix are readonly and the RW postfix means read-write. hw_sector_size (RO) ------------------- This is the hardware sector size of the device, in bytes. max_hw_sectors_kb (RO) ---------------------- This is the maximum number of kilobytes supported in a single data transfer. max_sectors_kb (RW) ------------------- This is the maximum number of kilobytes that the block layer will allow for a filesystem request. Must be smaller than or equal to the maximum size allowed by the hardware. [...]
Parameter konfigurieren
Der Treiber für LSI Raidcontroller megaraid_sas hat die Option max_sectors, die es erlaubt den vom Linux Kernel genutzten Wert max_hw_sectors_kb im SysFS zu setzen:
$ modinfo megaraid_sas filename: /lib/modules/3.2.0-20-generic/kernel/drivers/scsi/megaraid/megaraid_sas.ko description: LSI MegaRAID SAS Driver author: megaraidlinux@lsi.com version: 00.00.06.12-rc1 license: GPL srcversion: B0EE8D562F66C8547CAF07E alias: pci:v00001000d0000005Dsv*sd*bc*sc*i* alias: pci:v00001000d0000005Bsv*sd*bc*sc*i* alias: pci:v00001028d00000015sv*sd*bc*sc*i* alias: pci:v00001000d00000413sv*sd*bc*sc*i* alias: pci:v00001000d00000071sv*sd*bc*sc*i* alias: pci:v00001000d00000073sv*sd*bc*sc*i* alias: pci:v00001000d00000079sv*sd*bc*sc*i* alias: pci:v00001000d00000078sv*sd*bc*sc*i* alias: pci:v00001000d0000007Csv*sd*bc*sc*i* alias: pci:v00001000d00000060sv*sd*bc*sc*i* alias: pci:v00001000d00000411sv*sd*bc*sc*i* depends: intree: Y vermagic: 3.2.0-20-generic SMP mod_unload modversions parm: poll_mode_io:Complete cmds from IO path, (default=0) (int) parm: max_sectors:Maximum number of sectors per IO command (int) parm: msix_disable:Disable MSI-X interrupt handling. Default: 0 (int)
Beispiel
Das folgende Beispiel (ausgeführt unter Ubuntu 12.04 LTS 64 Bit mit Kernel 3.2) zeigt wie ein modprobe megaraid_sas max_sectors=512 die unterschiedlichen Werte beeinflusst. Beim MegaCLI64 kommt die Version 8.04.07 zum Einsatz.
tktest@cache-server:~/software$ sudo ./MegaCli64 -LDInfo -Lall -aALL
Adapter 0 -- Virtual Drive Information:
Virtual Drive: 0 (Target Id: 0)
Name :
RAID Level : Primary-0, Secondary-0, RAID Level Qualifier-0
Size : 3.637 TB
Parity Size : 0
State : Optimal
Strip Size : 64 KB
Number Of Drives : 2
Span Depth : 1
Default Cache Policy: WriteBack, ReadAhead, Cached, Write Cache OK if Bad BBU
Current Cache Policy: WriteBack, ReadAhead, Cached, Write Cache OK if Bad BBU
Default Access Policy: Read/Write
Current Access Policy: Read/Write
Disk Cache Policy : Disk's Default
Encryption Type : None
Is VD Cached: No
Exit Code: 0x00
tktest@cache-server:~/software$ cat /proc/partitions
major minor #blocks name
8 0 117219767 sda
8 1 104645632 sda1
8 2 1 sda2
8 5 12571648 sda5
8 16 3905945600 sdb
tktest@cache-server:~/software$ cat /sys/block/sda/queue/max_sectors_kb
512
tktest@cache-server:~/software$ cat /sys/block/sda/queue/max_hw_sectors_kb
32767
tktest@cache-server:~/software$ cat /sys/block/sdb/queue/max_sectors_kb
128
tktest@cache-server:~/software$ cat /sys/block/sdb/queue/max_hw_sectors_kb
128
tktest@cache-server:~/software$ sudo rmmod megaraid_sas
tktest@cache-server:~/software$ cat /proc/partitions
major minor #blocks name
8 0 117219767 sda
8 1 104645632 sda1
8 2 1 sda2
8 5 12571648 sda5
tktest@cache-server:~/software$ sudo modprobe megaraid_sas max_sectors=512
tktest@cache-server:~/software$ cat /proc/partitions
major minor #blocks name
8 0 117219767 sda
8 1 104645632 sda1
8 2 1 sda2
8 5 12571648 sda5
8 16 3905945600 sdb
tktest@cache-server:~/software$ cat /sys/block/sdb/queue/max_hw_sectors_kb
256
tktest@cache-server:~/software$ cat /sys/block/sdb/queue/max_sectors_kb
256
tktest@cache-server:~/software$ sudo rmmod megaraid_sas
tktest@cache-server:~/software$ sudo modprobe megaraid_sas max_sectors=1024
tktest@cache-server:~/software$ cat /sys/block/sdb/queue/max_sectors_kb
512
tktest@cache-server:~/software$
Einzelnachweise
Autor: Werner Fischer
