io_uringの記事とその反応

io_uringの記事とその反応
2
_ko1 @_ko1

@kazuho @blackenedgold system call が単純に read 分 1 個減るか

2021-02-24 13:35:17
Kazuho Oku @kazuho

@_ko1 @blackenedgold 減るんじゃないかなーと予想しています。コピーは早いし、特に小サイズのi/oにおいては差がでない気がするので、syscall自体のオーバーヘッドのほうじゃないでしょうか

2021-02-24 13:36:58
Takeshi HASEGAWA @hasegaw

@kazuho @_ko1 @blackenedgold I/O 回数が多いときにメリットありそうですね。 Meltdown & Spectre などで syscall が高価になったりもしてますし。個人的には C10K なネットワークサーバなどでの効果がより大きくなるんだろうなと想像しています。

2021-02-24 13:42:14
Kazuho Oku @kazuho

面白い。disk i/oで引っかかるケースでio_uringならレイテンシ隠蔽ができることと、引っかからないケースで通常のfile i/o並に速いことが読み取れるので、io_uring実用的という結論になると思う / htn.to/3WioniSHcJ

2021-02-24 13:43:24
Takeshi HASEGAWA @hasegaw

@kazuho @_ko1 @blackenedgold スレッドみたらC10Kがガイシュツだった...

2021-02-24 13:44:54
Kazuho Oku @kazuho

@hasegaw @_ko1 @blackenedgold そうですね、僕は、syscallのオーバーヘッド削減については、上に書いたように、c10kなサーバでも、i/oサイズがMTUあるいはそれ以上のケースなら実用上のメリットは薄いと思っています。disk i/oを隠蔽できるメリットはc10kに限らず有用

2021-02-24 13:45:49
Kazuho Oku @kazuho

@hasegaw @_ko1 @blackenedgold 具体的な数字をあげるとネットワークへの書込iサイズ15KB(MTU1500,GSO10)、読込はackみたいなケースで、5gbeを1コアのロード40%くらいでサチれるので、実際のところ、よほどi/oサイズが小さくなければ、マルチコアで25gbeとかサチるのは難しくない github.com/h2o/quicly/pul…

2021-02-24 13:49:29
Takeshi HASEGAWA @hasegaw

@kazuho @_ko1 @blackenedgold ありがとうございます。ファイルI/Oで有用というのは aio に対して何か優位性見えますか? たんに非同期でよければ aio でもいい気がしますし。

2021-02-24 13:51:45
Kazuho Oku @kazuho

@hasegaw @_ko1 @blackenedgold aioはdirect i/oだから、キャッシュされていないデータ専用コードになりませんか(別の言い方をすると、独自にファイルキャッシュ実装する必要がある)。io_uring使うとbuffered i/oの良さとnon-blockingの良さの両方を手に入れられるんじゃないかと

2021-02-24 13:55:45
Takeshi HASEGAWA @hasegaw

@kazuho @_ko1 @blackenedgold さいきんqemuのソース見たらio_uring+coroutineでシングルスレッド並列IOするような構造になってましたけど、大量のファイルをページキャッシュ経由で読んで配信する用途でもおなじようなアプローチをとったりすると確かにおいしそうですね。

2021-02-24 14:00:37
Kazuho Oku @kazuho

@hasegaw @_ko1 @blackenedgold あーなるほどqemuのその使い方は面白い&納得感ありますね

2021-02-24 14:03:00
_ko1 @_ko1

@kazuho @hasegaw @blackenedgold qemu のどの辺で使ってるんです?

2021-02-24 14:03:32
Takeshi HASEGAWA @hasegaw

@_ko1 @kazuho @blackenedgold インターンで実装したexperimentalなもので、広く使われてはいないと思います。

2021-02-24 14:06:47
Kazuho Oku @kazuho

VMのdisk i/oは非同期だし、qemu側ではbuffered i/oにしたいこともあればdirect i/oにしたいこともあるだろうし、みたいに考えるとio_uring使うのは納得感強い twitter.com/hasegaw/status…

2021-02-24 14:08:38
_ko1 @_ko1

@hasegaw @kazuho @blackenedgold なるほど github.com/qemu/qemu/blob… 元々 aio IO があって、そのバックエンドにするんですね(元々はそういう hardware emulation とかで使うのかな)

2021-02-24 14:11:13
Takeshi HASEGAWA @hasegaw

@_ko1 @kazuho @blackenedgold やってることは、ゲストOSに見せたSCSI/IDE/virtioデバイスからのIO要求がpwritev/preadvみたいなもので、同時に複数の要求がきたりするので、それをIOスレッドが実際にさばいて制御を戻す(完了通知を返す)感じです。

2021-02-24 14:13:16
Takeshi HASEGAWA @hasegaw

@_ko1 @kazuho @blackenedgold coroutineで実装されてるのをみてうまいなあと思いました。

2021-02-24 14:15:11
Kazuho Oku @kazuho

@hasegaw @_ko1 @blackenedgold 僕的はqemuがコルーチン使ってるの知らなかったので面白かったです(使うと楽になるタイプのソフトウェアだし、そこまでパフォーマンスにシビアなソフトでもないので使うのは妥当だと思う)

2021-02-24 14:18:59
_ko1 @_ko1

@kazuho QEMUで direct i/o にすることあるんかなと思ってたんですが、あるんですねぇ wiki.archlinux.jp/index.php/QEMU direct=on

2021-02-24 14:20:46
Kazuho Oku @kazuho

@_ko1 いやむしろ、ハイパーバイザはdirect i/oするのが普通じゃないでしょうか? キャッシュはゲストOSの仕事なので...

2021-02-24 14:21:33
Takeshi HASEGAWA @hasegaw

@kazuho @_ko1 @blackenedgold 複数のIO要求が同時にきたときに、並列にバックエンドに要求をなげつつ、はやくおわったものから順に返事を返すってワークロードには向いてるんですよね。kazuhoさん的にはコルーチンだとオーバーヘッド気になるという感じですか?スレッドよりはいいのかなというぐらいに思ってました。

2021-02-24 14:21:45
_ko1 @_ko1

@kazuho 私の QEMU 感は guest os 用なので...(10年くらい認識が古そう)

2021-02-24 14:22:31