長い本を合成している最中にアクティビティモニタを見ていたら、Aoedeのメモリ使用量が49GBまで上がっていました。ふつうなら、これは深刻なリーク、最後にはアプリが強制終了させられるやつに見えます。でも、リークではまったくありませんでした。
原因はMLX、KokoroをGPUで動かしているフレームワークでした。解放したバッファを上限なしの再利用プールに溜めるので、プールは合成のピーク作業セットに合わせて膨らんだまま居座ります。メモリはずっと回収可能で、失われてはいません。とはいえ、何もしていないときに数十GBを抱えているアプリは、やはりマシンにとって迷惑な隣人です。直し方は小さくて、モデルのロード時にプールを512MBに制限し、エンジンがアイドルになったらクリアするだけです。合成中のライブメモリはごくわずかなので、フットプリントは挙動も速度も変えずに1〜2GBまで下がりました。
毎回学び直すのは、数字が上がることと、リークすることは別だということです。ここでの誠実な直し方は、ありもしないリークを追いかけることではなく、どれだけキャッシュにコストを払うつもりかをフレームワークに伝えることでした。