More to come...
So here’s what I found for BFQ (data file attached, but it’s kind of a mess).
Leave all as current defaults EXCEPT:
back_seek_penalty = 1 (was 2, but 2 makes no sense for flash memory – we made this same change to CFQ. The benchmark result was minimal, however.)
slice_idle=0 (was 7, but this REALLY chokes the benchmarks so it needs to be 0)
raising_max_time=0 (this allows BFQ to auto-tune this per your device’s capabilities and was the best setting I found). NOTE: I am not sure if the default might not already be 0. The problem is that right after setting, it goes to 256 as a start point, then adjusts from there. Resetting to BFQ defaults in f.ku shows the same 256, but the behavior does not seem as good after a f.ku reset than it does after manually entering 0. I recommend having Franco hard-code this to 0, then ensure it actually is auto-tuning (quick check) before releasing to the public.
raising_max_softrt_rate=2000 (was 7000, lowering to 2000 seemed to be a sweet spot that increased benchmarks significantly without hurting the variance).
My methodology was to start with defaults, then turn the next variable in the list down 50% and up 50% and test. If there was improvement after changing from default, I did some iterations to find a quick “best” value. I then picked the best value (if it was significant) and moved on to the next variable. I selected the BFQ default for all parameters except as noted above. Note that this methodology makes no attempt to find any interaction effects or find any “sweet-spots” except for the variables that changed from default. Basically, this process just ensured we didn’t miss any big, obvious, low-hanging fruit! My overall impression is that aside from the 4 variables listed, BFQ is much like CFQ in that most of the variables have only very small effects and would be a phenomenal pain in the ass to do any subjective evaluations with – especially given how many variables there are!
Please give these values a shot for a few hours sometime, and if you all agree they seem generally OK, we can make them the final numbers for Franco’s next update. Also, I think v5 or v6 doesn’t matter with these based on my past testing, so if the issues some people are having with v6 can’t be ironed out and Franco has to revert to v5, these values are still good.
back_seek_penalty = 1
slice_idle=0
raising_max_time=0
? raising_max_softrt_rate=2000
Not seeing raising_max_time change yet though.. Still 256.
The first ones we want are near the top starting at line 68.. Not sure about the others though.. People aren't kidding about bfq being convoluted.
Edit: Found it! There's a second batch of tunable defaults set beginning at line 2927. Weird, I was right; raising_max_time is hardcoded to 0 by default.
Unable to handle kernel NULL pointer dereference at virtual address 00000038
I posted about it in the tuna issues thread as well, for whatever that's worth.
Can you still add Paul's "quick-tune" ?
back_seek_penalty = 1
slice_idle=0
raising_max_time=0
Basically just optimizes it better for flash media.