diff options
author | Uday Shankar <[email protected]> | 2023-05-25 12:22:04 -0600 |
---|---|---|
committer | Keith Busch <[email protected]> | 2023-05-30 20:57:42 -0700 |
commit | c7275ce6a5fd32ca9f5a6294ed89cf0523181af9 (patch) | |
tree | 9751bb1f78691a18d83a3a84aa5f84cb052397b4 /lib/mpi/mpi-bit.c | |
parent | 774a9636514764ddc0d072ae0d1d1c01a47e6ddd (diff) |
nvme: improve handling of long keep alives
Upon keep alive completion, nvme_keep_alive_work is scheduled with the
same delay every time. If keep alive commands are completing slowly,
this may cause a keep alive timeout. The following trace illustrates the
issue, taking KATO = 8 and TBKAS off for simplicity:
1. t = 0: run nvme_keep_alive_work, send keep alive
2. t = ε: keep alive reaches controller, controller restarts its keep
alive timer
3. t = 4: host receives keep alive completion, schedules
nvme_keep_alive_work with delay 4
4. t = 8: run nvme_keep_alive_work, send keep alive
Here, a keep alive having RTT of 4 causes a delay of at least 8 - ε
between the controller receiving successive keep alives. With ε small,
the controller is likely to detect a keep alive timeout.
Fix this by calculating the RTT of the keep alive command, and adjusting
the scheduling delay of the next keep alive work accordingly.
Reported-by: Costa Sapuntzakis <[email protected]>
Reported-by: Randy Jennings <[email protected]>
Signed-off-by: Uday Shankar <[email protected]>
Reviewed-by: Hannes Reinecke <[email protected]>
Reviewed-by: Christoph Hellwig <[email protected]>
Signed-off-by: Keith Busch <[email protected]>
Diffstat (limited to 'lib/mpi/mpi-bit.c')
0 files changed, 0 insertions, 0 deletions