NFSのスロットリングは意外と難しい

社の仕事でNFSのリソースを一部のプロセスがめちゃくちゃ使うから(PHP)何かしらでリソースをスロットリングしたいんだけど、ブロックデバイスじゃないからもちろんCgroupは使えない。

最初はeBPFでIO測定して、しきい値超えたらsleepするべくらいに思ってたんだけど、bccを使う場合は今の所ROな挙動しか認められてなくて、思うようなことはできなかった。

kernel moduleも書いていたのだけど、新し目のkernelだとsys calltableを書き換えることが基本的には制限されていて、パッチあてるかメモリ書き換えないとsyscallをフックしてゴニョゴニョみたいなのは認められてない。

最後に試していたのがLD_PRELOADでopenatあたりをoverrideしてやるかって感じでやってたけど、glibc内で内部解決されるからPHPから呼ばれるopenatをoverrideするのは無理筋みたいな感じ。

kernelをゴニョるか、PHPをゴニョれば確実にできることはわかっているけど、未来を見通すとそこに触れずにいい感じにやれたいなぁ。

諸々ダンプしたから、ちょっと岩盤浴行ってシャワー浴びてるときになにか降ってくるのを期待するブログ。