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)
Sep 27 2024, 4:24 AM
Unknown Object (File)
Sep 26 2024, 11:48 PM
Unknown Object (File)
Sep 25 2024, 3:36 PM
Unknown Object (File)
Sep 23 2024, 2:01 PM
Unknown Object (File)
Sep 21 2024, 5:01 PM
Unknown Object (File)
Sep 20 2024, 7:31 PM
Unknown Object (File)
Sep 17 2024, 6:41 PM
Unknown Object (File)
Aug 22 2024, 5:53 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 34139
Build 31299: 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
1076

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.