Page MenuHomeFreeBSD

nvme: Use shared timeout rather than timeout per transaction
AbandonedPublic

Authored by imp on Oct 13 2020, 8:02 PM.
Tags
None
Referenced Files
Unknown Object (File)
Wed, Apr 10, 10:36 PM
Unknown Object (File)
Mar 8 2024, 12:00 AM
Unknown Object (File)
Feb 18 2024, 8:40 PM
Unknown Object (File)
Jan 30 2024, 9:11 AM
Unknown Object (File)
Dec 22 2023, 11:23 PM
Unknown Object (File)
Dec 12 2023, 2:57 PM
Unknown Object (File)
Nov 13 2023, 8:02 AM
Unknown Object (File)
Nov 4 2023, 9:17 AM
Subscribers

Details

Reviewers
None
Summary

Keep track of the approximate time commands are 'due' and the next
deadline for a command. twice a second, wake up to see if any commands
have entered timeout. If so, quiessce and then enter a recovery mode
half the timeout further in the future to allow the ISR to
complete. Once we exit recovery mode, send a command with no negative
effect to the drive to ensure that any commands that completed after
we last poll are handled in a timely manner.

Diff Detail

Lint
Lint Passed
Unit
No Test Coverage
Build Status
Buildable 34146
Build 31305: arc lint + arc unit

Event Timeline

imp requested review of this revision.Oct 13 2020, 8:02 PM

oldest is always front of queue, use this observation to make deadline more robust.

to ensure that any commands that completed after we last poll are handled in a timely manner.

How does sending a NOP ensure that result?

sys/dev/nvme/nvme_private.h
170

nvme_recovery_state would be clearer, IMHO.

173

/* This phase of recovery, initiate controller reset */ scans better to me.

sys/dev/nvme/nvme_qpair.c
971

The first operation will set deadline to non-SBT_MAX, and then outstanding_tr would become empty when all in-flight operations complete, right? Wouldn't that mean that this would get printed all the time on an idle system?

An updated patch was uploaded as D28583, so abandoning this in favor of that.