On Fri, Sep 22, 2017 at 10:16:06AM -0700, Eduardo Valentin wrote: > Hello GregKH, > > I have been seeing several reports of performance issue with raid0 while performing fstrim on v4.9.y. > Currently, if one performs: > > # fio --name fio_test_file --direct=1 --rw=randwrite --bs=4k --size=5G --numjobs=8 --group_reporting --directory=/mount/raid0 > # rm -rf /media/nvme-raid0 > # time fstrim -vvv -a > real 3m41.102s > user 0m0.000s > sys 0m4.964s > > And on latest linus master, in fact, starting v4.12, we get > > # time fstrim -vvv -a > /mount/raid0: 3.5 TiB (3798132523008 bytes) trimmed > > real 0m1.953s > user 0m0.004s > sys 0m0.004s > > So, I performed a git bisect and found this patch: > commit 29efc390b9462582ae95eb9a0b8cd17ab956afc0 > Author: Shaohua Li <shli@xxxxxx> > Date: Sun May 7 17:36:24 2017 -0700 > > md/md0: optimize raid0 discard handling > > However, the above patch depends on several other patches. I have performed a backport of the depending patches and I confirm > I can get the performance boost after applying all fixes. The list of patches is bellow. I also have a branch with the backports > here: > > https://git.kernel.org/pub/scm/linux/kernel/git/evalenti/linux.git/log/?h=backports/v4.9.y/raid0/fstrim > > > And here is the list of patches: > 797476b block: Add 'zoned' queue limit > c4aebd0 block: remove bio_is_rw > bd1c1c2 block: REQ_NOMERGE is common to the bio and request > 188bd2b block: move REQ_RAHEAD to common flags > 8d2bbd4 block: replace REQ_THROTTLED with a bio flag > e806402 block: split out request-only flags into a new namespace > ef295ec block: better op and flags encoding > 8737417 block: add a proper block layer data direction encoding > e73c23f block: add async variant of blkdev_issue_zeroout > a6f0788 block: add support for REQ_OP_WRITE_ZEROES > bef1331 block: don't try to discard from __blkdev_issue_zeroout > eeeefd4 block: don't try Write Same from __blkdev_issue_zeroout > 35b785f md: add bad block support for external metadata > 688834e md/failfast: add failfast flag for md to be used by some personalities. > 504634f md: add blktrace event for writes to superblock > 85c9ccd md/bitmap: Don't write bitmap while earlier writes might be in-flight > 91a6c4a md: wake up personality thread after array state update > 060b068 md: perform async updates for metadata where possible. > be306c2 md: define mddev flags, recovery flags and r1bio state bits using enums > 46533ff md: Use REQ_FAILFAST_* on metadata writes where appropriate > 6995f0b md: takeover should clear unrelated bits > 394ed8e md: cleanup mddev flag clear for takeover > 32cd7cb md/raid5: Use correct IS_ERR() variation on pointer check > 109e376 md: add block tracing for bio_remapping > 2648381 md: disable WRITE SAME if it fails in underlayer disks > 3deff1a md: support REQ_OP_WRITE_ZEROES > f00d7c8 md/raid0: fix up bio splitting. > 29efc39 md/md0: optimize raid0 discard handling > > The above patches were pulled into the backports due to either static dependency or semantic dependency. > > Let me know if it is possible to include these patches into stable v4.9.y. That's a lot of patches, I'd like verification from the maintainers/developers of them that this is ok to do and they have no objection to it. Otherwise, why not just use 4.13 or 4.14 when it comes out? thanks, greg k-h