Package Base Details: linux-bfq-mq

Git Clone URL: (read-only)
Submitter: monotykamary
Maintainer: monotykamary (sir_lucjan)
Last Packager: sir_lucjan
Votes: 6
Popularity: 0.001062
First Submitted: 2017-05-11 19:00
Last Updated: 2019-04-13 14:07

Pinned Comments

monotykamary commented on 2017-05-14 16:02

IO scheduler will default to "mq-deadline" given that DEFAULT_MQ_IOSCHED is currently not implemented in mainline. For now, you can use `sudo tee /sys/block/sda/queue/scheduler <<< bfq-mq` to enable "bfq-mq".

You can also add this to your udev rules:
# Non-rotational disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="bfq-mq"
# Rotational disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="bfq-mq"

`sudo udevadm control --reload && sudo udevadm trigger`

Configs are left at Arch default and v4.12 defaults except for the following definitions:


`config.i686` was made in deselecting x64 in `make xconfig`, but has not been tested.

The patch (4.12-bfq-mq-*.patch) is formatted from `git format-patch 87b2c3fc6317` straight from a local clone of Makefile commits are now kept in newer patches for use of sir_lucjan's Makefile stream edits.

Latest Comments

« First ‹ Previous 1 2 3 Next › Last »

monotykamary commented on 2017-08-14 23:23

I have added mailing list patches (currently includes Ming Lei's patches for SCSI-MQ) thanks to and reference from sir_lucjan.

They are disabled by default to be faithful to the original bfq-mq repository, but feel free to enable them in the PKGBUILD.

monotykamary commented on 2017-08-12 04:12

Well, that didn't last long. Patches have been reverted to the old diff and hand delete method, but at least I kept the path convention.

Since upstream patches are just cherry-picked commits from the rc tags, cherry-picking on top of that becomes very unreliable.

monotykamary commented on 2017-08-10 01:49

The merge patch process has now been simplified to a reliable `git cherry-pick -m1 --strategy=recursive -Xtheirs $COMMIT`, which can be done on any working tree of linux up to the current kernel version on bfq-mq. This can also be automated with `git log --reverse --grep='block:' --grep='bfq:' --grep='blk-mq:' --grep='uuid-for' --merges --oneline --decorate --color v4.13-rc3 6f7da290413b..HEAD --format="%H" | sed 's/%/^!/g' | xargs -I{} git cherry-pick -m1 --strategy=recursive -Xtheirs {}` and maybe a few more tricks to handle deleted merge conflicts.

All merges related to block and uuid have been added, including previous ones that were not added due to context conflicts. The only merge rejected is [42654ebad0c7] Merge tag 'media/v4.12-2' into patchwork.

monotykamary commented on 2017-08-06 15:38

The merge patches have been reworked to add all block related changes and related driver refactors and fixes. Most of the commits on mainline git are just merges and their exploded commits. Since git log shows both, there are lots timeline issues requiring some tricks with git log to git diff and git format-patch. However there are many refactors and definitions in 4.13-rc*, so I decided to add all of them that seemed related to the block layer. Fortunately, after spending an inordinate amount of time looking at patches, most of the block commits can simply be found this way:

git log --reverse --grep='block:' --grep='bfq:' --grep='blk-mq:' --merges --oneline --decorate --color 6f7da290413b..HEAD:

42654ebad0c7 Merge tag 'media/v4.12-2' into patchwork
c6b1e36c8fa0 Merge branch 'for-4.13/block' of git://
03ffbcdd7898 Merge branch 'irq-core-for-linus' of git://
2c669275dc32 Merge branch 'for-linus' of git://
088737f44bbf Merge tag 'for-linus-v4.13-2' of git://
130568d5eac5 Merge branch 'for-linus' of git://
907afe5923b4 Merge tag 'mmc-v4.13-2' of git://
0151ef0085f9 Merge branch 'for-linus' of git://
0fa8dc423c55 Merge branch 'for-linus' of git://

Most of the merges were added, with some of the file diffs deleted by hand if the area of the patch is reversed or are missing a much larger dependency irrelevant to the block changes. The merges that were removed were Merge tag 'media.v4,12-2' (since it is already patched) and Merge tag 'mmc-v4.13-2' (since all of the files in it failed to patch). Merges for s390 and from jlayton are mostly driver and error related refactors for blk-mq. The diffs were made by a simple `git diff $COMMIT^..$COMMIT > $PATCH.patch`. However, one more merge was added to make sure some of the drivers were added:

81e3e044897b Merge tag 'uuid-for-4.13' of git://

This merge changed the definition of uuid from `uuid_be` to `uuid_t`, which is required in some drivers and also to avoid an after-patch compilation error which only appeared right at the end of the compile if we include jlayton's patches. Of course, this is the original 4.13-uuid-block-merge.patch which I added before, but forgot to add the block merge right after it. Another woops.

Although the merge commits are found in bfq-mq, the patches are made from a checked-out v4.12 vanilla branch manually patched to v4.12.4 and rebased to v4.13-rc3. This is really just to make sure patching is consistent in the PKGBUILD and on repository clones since v4.12.4 in git is very different (timeline wise) to a v4.12 kernel patched to v4.12.4. [130568d5eac5 Merge branch 'for-linus' of git://] is essentially still the same edit from sir_lucjan with different line numbers. The un-automated method of hand deleting some file diffs are based on his original edit.

I have compiled it twice with no problems, but hopefully there are no compilation issues since I did leave a good portion more code in the patches. I've also compiled this on a custom PKGBUILD with Alfred Chen's VRQ scheduler with no problems.

monotykamary commented on 2017-08-04 20:21


Many thanks for the update! Patches are a bit dirty, but I think all the essential parts of the block layer are there now - just with some extra drivers. I've included the runtime-pm workaround from the from 4.13-rc3 rebase that came with the (third) 'for-linus linux-block' merge:

+ blk-mq: map queues to all present CPUs
+ block: disable runtime-pm for blk-mq

What I didn't expect was blk-mq patches in the 'irq-core-for-linus' merge which probably existed in the old 4.13-rc1 snapshot of bfq-mq. Pretty big woops. It was a lot easier to find it this time since the "map queues to all present CPUs" commit needed a patch from here:

+ blk-mq: Create hctx for each present CPU
+ blk-mq: Include all present CPUs in the default queue mapping

I've hand deleted all the obvious unnecessary parts of 4.13-irq-core-for-linus.patch, and left 4.13-linux-block-for-linus_3.patch as is - which feels pretty clean. However, I did completely remove basically everything in 4.13-linux-block-for-linus_2.patch and just left blk-mq patches just mostly for my sanity. It works, but it feels pretty funky to have it considering the patch after it had no changes.

Hopefully I find a good way to clean the patches of consistency before the package reaches its EOL. Maybe post-factum or heftig will make some patches I can base off of...

sir_lucjan commented on 2017-08-04 09:15

Paolo has updated patch:

He has rebased patch against 4.13-rc3

monotykamary commented on 2017-08-03 20:26


Many thanks again! Updated bfq-mq to 20170803 rebase containing new commits and changes:

+ [18ae30c0d63a] block, bfq: improve and refactor throughput-boosting logic
~ [0afb038353d8] FIRST BFQ-MQ COMMIT: Copy bfq-sq-iosched.c as bfq-mq-iosched

sir_lucjan commented on 2017-08-03 19:04

Paolo has updated patch:

monotykamary commented on 2017-08-01 12:28


Many thanks! Updated bfq-mq to 20170801 with Lee Tibbert's compile tune ups (5220a160a358).

sir_lucjan commented on 2017-08-01 12:03

Paolo has updated bfq patch: