はじめに
WSLでデフォルトで使われるカーネルはio_uring
が無効になっています。
すこし調べると本家からフォークしたこちらのリポジトリでbzImageが配布されていてio_uring
が使えるのですが、少しヘビーな使う方をするとうまく動きません。https://github.com/hatoo/io_uring_test のプログラムがうまく動きません。
今回は普通にhttps://github.com/microsoft/WSL2-Linux-Kernel のコンフィグをいじって自分でカーネルをビルドしたらうまく行ったのでそのやり方を共有します。
手順
作業はWSL上で行います
1. microsoft/WSL2-Linux-Kernel
のリリースページからソースコードをダウンロードする。
クローンしたコードだとうまくいきませんでした
$ wget https://github.com/microsoft/WSL2-Linux-Kernel/archive/refs/tags/linux-msft-wsl-5.10.16.3.tar.gz
##2. 解凍する
$ tar -zxvf https://github.com/microsoft/WSL2-Linux-Kernel/archive/refs/tags/linux-msft-wsl-5.10.16.3.tar.gz
$ cd linux-msft-wsl-5.10.16.3
3. コンフィグを編集してio_uring
を有効にする
Microsoft/config-wsl
を編集してCONFIG_IO_URING
のところをCONFIG_IO_URING=y
にする。
4. Make
make -j16 KCONFIG_CONFIG=Microsoft/config-wsl
5. bzImageをWindowsの適当なところに置く
例えば
cp arch/x86_64/boot/bzImage /mnt/c/Users/$(ユーザー名)/Linux/bzImage
6. .wslconfigを編集する
C:\Users\$(ユーザー名)\.wslconfig
を編集して
こんな感じにする
[wsl2]
kernel = C:\\Users\\$(ユーザー名)\\Linux\\bzImage
7 WSLの再起動
Windowsのシェルで
> wsl --shutdown
ulimit -l
io_uring
を使っているとmax locked memory
の値が足りなくてエラーになることがあります。
WSLだと普通のやり方ではulimitの値が変えられないようなのでその場合はhttps://github.com/microsoft/WSL/issues/1576#issuecomment-643804974 を参考にすると良いです。