The iSCSI stack is based on our self asynchronous, high concurrency scheduler, and FlexSDS has full rewritten and redesign the current iSCSI module and creates it as a high performance, high concurrency, polling mode and multiple channel (core) iSCSI stack for FlexSDS scale-out storage, that makes storage IO could be lingered scale-up by adding hardware resources.
The iSCSI stack is working on dedicated core for each channel, except discovery part, the full stack is sub-kernel-by-pass (since iSCSI using TCP, there is inevitably introduce some kernel mode objects like fd, for discovery part, it works globally, and listen to specified port for accepting client connection, once it get an connection, it will redirect the client connection to a specified core via R-Call (Remote core RPC), R-Call is FlexSDS cross core communication component, it drives lock-free model communication between multiple CPU cores, using round-robin way to select one I/O polling core if there is more than one I/O polling cores.
During support to the traditional I/O model, FlexSDS supports the following model for iSCSI service:
1. NVMe user mode (kernel-by-pass).
2. NVMe kernel mode (through /dev/nvmeXnY)
3. SATA / SAS disks via /dev/sdX