OpenMPDK / KVSSD

KV SSD host software including APIs and drivers
Other
230 stars 55 forks source link

Why does user library use only one submission/completion queue? #50

Open jhk5361 opened 4 years ago

jhk5361 commented 4 years ago

Location (Korea, USA, China, India, etc.) Korea

Describe the bug I have a question about the KVSSD user library design, not a bug report.

To Reproduce Steps to reproduce the behavior:

Expected behavior A clear and concise description of what you expected to happen.

Screenshots If applicable, add screenshots to help explain your problem.

System environment (please complete the following information)

Workload

Additional context

I have a question about the KVSSD design, not a bug report. Why does the user library use only one queue pair in the current implementation? In order to utilize scalability or the maximum bandwidth of the device in the NVMe architecture, it is appropriate to use a multi-queue structure. In the case of the kernel driver, it was confirmed that an aio completion thread was created for each core. One question here is why user libraries only use one queue pair. I ask if there are any technical issues or limitations in multi-queue user library support.

jhk5361 commented 4 years ago

In addition, we ask whether partial writes that can update existing values ​​for store operations are supported.

hao86yan commented 4 years ago

Please see the reply inline: Question 1: Why the user library uses only 1 pair of queue. 1 pair of queue in the user library could meets the bandwith of KV SSD. In user library, the queue pair is only used for asynchronous IO. It only used to records the I/O operations in progress. Most of work is done in separate user threads. Only only work related to the queue pair is insert an entry to the queue or remove an entry from the queue. The NVMe kernel driver for KV SSD used the MQ mechnism because each I/O needs some CPU-comsuming operations before submited to SSD.

Question 2: whether partial writes that can update existing values ​​for store operations are supported. The partial write is not supported at present. Only partial retrieve is supported.