FUA, PREFLUSH, VWC redux

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I'm hoping somebody can clarify the correct PREFLUSH and FUA behavior from a
block stack client.  I'm starting to suspect that some of my devices are
failing to inform the block stack correctly of their capabilities - leading
to expensive and unnecessary flushes.

My understanding is this:

* If I require confirmation that a single write is durable upon
completion, attach REQ_FUA to the bio.
* If I require that the current write plus all previously completed
writes be durable as of completion of the current write, attach
REQ_FUA and REQ_PREFLUSH to the bio.
* Both REQ_FUA and REQ_PREFLUSH should be NOPs on a device with with a
non-volatile write cache.

But I have a small problem - I don't know which write is last, until I
receive a Commit call.  That means that at Commit time, I should send
a "FLUSH".

I am calling a function based on blkdev_issue_flush(), but this causes
I big performance penalty even though my nvme ssd has VWC==0.

Does this make sense?

Perhaps blkdev_issue_flush() is intended to flush caches even if they
are non-volatile?

What is the "correct" way to get a "REQ_PREFLUSH" with a zero length
write, if not via blkdev_issue_flush()?

Thanks for any tips,
John Groves



[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux