協力的I/Oで可能になる様々な新しい最適化群
表示
筆者は以前固定長のメモリ片のリサイクラーを書いた。ある決まった大きさのメモリが大量に必要で、さらにそれらは頻繁にアロケート、フリーを繰り返すとする。この時最初にユーザーに専用のヒープを用意する関数を呼んでもらい、アロケートとフリーはそのヒープから行う関数を呼んでもらう。このことによってその大きさのメモリに関しては100%のリサイクルが達成されるのである。
このアプローチはユーザーに最適化への協力をストレートにお願いしている。malloc等の共通の窓口で要求されたサイズに応じて自動で処理を振り分けるといったことはしていない。このアプローチが新しい種類の最適化の数々を可能にすることを示すのが本稿の目的である。
例えばハードディスクアクセス。あらゆる最適化努力がすでに費やされ基本的にもうこれ以上劇的には速くなりませんという状態にあるとする。それでもなんらかの特殊な条件に限ったならばできる努力はまだ残っている。例えばあるファイルへのアクセスが一切シークを行わずリニアにしかアクセスしないことがわかっているとする。この時に絞れる知恵はいくつもある。そうして絞った知恵を実装しAPIにし、堂々ユーザーに呼び分けをお願いするのである。
リニアにしかアクセスしないファイルに限らずなんらかの高速化が可能そうな特殊なファイルアクセスは他にもあるかもしれない。ファイルアクセス以外にもネットワークアクセス等に関しても特殊例の予告によって可能な最適化はあるだろう。読者諸氏の検討を祈る次第である。