[HiCache] Stop arming a prefetch retry for a too-short storage span (#40042)
This commit is contained in:
@@ -1981,9 +1981,9 @@ class UnifiedRadixCache(BasePrefixCache):
|
|||||||
if prefetch_length < self.prefetch_threshold:
|
if prefetch_length < self.prefetch_threshold:
|
||||||
if prefetch_length > 0:
|
if prefetch_length > 0:
|
||||||
stats["declined_too_short"] += 1
|
stats["declined_too_short"] += 1
|
||||||
# A too-short/fully-matched suffix can become a full recompute if
|
# No lookup was issued, so no retry is armed: polling here would
|
||||||
# the device match evicts while queued; arm the retry.
|
# spend the re-issue budget the admission-time device-hit-loss
|
||||||
self.storage_prefetch_retries.poll_miss(req_id)
|
# re-query needs once the device match evicts while queued.
|
||||||
return
|
return
|
||||||
if not buffer_mode and self.cache_controller.prefetch_rate_limited():
|
if not buffer_mode and self.cache_controller.prefetch_rate_limited():
|
||||||
stats["declined_rate_limited"] += 1
|
stats["declined_rate_limited"] += 1
|
||||||
|
|||||||
@@ -4276,8 +4276,9 @@ class UnifiedRadixCacheSuite:
|
|||||||
cons.finish(aborted_rid, CacheRequestOutcome.ABORT)
|
cons.finish(aborted_rid, CacheRequestOutcome.ABORT)
|
||||||
self.assertNotIn(aborted_rid.rid, cons.storage_prefetch_retries._pending)
|
self.assertNotIn(aborted_rid.rid, cons.storage_prefetch_retries._pending)
|
||||||
|
|
||||||
# A fully-device-matched (empty-suffix) decline also arms the retry:
|
# A fully-device-matched (empty-suffix) decline issues no lookup and
|
||||||
# the device match can evict while the request waits in the queue.
|
# arms no retry; a queue-time eviction of that device match is
|
||||||
|
# re-queried at admission with the re-issue budget intact.
|
||||||
cons.prefetch_from_storage(
|
cons.prefetch_from_storage(
|
||||||
CacheRequestHandle("fully-matched", 0),
|
CacheRequestHandle("fully-matched", 0),
|
||||||
cons.root_node_handle(),
|
cons.root_node_handle(),
|
||||||
@@ -4285,7 +4286,7 @@ class UnifiedRadixCacheSuite:
|
|||||||
None,
|
None,
|
||||||
None,
|
None,
|
||||||
)
|
)
|
||||||
self.assertIn("fully-matched", cons.storage_prefetch_retries._pending)
|
self.assertNotIn("fully-matched", cons.storage_prefetch_retries._pending)
|
||||||
cons.sanity_check()
|
cons.sanity_check()
|
||||||
|
|
||||||
def test_buffer_only_anchor_lock_cap_clamped_by_context_headroom(self):
|
def test_buffer_only_anchor_lock_cap_clamped_by_context_headroom(self):
|
||||||
@@ -5115,7 +5116,9 @@ class UnifiedRadixCacheSuite:
|
|||||||
CacheRequestHandle("subwin-req", 0), cons2.ongoing_prefetch
|
CacheRequestHandle("subwin-req", 0), cons2.ongoing_prefetch
|
||||||
)
|
)
|
||||||
self.assertEqual(cons2._prefetch_outcome_stats["declined_too_short"], 1)
|
self.assertEqual(cons2._prefetch_outcome_stats["declined_too_short"], 1)
|
||||||
self.assertIn("subwin-req", cons2.storage_prefetch_retries._pending)
|
# A declined span issues no lookup, so it must not spend the
|
||||||
|
# re-issue budget on polls.
|
||||||
|
self.assertNotIn("subwin-req", cons2.storage_prefetch_retries._pending)
|
||||||
|
|
||||||
cons2.prefetch_from_storage(
|
cons2.prefetch_from_storage(
|
||||||
CacheRequestHandle("window-req", 0),
|
CacheRequestHandle("window-req", 0),
|
||||||
|
|||||||
Reference in New Issue
Block a user