Is distributing load in a balanced way between swap partitions possible?
Let's say I have two swap partitions, /dev/sdb and /dev/sdc
, where /dev/sdb
is 4 times faster in terms of I/O than /dev/sdc
. Is it possible to configure it in such way that when the OS decides that it has 5 MB of RAM content to swap out, it directs 4 MB of it to /dev/sdb
and 1 MB to /dev/sdc
to provide optimal swapping speed?
If /dev/sdb
is 4 times faster than /dev/sdc
, it'll be faster to fill up /dev/sdb
first before starting on /dev/sdc
.
Keep in mind that it's not just splitting up sequential reads and writes; there's also seek latencies, disk spin-up times, and synchronizing both disks so that one writes four parts while the other writes one. The sequential throughput may theoretically be higher, but it's not practical.
That said, mounted swap partitions have priorities. If you want to mount your two swap partitions so that /dev/sdb
is used first and then /dev/sdc
, consider this example:
sudo swapon -p 10 /dev/sdb
sudo swapon -p 5 /dev/sdc
In /etc/fstab
, you would pass the pri
option to set the priority, like so:
/dev/sda none swap defaults,pri=10 0 0
/dev/sdb none swap defaults,pri=5 0 0
As a practical example, you would want to do this if you were using zram. Since zram is way faster than hard drives and solid-state drives, you would like your zram swap partitions to be used first. Here, you can see the four zram devices preferred to the slow device /dev/zd16
:
deltik@node51 [~]$ swapon -s
Filename Type Size Used Priority
/dev/zd16 partition 8388604 0 -1
/dev/zram0 partition 1524800 275252 5
/dev/zram1 partition 1524800 275400 5
/dev/zram2 partition 1524800 276296 5
/dev/zram3 partition 1524800 275392 5
(On Ubuntu, zram swap is conveniently provided by the zram-config
package.)
Even though /dev/zram*
are orders of magnitude faster than /dev/zd16
sequentially, I would not want to balance the workload because /dev/zd16
seeks way slower than /dev/zram*
do.