On 11/8/18 1:09 PM, Sebastien Boisvert wrote: > > > On 2018-11-07 3:57 p.m., Jens Axboe wrote: >> On 11/5/18 8:00 AM, Sebastien Boisvert wrote: >>> >>> >>> On 2018-11-04 5:44 a.m., Sitsofe Wheeler wrote: >>>> Looks like someone is referencing an fio benchmark result on Apple's >>>> Mac Mini page and whoever did it took care to respect the Moral >>>> License (https://fio.readthedocs.io/en/latest/fio_doc.html#moral-license >>>> ). From https://www.apple.com/mac-mini/ : >>>> >>>> "4. Testing conducted by Apple in October 2018 using preproduction >>>> 3.2GHz 6-core Intel Core i7-based Mac mini systems with 64GB of RAM >>>> and 1TB SSD, and shipping 3.0GHz dual-core Intel Core i7-based Mac >>>> mini systems with 16GB of RAM and 1TB SSD. Tested with FIO 3.8, 1024KB >>>> request size, 150GB test file and IO depth=8. Performance tests are >>>> conducted using specific computer systems and reflect the approximate >>>> performance of Mac mini." >>>> >>>> My only question is: as the depth was 8 were they using the posixaio engine? >>>> >>> >>> The foot note number 4 supports this claim: >>> >>> "Up to 4X faster read speed" >>> >>> It would make sense to use asynchronous I/O since ioengine=psync is the default on Mac. >> >> I'd be fine making that change, if someone can benchmark psync vs posixaio >> in terms of latency in that platform. >> >> Might also make sense to improve the setup so that we have a default >> engine per OS depending on iodepth. For instance, on Linux, QD=1 should >> just be psync. But if QD > 1, then we should default to libaio. I'm >> afraid lots of folks have run iodepth=32 or whatever without changing >> the IO engine and wondering what is going on. > > Would this change be *after* parse_options() has been called ? > > I looked at init.c and options.{h,c}. Right now we use FIO_PREFERRED_ENGINE to set the default engine, which can be defined by the platform. I think we should drop that, don't set a default, and instead add some logic to eg fixup_options() that sets the preferred engine based on platform and depth. Probably want platforms to define FIO_PREF_SYNC_ENGINE FIO_PREF_ASYNC_ENGINE and just pick one of those depending on iodepth. Something like that. -- Jens Axboe