Open Alphacode18 opened 8 months ago
Hi @Alphacode18
In order to use concurrent IOs, you need to enable async multitasking at Navy layer (navy-async) by enabling NavyRequestScheduler
; refer to this and this for details. Note that qdepth will be set automatically if you enable navy-async (ref).
If you override the qdepth with some value >1 without enabling navy-async, you would have hit this assertion in debug build.
Hi @jaesoo-fb
Thank you for your prompt response. I see. I am now able to set qDepth
automatically by varying the navyMaxNumReads
and navyMaxNumWrites
, with navyReaderThreads
and navyWriterThreads
set to 1.
Would you know if NavyRequestScheduler
is a parameter I can set using the config file? Maybe I am missing something, but I can't seem to set it correctly.
Thank you for all your help!
@Alphacode18 NavyRequestScheduler
(async) as opposed to OrderedThreadPoolScheduler
is activated if you provide non-zero values for navyMaxNumReads
and navyMaxNumWrites
. See this
Oh I see! Thanks. Unfortunately, in submitIo
, I still see numOutstanding_
oscillate between 0 and 1 (similar to the log above). Is that the correct place to log? If not, could you point me to the right place? I just want to verify that I am indeed seeing numOutstanding_
roughly similar to qDepth
.
Here's my updated config:
{
"cache_config" : {
"cacheSizeMB" : 100,
"numPools" : 1,
"nvmCacheSizeMB": 40960,
"nvmCachePaths": ["/mnt/nvme0n1/cachelib/testfile"],
"navyEnableIoUring": false,
"navyBlockSize": 4096,
"navyMaxNumReads": 16,
"navyMaxNumWrites": 16,
"navyReaderThreads": 1,
"navyWriterThreads": 1
},
"test_config" : {
"enableLookaside": true,
"numThreads" : 1,
"numKeys" : 1000000,
"numOps" : 5000000,
"distribution" : "range",
"generator": "workload",
"keySizeRange" : [16, 16],
"keySizeRangeProbability" : [1],
"valSizeRange" : [4096, 4096],
"valSizeRangeProbability" : [1],
"setRatio" : 0.0,
"delRatio" : 0.0,
"loneGetRatio" : 0.0,
"getRatio" : 1
}
}
@Alphacode18 Navy configuration looks correct, but stressor configuration looks not; you are using only 1 thread (numThreads
), meaning there will only be at most one outstanding cachelib requests.
Oh, I see. In this case, may I ask three questions:
qDepth
independent to the number of threads (and have cachelib
enforce that, i.e., maintain those many requests in-flight per thread?)qDepth
is always upper-bounded by the numThreads
(i.e., I can't have I/O depth 8 if numThreads
= 1), how can I get rid of this upper bound?Thank you for all your help!
Hi,
I have been exploring using
cachelib
for an experiment, where I am using 1cachebench
thread to send requests to an underlying SSD (usingnvmCache
) for a certainqDepth
. However, despite settingnavyQDepth
in my configuration file, I am observing thatcachebench
never goes beyond 1 in-flight request.Here's my configuration file:
I have also performed some logging within the
submitIo
function incachelib/navy/common/Device.cpp
file to see the number of inflight requests. Adding those here for clarity:Any help would be greatly appreciated!