View previous topic :: View next topic |
Author |
Message |
DigitalCorpus Apprentice
![Apprentice Apprentice](/images/ranks/rank_rect_2.gif)
![](images/avatars/207469080248feeda89b01f.png)
Joined: 30 Jul 2007 Posts: 283
|
Posted: Mon Feb 01, 2021 4:40 am Post subject: udev not setting SSD scheduler |
|
|
I mean, I can work around this with a bash script, but that doesn't address the problem at the udev level.
A web search for doing this the "right way" pointed me to a Debian article with the following udev rule
Code: | ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline" |
added to a rules files inside
In my kernel I have "mq-deadline" instead, but if I set it to that or even "none", /dev/sd?/queue/scheduler remains unchanged. I've tried a few variations before breaking down and digging more resulting in tests with "udevadm test" which output the following for /dev/sda, which is an SSD:
Code: | Atlas ~ # udevadm test --action="add" -a -p $(udevadm info -q path -n /dev/sda)
calling: test
version 3.2.9
This program is for debugging only, it does not run any program
specified by a RUN key. It may show incorrect results, because
some values may be different, or not available at a simulation run.
=== trie on-disk ===
tool version: 3
file size: 9135321 bytes
header size 80 bytes
strings 2305545 bytes
nodes 6829696 bytes
Load module index
timestamp of '/etc/udev/rules.d' changed
Reading rules file: /lib/udev/rules.d/10-dm.rules
Reading rules file: /lib/udev/rules.d/11-dm-lvm.rules
Reading rules file: /lib/udev/rules.d/13-dm-disk.rules
Reading rules file: /lib/udev/rules.d/40-gentoo.rules
Reading rules file: /lib/udev/rules.d/50-udev-default.rules
Reading rules file: /lib/udev/rules.d/60-block.rules
Reading rules file: /lib/udev/rules.d/60-cdrom_id.rules
Reading rules file: /lib/udev/rules.d/60-drm.rules
Reading rules file: /lib/udev/rules.d/60-evdev.rules
Reading rules file: /lib/udev/rules.d/60-input-id.rules
Reading rules file: /lib/udev/rules.d/60-persistent-alsa.rules
Reading rules file: /lib/udev/rules.d/60-persistent-input.rules
Reading rules file: /lib/udev/rules.d/60-persistent-storage-tape.rules
Reading rules file: /lib/udev/rules.d/60-persistent-storage.rules
Reading rules file: /lib/udev/rules.d/60-persistent-v4l.rules
Reading rules file: /lib/udev/rules.d/60-sensor.rules
Reading rules file: /lib/udev/rules.d/60-serial.rules
Reading rules file: /etc/udev/rules.d/60-ssd-scheduler.rules
Reading rules file: /lib/udev/rules.d/64-btrfs-dm.rules
Reading rules file: /lib/udev/rules.d/64-btrfs.rules
Reading rules file: /lib/udev/rules.d/69-dm-lvm-metad.rules
Reading rules file: /lib/udev/rules.d/70-joystick.rules
Reading rules file: /lib/udev/rules.d/70-mouse.rules
Reading rules file: /etc/udev/rules.d/70-persistent-net.rules
Reading rules file: /lib/udev/rules.d/70-power-switch.rules
Reading rules file: /lib/udev/rules.d/70-touchpad.rules
Reading rules file: /lib/udev/rules.d/70-uaccess.rules
Reading rules file: /lib/udev/rules.d/71-seat.rules
Reading rules file: /lib/udev/rules.d/73-seat-late.rules
Reading rules file: /lib/udev/rules.d/75-net-description.rules
Reading rules file: /lib/udev/rules.d/75-persistent-net-generator.rules
Reading rules file: /lib/udev/rules.d/75-probe_mtd.rules
Reading rules file: /lib/udev/rules.d/78-sound-card.rules
Reading rules file: /lib/udev/rules.d/80-drivers.rules
Reading rules file: /lib/udev/rules.d/80-libinput-device-groups.rules
Reading rules file: /lib/udev/rules.d/80-udisks2.rules
Reading rules file: /lib/udev/rules.d/90-alsa-restore.rules
Reading rules file: /lib/udev/rules.d/90-libinput-fuzz-override.rules
Reading rules file: /lib/udev/rules.d/90-network.rules
Reading rules file: /lib/udev/rules.d/95-dm-notify.rules
Reading rules file: /lib/udev/rules.d/95-upower-csr.rules
Reading rules file: /lib/udev/rules.d/95-upower-hid.rules
Reading rules file: /lib/udev/rules.d/95-upower-hidpp.rules
Reading rules file: /lib/udev/rules.d/95-upower-wup.rules
Reading rules file: /lib/udev/rules.d/96-e2scrub.rules
Reading rules file: /lib/udev/rules.d/99-bumblebee-nvidia-dev.rules
Reading rules file: /lib/udev/rules.d/99-fuse.rules
Reading rules file: /lib/udev/rules.d/99-nvidia.rules
rules contain 49152 bytes tokens (4096 * 12 bytes), 15988 bytes strings
2902 strings (33788 bytes), 2022 de-duplicated (18681 bytes), 881 trie nodes used
IMPORT 'ata_id --export /dev/sda' /lib/udev/rules.d/60-persistent-storage.rules:38
starting 'ata_id --export /dev/sda'
'ata_id --export /dev/sda'(out) 'ID_ATA=1'
'ata_id --export /dev/sda'(out) 'ID_TYPE=disk'
'ata_id --export /dev/sda'(out) 'ID_BUS=ata'
'ata_id --export /dev/sda'(out) 'ID_MODEL=WDC_WDS500G2B0B-00YS70'
'ata_id --export /dev/sda'(out) 'ID_MODEL_ENC=WDC\x20WDS500G2B0B-00YS70\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'
'ata_id --export /dev/sda'(out) 'ID_REVISION=X61190WD'
'ata_id --export /dev/sda'(out) 'ID_SERIAL=<manually redacted>'
'ata_id --export /dev/sda'(out) 'ID_SERIAL_SHORT=<manually redacted>'
'ata_id --export /dev/sda'(out) 'ID_ATA_WRITE_CACHE=1'
'ata_id --export /dev/sda'(out) 'ID_ATA_WRITE_CACHE_ENABLED=1'
'ata_id --export /dev/sda'(out) 'ID_ATA_FEATURE_SET_PM=1'
'ata_id --export /dev/sda'(out) 'ID_ATA_FEATURE_SET_PM_ENABLED=1'
'ata_id --export /dev/sda'(out) 'ID_ATA_FEATURE_SET_SECURITY=1'
'ata_id --export /dev/sda'(out) 'ID_ATA_FEATURE_SET_SECURITY_ENABLED=0'
'ata_id --export /dev/sda'(out) 'ID_ATA_FEATURE_SET_SECURITY_ERASE_UNIT_MIN=2'
'ata_id --export /dev/sda'(out) 'ID_ATA_FEATURE_SET_SECURITY_ENHANCED_ERASE_UNIT_MIN=2'
'ata_id --export /dev/sda'(out) 'ID_ATA_FEATURE_SET_SMART=1'
'ata_id --export /dev/sda'(out) 'ID_ATA_FEATURE_SET_SMART_ENABLED=1'
'ata_id --export /dev/sda'(out) 'ID_ATA_FEATURE_SET_APM=1'
'ata_id --export /dev/sda'(out) 'ID_ATA_FEATURE_SET_APM_ENABLED=1'
'ata_id --export /dev/sda'(out) 'ID_ATA_FEATURE_SET_APM_CURRENT_VALUE=128'
'ata_id --export /dev/sda'(out) 'ID_ATA_DOWNLOAD_MICROCODE=1'
'ata_id --export /dev/sda'(out) 'ID_ATA_SATA=1'
'ata_id --export /dev/sda'(out) 'ID_ATA_SATA_SIGNAL_RATE_GEN2=1'
'ata_id --export /dev/sda'(out) 'ID_ATA_SATA_SIGNAL_RATE_GEN1=1'
'ata_id --export /dev/sda'(out) 'ID_ATA_ROTATION_RATE_RPM=0'
'ata_id --export /dev/sda'(out) 'ID_WWN=0x5001b448b66e988c'
'ata_id --export /dev/sda'(out) 'ID_WWN_WITH_EXTENSION=0x5001b448b66e988c'
'ata_id --export /dev/sda' [9441] exit with return code 0
LINK 'disk/by-id/ata-WDC_WDS500G2B0B-00YS70_174485801108' /lib/udev/rules.d/60-persistent-storage.rules:52
IMPORT builtin 'path_id' /lib/udev/rules.d/60-persistent-storage.rules:73
IMPORT builtin 'path_id' returned non-zero
IMPORT builtin 'blkid' /lib/udev/rules.d/60-persistent-storage.rules:90
probe /dev/sda raid offset=0
LINK 'disk/by-id/wwn-0x5001b448b66e988c' /lib/udev/rules.d/60-persistent-storage.rules:97
no db file to read /run/udev/data/+scsi:0:0:0:0: No such file or directory
handling device node '/dev/sda', devnum=b8:0, mode=0600, uid=0, gid=0
preserve already existing symlink '/dev/block/8:0' to '../sda'
found 'b8:0' claiming '/run/udev/links/\x2fdisk\x2fby-id\x2fata-WDC_WDS500G2B0B-00YS70_174485801108'
creating link '/dev/disk/by-id/ata-WDC_WDS500G2B0B-00YS70_174485801108' to '/dev/sda'
preserve already existing symlink '/dev/disk/by-id/ata-WDC_WDS500G2B0B-00YS70_174485801108' to '../../sda'
found 'b8:0' claiming '/run/udev/links/\x2fdisk\x2fby-id\x2fwwn-0x5001b448b66e988c'
creating link '/dev/disk/by-id/wwn-0x5001b448b66e988c' to '/dev/sda'
preserve already existing symlink '/dev/disk/by-id/wwn-0x5001b448b66e988c' to '../../sda'
created db file '/run/udev/data/b8:0' for '/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda'
.ID_FS_TYPE_NEW=
ACTION=-p
DEVLINKS=/dev/disk/by-id/ata-WDC_WDS500G2B0B-00YS70_174485801108 /dev/disk/by-id/wwn-0x5001b448b66e988c
DEVNAME=/dev/sda
DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda
DEVTYPE=disk
ID_ATA=1
ID_ATA_DOWNLOAD_MICROCODE=1
ID_ATA_FEATURE_SET_APM=1
ID_ATA_FEATURE_SET_APM_CURRENT_VALUE=128
ID_ATA_FEATURE_SET_APM_ENABLED=1
ID_ATA_FEATURE_SET_PM=1
ID_ATA_FEATURE_SET_PM_ENABLED=1
ID_ATA_FEATURE_SET_SECURITY=1
ID_ATA_FEATURE_SET_SECURITY_ENABLED=0
ID_ATA_FEATURE_SET_SECURITY_ENHANCED_ERASE_UNIT_MIN=2
ID_ATA_FEATURE_SET_SECURITY_ERASE_UNIT_MIN=2
ID_ATA_FEATURE_SET_SMART=1
ID_ATA_FEATURE_SET_SMART_ENABLED=1
ID_ATA_ROTATION_RATE_RPM=0
ID_ATA_SATA=1
ID_ATA_SATA_SIGNAL_RATE_GEN1=1
ID_ATA_SATA_SIGNAL_RATE_GEN2=1
ID_ATA_WRITE_CACHE=1
ID_ATA_WRITE_CACHE_ENABLED=1
ID_BUS=ata
ID_FS_TYPE=
ID_MODEL=WDC_WDS500G2B0B-00YS70
ID_MODEL_ENC=WDC\x20WDS500G2B0B-00YS70\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
ID_PART_TABLE_TYPE=gpt
ID_PART_TABLE_UUID=6638a92b-30d0-4043-8658-6b70146f773b
ID_REVISION=X61190WD
ID_SERIAL=<manually redacted>
ID_SERIAL_SHORT=<manually redacted>
ID_TYPE=disk
ID_WWN=0x5001b448b66e988c
ID_WWN_WITH_EXTENSION=0x5001b448b66e988c
MAJOR=8
MINOR=0
SUBSYSTEM=block
USEC_INITIALIZED=1327801
Unload module index |
And the device tree for /dev/sda is:
Code: | Atlas ~ # udevadm info -a -p $(udevadm info -q path -n /dev/sda)
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda':
KERNEL=="sda"
SUBSYSTEM=="block"
DRIVER==""
ATTR{ext_range}=="256"
ATTR{range}=="16"
ATTR{alignment_offset}=="0"
ATTR{ro}=="0"
ATTR{stat}==" 9553 974 509953 8452 1856 11 256259 4298 0 6090 12932 0 0 0 0 109 181"
ATTR{events_poll_msecs}=="-1"
ATTR{events_async}==""
ATTR{size}=="976773168"
ATTR{discard_alignment}=="0"
ATTR{capability}=="50"
ATTR{hidden}=="0"
ATTR{removable}=="0"
ATTR{events}==""
ATTR{inflight}==" 0 0"
looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0':
KERNELS=="0:0:0:0"
SUBSYSTEMS=="scsi"
DRIVERS=="sd"
ATTRS{evt_media_change}=="0"
ATTRS{evt_mode_parameter_change_reported}=="0"
ATTRS{evt_inquiry_change_reported}=="0"
ATTRS{vendor}=="ATA "
ATTRS{evt_capacity_change_reported}=="0"
ATTRS{model}=="WDC WDS500G2B0B-"
ATTRS{evt_lun_change_reported}=="0"
ATTRS{iorequest_cnt}=="0x2d1d"
ATTRS{wwid}=="naa.5001b448b66e988c"
ATTRS{iocounterbits}=="32"
ATTRS{type}=="0"
ATTRS{queue_type}=="simple"
ATTRS{device_busy}=="0"
ATTRS{vpd_pg80}==""
ATTRS{device_blocked}=="0"
ATTRS{vpd_pg89}==""
ATTRS{scsi_level}=="6"
ATTRS{vpd_pg0}==""
ATTRS{inquiry}==""
ATTRS{eh_timeout}=="10"
ATTRS{state}=="running"
ATTRS{blacklist}==""
ATTRS{iodone_cnt}=="0x2ce9"
ATTRS{queue_ramp_up_period}=="120000"
ATTRS{queue_depth}=="32"
ATTRS{ioerr_cnt}=="0x5"
ATTRS{vpd_pg83}==""
ATTRS{timeout}=="30"
ATTRS{evt_soft_threshold_reached}=="0"
ATTRS{rev}=="90WD"
ATTRS{ncq_prio_enable}=="0"
looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0':
KERNELS=="target0:0:0"
SUBSYSTEMS=="scsi"
DRIVERS==""
looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1/host0':
KERNELS=="host0"
SUBSYSTEMS=="scsi"
DRIVERS==""
looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1':
KERNELS=="ata1"
SUBSYSTEMS==""
DRIVERS==""
looking at parent device '/devices/pci0000:00/0000:00:1f.2':
KERNELS=="0000:00:1f.2"
SUBSYSTEMS=="pci"
DRIVERS=="ahci"
ATTRS{remapped_nvme}=="0"
ATTRS{broken_parity_status}=="0"
ATTRS{subsystem_device}=="0xb005"
ATTRS{dma_mask_bits}=="64"
ATTRS{vendor}=="0x8086"
ATTRS{local_cpus}=="f"
ATTRS{class}=="0x010601"
ATTRS{msi_bus}=="1"
ATTRS{device}=="0x2824"
ATTRS{local_cpulist}=="0-3"
ATTRS{driver_override}=="(null)"
ATTRS{d3cold_allowed}=="1"
ATTRS{irq}=="29"
ATTRS{revision}=="0x02"
ATTRS{consistent_dma_mask_bits}=="64"
ATTRS{ari_enabled}=="0"
ATTRS{enable}=="1"
ATTRS{subsystem_vendor}=="0x1458"
looking at parent device '/devices/pci0000:00':
KERNELS=="pci0000:00"
SUBSYSTEMS==""
DRIVERS=="" |
man udev states:
Code: | ATTR{filename}, SYSCTL{kernel parameter}
Match sysfs attribute values of the event device. Trailing whitespace in the attribute values is ignored unless
the specified match value itself contains trailing whitespace. Match a kernel parameter value.[/quote] |
The problem is that udev still isn't setting the scheduler, but the folder and structure properly exist in sysfs for /dev/sda (and the other SSDs:
Code: |
Atlas ~ # ls /sys/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda/queue
add_random fua logical_block_size minimum_io_size rotational write_zeroes_max_bytes
chunk_sectors hw_sector_size max_discard_segments nomerges rq_affinity zone_append_max_bytes
dax io_poll max_hw_sectors_kb nr_requests scheduler zoned
discard_granularity io_poll_delay max_integrity_segments nr_zones stable_writes
discard_max_bytes io_timeout max_sectors_kb optimal_io_size wbt_lat_usec
discard_max_hw_bytes iosched max_segment_size physical_block_size write_cache
discard_zeroes_data iostats max_segments read_ahead_kb write_same_max_bytes |
Why is this rule for udev not working? |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
Ionen Developer
![Developer Developer](/images/ranks/rank-dev.gif)
![](images/avatars/12407261860db424480089.png)
Joined: 06 Dec 2018 Posts: 2892
|
Posted: Mon Feb 01, 2021 4:52 am Post subject: |
|
|
May want to just try sys-block/io-scheduler-udev-rules instead of messing with this (see the installed README). |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
DigitalCorpus Apprentice
![Apprentice Apprentice](/images/ranks/rank_rect_2.gif)
![](images/avatars/207469080248feeda89b01f.png)
Joined: 30 Jul 2007 Posts: 283
|
Posted: Mon Feb 01, 2021 12:17 pm Post subject: |
|
|
Nope, that doesn't work either. |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|