Skip to content

Threading Model

Takeru Ohta edited this page Oct 17, 2018 · 1 revision

OSスレッド

CannyLSでは、一つのデバイスインスタンスに対して、一つのOSスレッドが起動することになる。
通常の構成では一つのデバイスが一つのディスク(e.g., HDD、SSD)を管理することになるため、典型的にはディスク数と同数のOSスレッドが起動することとなる。
ディスクに対するアクセスは、全て対応するOSスレッドを経由して実行されるため、CannyLSを通した場合には、あるディスクに対するI/O要求は全て逐次的に処理されることとなる。CannyLSでは要求のデッドラインに応じたI/Oスケジューリングを行っている関係上、実際に発行されるI/O要求をライブラリ層で完全に把握したいので、このように特定ディスクに対するI/O要求群を一括して管理するモデルを採用している。
ただし、HDDのように並列アクセスに不向きなディスクの場合にはともかく、SSDのようにI/O要求群を並列に処理可能なディスクを使用する場合には、この方式ではその性能を十分に活用しきれない可能性がある。その場合には、ワークアラウンドとはなるが、一つのディスクに対して複数のデバイスインスタンスを割り当てれば、ディスクI/Oの並列度を向上されることも可能となる。

非同期処理

CannyLS内の大半の処理は同期的に実装されているが、デバイスおよびRPC部分ではfuturesに基づく非同期的なインタフェースが提供されている。 またfuturesの実行エンジンとしてはfibersが採用されている。