You are not logged in.

#1 2025-05-14 03:20:51

LinuxLover471
Member
From: Asia, India
Registered: 2025-02-23
Posts: 172

[SOLVED] Ideal/Best I/O scheduler for a Sata SSD?

Hi, I hope that you are doing well and having a good day.

I was curious that what would be the best/ideal scheduler to use for a SATA SSD. My motherboard only supports SATA 2. I tried to find something on the wiki but couldn't find anything specific to what to use with a SATA SSD.

I know that you can just "Find it yourself" but that costs time (and probably extensive testing?). So, this post will be a baseline for future users who want to not spend their time looking for the ideal I/O scheduler for these types of storage.

Also if possible, please list which scheduler will be ideal for which use case. As always, there isn't a "Best" thing in the world, it depends on the type or workload.

I primarily use this PC for some coding (primarily scripting a future project that I will post in the community contributions, I hope that you will like it!), sometimes small transfers, like upto 4GB max and more of a "Smaller but many" type of workload, I also do some gaming, ( Primarily the Doom 3 game and the Transformers Cybertron games.)

Here are the specs if it matters-

CPU- Intel Core 2 Quad Q9550
Memory- 4GB 800Mhz Dual channel DDR2
Storage- ADATA SU800 512GB, Toshiba 7200RPM 1TB HDD.
GPU- GT 740

And the output of inxi -Fxxxz

System:
  Kernel: 6.14.6-zen1-1-zen arch: x86_64 bits: 64 compiler: gcc v: 15.1.1
    clocksource: tsc
  Desktop: KDE Plasma v: 6.3.5 tk: Qt v: N/A wm: kwin_x11 vt: 2 dm: SDDM
    Distro: Arch Linux
Machine:
  Type: Desktop Mobo: Gigabyte model: G31M-ES2L serial: <superuser required>
    uuid: <superuser required> BIOS: Award v: FI date: 08/09/2010
CPU:
  Info: quad core model: Intel Core2 Quad Q9550 bits: 64 type: MCP
    smt: <unsupported> arch: Penryn rev: A cache: L1: 256 KiB L2: 12 MiB
  Speed (MHz): avg: 2834 min/max: 2000/2834 cores: 1: 2834 2: 2834 3: 2834
    4: 2834 bogomips: 22666
  Flags: ht lm nx pae sse sse2 sse3 sse4_1 ssse3
Graphics:
  Device-1: NVIDIA GK107 [GeForce GT 740] driver: nvidia v: 470.256.02
    arch: Kepler-2 pcie: speed: 2.5 GT/s lanes: 16 ports: active: none
    off: HDMI-A-1 empty: DVI-I-1,VGA-1 bus-ID: 01:00.0 chip-ID: 10de:0fc8
    class-ID: 0300
  Display: x11 server: X.org v: 1.21.1.16 with: Xwayland v: 24.1.6
    compositor: kwin_x11 driver: X: loaded: nvidia gpu: nvidia,nvidia-nvswitch
    display-ID: :0 note: <missing: xdpyinfo/xrandr>
  Monitor-1: HDMI-A-1 model: LG (GoldStar) FHD serial: <filter>
    res: 1920x1080 dpi: 102 size: 480x260mm (18.9x10.24") diag: 546mm (21.5")
    modes: max: 1920x1080 min: 640x480
  API: Vulkan v: 1.4.313 layers: 3 surfaces: N/A device: 0
    type: discrete-gpu driver: nvidia device-ID: 10de:0fc8
  API: OpenGL Message: Unable to show GL data. glxinfo is missing.
  Info: Tools: api: vulkaninfo de: kscreen-console,kscreen-doctor
    gpu: nvidia-settings,nvidia-smi x11: xprop
Audio:
  Device-1: Intel NM10/ICH7 Family High Definition Audio
    vendor: Gigabyte GA-D525TUD driver: snd_hda_intel v: kernel bus-ID: 00:1b.0
    chip-ID: 8086:27d8 class-ID: 0403
  Device-2: NVIDIA GK107 HDMI Audio driver: snd_hda_intel v: kernel pcie:
    speed: 2.5 GT/s lanes: 16 bus-ID: 01:00.1 chip-ID: 10de:0e1b class-ID: 0403
  API: ALSA v: k6.14.6-zen1-1-zen status: kernel-api
  Server-1: JACK v: 1.9.22 status: off
  Server-2: PipeWire v: 1.4.2 status: active with: 1: pipewire-pulse
    status: active 2: wireplumber status: active 3: pipewire-alsa type: plugin
Network:
  Message: No PCI device data found.
  Device-1: Ralink 802.11 n WLAN driver: rt2800usb type: USB rev: 2.0
    speed: 480 Mb/s lanes: 1 bus-ID: 2-8:5 chip-ID: 148f:5370 class-ID: 0000
    serial: <filter>
  IF: wlp0s29f7u8 state: up mac: <filter>
Drives:
  Local Storage: total: 1.38 TiB used: 54.96 GiB (3.9%)
  ID-1: /dev/sda vendor: A-Data model: SU800 size: 476.94 GiB
    speed: <unknown> tech: SSD serial: <filter> fw-rev: 8B scheme: MBR
  ID-2: /dev/sdb vendor: Toshiba model: DT01ACA100 size: 931.51 GiB
    speed: <unknown> tech: HDD rpm: 7200 serial: <filter> fw-rev: A7C0
    scheme: MBR
Partition:
  ID-1: / size: 68.35 GiB used: 15.83 GiB (23.2%) fs: ext4 dev: /dev/sda1
  ID-2: /home size: 77.23 GiB used: 39.13 GiB (50.7%) fs: ext4
    dev: /dev/sda6
Swap:
  ID-1: swap-1 type: partition size: 7.91 GiB used: 0 KiB (0.0%) priority: -2
    dev: /dev/sda3
Sensors:
  System Temperatures: cpu: 62.0 C mobo: N/A gpu: nvidia temp: 49 C
  Fan Speeds (rpm): cpu: 2057 fan-2: 0 gpu: nvidia fan: 30%
  Power: 12v: N/A 5v: 2.93 3.3v: N/A vbat: 3.22
Info:
  Memory: total: 4 GiB available: 3.82 GiB used: 1.55 GiB (40.5%)
  Processes: 179 Power: uptime: 12m states: freeze,mem,disk suspend: deep
    wakeups: 0 hibernate: platform Init: systemd v: 257 default: graphical
  Packages: pm: pacman pkgs: 877 Compilers: gcc: 15.1.1 Shell: Bash
    v: 5.2.37 running-in: konsole inxi: 3.3.38

Thanks a lot for your time!

Last edited by LinuxLover471 (2025-08-05 03:36:50)


--- asyync1024

Offline

#2 2025-05-14 12:41:44

stfischr
Member
Registered: 2020-04-29
Posts: 34

Re: [SOLVED] Ideal/Best I/O scheduler for a Sata SSD?

LinuxLover471 wrote:

... As always, there isn't a "Best" thing in the world, it depends on the type or workload.

Exactly and it also depends on your hardware. To really know which scheduler is the best for you, you need to do benchmarks with your workload on your hardware. Or just use every scheduler for a few days, if you notice a difference (most likely You will not) than go with the one that feels the fastest. If you can't feel the difference than whats the point of using another scheduler?

In general all low latency schedulers are better for SSDs than CFS (deadline, noop, ..., mq-*) but arch should already select one if it detects an SSD.

Some suggestions from RH: https://docs.redhat.com/en/documentatio … erformance

Offline

#3 2025-05-14 14:42:55

LinuxLover471
Member
From: Asia, India
Registered: 2025-02-23
Posts: 172

Re: [SOLVED] Ideal/Best I/O scheduler for a Sata SSD?

Thanks for your detailed reply, I did some benchmarks with ChatGPT's advice. And I saw better results with the bfq scheduler, definetly better than mq-deadline. Kyber was also good.
Also the link helped me immensely.
I used this test.

fio --name=ssd-test-safe     --filename=ssd-benchmark-file     --size=1G     --direct=1     --ioengine=libaio     --rw=randrw     --bs=4k     --rwmixread=70     --iodepth=32     --numjobs=4     --runtime=60s     --time_based     --group_reporting
ssd-test-safe: (g=0): rw=randrw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=32

Conclusion
The BFQ scheduler performs very good for SATA SSD's. Kyber also works very well, and so does mq-deadline. And you are probably good to go.

Last edited by LinuxLover471 (2025-11-22 02:09:13)


--- asyync1024

Offline

#4 2025-05-15 08:57:01

stfischr
Member
Registered: 2020-04-29
Posts: 34

Re: [SOLVED] Ideal/Best I/O scheduler for a Sata SSD?

LinuxLover471 wrote:

The BFQ scheduler performs very good for SATA SSD's. Kyber also works very well, just avoid mq-deadline. And you are probably good to go.

Well at least for this specific access pattern (4K rw with 70% reads and iodepth32) on your filesystem and your specific hardware.

I use the zen-Kernel and it has BFQ as standard, but BFQ sacrifices throughput for lower latency which you can't see if only testing 4K random patterns. For me personally fast response times are more important than max throughput and I think I can feel a difference to CFS under high I/O-load.

Offline

Board footer

Powered by FluxBB