avoid busy polling when use libspdk_nvmf for discovery service
- Dominant language
- Python
- Stars
- 132
- Forks
- 69
- Avg merge
- 1d 7h
- Merged PRs (30d)
- 47
Description
The SPDK discovery controller(https://github.com/ceph/ceph-nvmeof/issues/63) and the NVMF infrastructure it needs rely on the SPDK event system (pollers). We don't want the Ceph DS to busy-poll, . We're looking at some options for addressing this problem.
The SPDK polling mechanism has an "interrupt mode", which blocks reactor threads on a set of sockets with select(), rather than busy polling. This only works on pollers that are created with a poll rate. Some of the pollers in NVMF are not created with a poll rate, and would probably busy-poll even if interrupt mode was enabled. There are a couple of things we can try in an SPDK app to avoid this. Among the possible solutions are some blunt instruments that will just force all reactor threads to sleep for a few clock ticks periodically. The impact that will have on IO latency is probably OK for an SPDK app that only provides a discovery controller.
Contributor guide
Research direction
Start by reviewing the SPDK discovery controller and NVMF event-system pollers described in the issue, focusing on interrupt mode and pollers without a poll rate. Compare the proposed approaches and verify that the selected solution prevents the Ceph discovery service from busy-polling while keeping discovery-controller I/O latency acceptable.
Written by the indexing model from the issue text.
Assessment
- Domain
- infrastructure, performance
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100