Add thread to periodically perform pending cache maintenance#2308
Add thread to periodically perform pending cache maintenance#2308jmazanec15 merged 15 commits intoopensearch-project:mainfrom
Conversation
06852a4 to
8392b1d
Compare
|
@owenhalpert The changes look good in general. What I'd be interested in is testing under load for a resource constrained system - can you verify if this adds to the latency or impact the performance in any way? We did implement a force evict before writes with #2015. Can you also enable this feature flag and run the above tests to ensure it behaves well? |
558e7ea to
b10f30f
Compare
|
@kotwanikunal I've completed the benchmarking on a single node cluster limited to 3GB of memory. Before benchmarking my code, I validated the CacheMaintainer was actually running by inspecting the OpenSearch process status in the Docker container and found that after about a minute, the Results below:
This suggests there is no significant impact on latency with my code changes. I've included the full results of these test runs here: https://gist.github.com/owenhalpert/05ad4f5ae9577f717f2c59f2039d52e4 |
30f53b7 to
dc61f6e
Compare
dc61f6e to
1ca8dff
Compare
src/main/java/org/opensearch/knn/index/util/ScheduledExecutor.java
Outdated
Show resolved
Hide resolved
...in/java/org/opensearch/knn/quantization/models/quantizationState/QuantizationStateCache.java
Outdated
Show resolved
Hide resolved
src/main/java/org/opensearch/knn/index/util/ScheduledExecutor.java
Outdated
Show resolved
Hide resolved
src/main/java/org/opensearch/knn/index/memory/NativeMemoryCacheManager.java
Outdated
Show resolved
Hide resolved
1ca8dff to
85b1782
Compare
jmazanec15
left a comment
There was a problem hiding this comment.
Minor comments overall looks good
.../org/opensearch/knn/quantization/models/quantizationState/QuantizationStateCacheManager.java
Show resolved
Hide resolved
| try { | ||
| cache.cleanUp(); | ||
| } catch (Exception e) { | ||
| logger.error("Error cleaning up cache", e); |
There was a problem hiding this comment.
Any exceptions from Guava cache operations would otherwise halt our scheduled executor. If an exception occurs here, it would be from Guava's internals rather than our logic, so per Dooyong's suggestion above we can log it and continue scheduling cleanup tasks.
This way we can ensure the cache maintenance keeps running even if individual cleanup attempts fail, and we can monitor Guava errors in the logs.
src/main/java/org/opensearch/knn/index/util/ScheduledExecutor.java
Outdated
Show resolved
Hide resolved
src/main/java/org/opensearch/knn/index/util/ScheduledExecutor.java
Outdated
Show resolved
Hide resolved
src/main/java/org/opensearch/knn/index/memory/NativeMemoryCacheManager.java
Show resolved
Hide resolved
1a88678 to
ac2500b
Compare
Signed-off-by: owenhalpert <ohalpert@gmail.com>
…UTES Signed-off-by: owenhalpert <ohalpert@gmail.com> Signed-off-by: owenhalpert <ohalpert@gmail.com>
…UTES Signed-off-by: owenhalpert <ohalpert@gmail.com>
Signed-off-by: owenhalpert <ohalpert@gmail.com>
…ounded thread creation Signed-off-by: owenhalpert <ohalpert@gmail.com>
Signed-off-by: owenhalpert <ohalpert@gmail.com>
Signed-off-by: owenhalpert <ohalpert@gmail.com>
Signed-off-by: owenhalpert <ohalpert@gmail.com>
Signed-off-by: owenhalpert <ohalpert@gmail.com>
Signed-off-by: owenhalpert <ohalpert@gmail.com>
Signed-off-by: owenhalpert <ohalpert@gmail.com>
Signed-off-by: owenhalpert <ohalpert@gmail.com>
This reverts commit 66829ea. Signed-off-by: owenhalpert <ohalpert@gmail.com>
spotlessApply Signed-off-by: owenhalpert <ohalpert@gmail.com>
20c6e0b to
71d9759
Compare
Signed-off-by: owenhalpert <ohalpert@gmail.com>
kotwanikunal
left a comment
There was a problem hiding this comment.
LGTM. Thanks @owenhalpert!
Signed-off-by: owenhalpert <ohalpert@gmail.com> (cherry picked from commit b2a47d8)
…rch-project#2308) Signed-off-by: owenhalpert <ohalpert@gmail.com>
…rch-project#2308) Signed-off-by: owenhalpert <ohalpert@gmail.com>
Description
Adds a ScheduledExecutor class that, for each cache, takes in a Runnable with a call to
cleanUpand periodically executes according to the values ofKNN_CACHE_ITEM_EXPIRY_TIME_MINUTESandQUANTIZATION_STATE_CACHE_EXPIRY_TIME_MINUTES. This will perform any pending maintenance (such as evicting expired entries) which was previously only performed when the cache was accessed. The maintenance thread is created whenever a NativeMemoryCache or QuantizationStateCache is instantiated or rebuilt and can be shut down with either class'sclosemethod. Relevant logic for cleanup was added to some testing base classes.Related Issues
Resolves #2239
Check List
--signoff.By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.