Download the recent 'linux-block' source tree that includes batching-dispatch and nvme-tcp optimizations[1][2][3].
git clone -b for-5.9/drivers https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git
- Download our i10 I/O scheduler kernel module and copy to the kernel source tree:
git clone https://github.com/i10-kernel/upstream-linux.git
cd upstream-linux
cp i10-iosched.patch /usr/src/linux-block/
cd /usr/src/linux-block/
- Apply the patch to the 'linux-block' kernel source tree.
patch -p1 < i10-iosched.patch
- Make sure the i10 module is included in the kernel configuration:
make menuconfig
IO Schedulers ---> <M> i10 I/O scheduler
Please refer to the i10-implementation repository for the remaining parts.
We assume that a target device (e.g., nvme0n1) is already initialized via NVMe-over-TCP.
- Load i10 I/O scherduler:
modprobe i10-iosched
- Use i10 I/O scheduler for the target device:
echo i10 > /sys/block/nvme0c0n1/queue/scheduler
- The default batch size (in #requests, bytes, or timeout) can be changed:
echo 16 > /sys/block/nvme0c0n1/queue/scheduler/iosched/batch_nr
echo 65536 > /sys/block/nvme0c0n1/queue/scheduler/iosched/batch_bytes
echo 50 > /sys/block/nvme0c0n1/queue/scheduler/iosched/batch_timeout