We interviewed NetBSD programmers Christos Zoulas, Luke Mewburn, Ben Collver, Nathan J. Williams, Jaromir Dolecek, Chuck Silvers, Hubert Feyrer, Bret Lymn, Jan Schaumann, Roland Dowdeswell, and Niels Provos. Here's what they had to say about some of the new features in NetBSD:
我々(訳注:NewsForge記者)は、NetBSDのプログラマのChristos Zoulas, Luke Mewburn, Ben Collver, Nathan J. Williams, Jaromir Dolecek, Chuck Silvers, Hubert Feyrer, Bret Lymn, Jan Schaumann, Roland Dowdeswell, およびNiels Provosにインタビ
Q9: What is the new kqueue framework?
あたらしいkqueueの枠組とは?
Jaromir Dolecek: Traditional select()/poll() is only limited to descriptors. There are other interesting kernel events, such as signals, or file system changes.
伝統的なselect()/poll()システムコールの組合せでは、記述子に限定されていた。しかし、他にもシグナルやファイルシステムの変更など興味深いカーネル事象がある。
Furthermore, select()/poll() doesn't scale very well for a large number of watched descriptors. Their efficiency decreases quickly with larger sets -- the whole watched descriptor set must be passed for each syscall invocation, forcing the system to perform two memory copies across the user/kernel boundary, reducing the memory bandwidth available for other activities. The internal kernel handling is not very scalable either, forcing the kernel to do potentially several passes through the list and having poor interaction if a descriptor is watched by more than one process or thread.
しかも、select()/poll()は、大規模な数の記述子を見張る場合にスケーラビリティが悪い。大きな集合になると、その効率は急激に減衰する。システムコールの呼出しごとに、検査する記述子集合すべてが渡される、つまりユーザ領域とカーネル領域の境界を越えて2回のメモリコピーを実行を強いられる。これは利用可能なメモリのバンド幅を減らし、他の動作に影響する。また、カーネル内の取り扱いもスケールしない。潜在的にいくつかのリストの受渡しをカーネルに強要し、記述子が一つ以上のプロセスまたはスレッドに監視されている場合に、ひどい交互作用を引き起こす。
kqueue provides a generic method of notifying the user when an event happens or condition holds, and also provides further information related to the event. The kqueue framework is stateful, application registers interested in events with the kernel via the kqueue descriptor, and can wait for any of the events to occur. For NetBSD 2.0, supported events include the traditional functionality provided by select()/poll(); notifications for file system events such as unlink, rename, attribute changes, similar to the Windows directory notifications or IRIX's /dev/imon; signals; and an arbitrary number of timers. All types of descriptors are supported, including FIFOs, sockets, open files or other kqueue descriptors. There are no limits on the number of registered events for any type of object.
kqueueは、カーネル内事象の発生や、状態の保持、事象に関する詳細情報を通知する一般的な方法を提供する。kqueueは状態依存で、アプリケーションは、kqueueを通してカーネルに関して興味ある事象を登録し、それらの事象の発生を待つことができる。NetBSD 2.0では、伝統的にはselect()/poll()で提供したイベントもサポートする。具体的には、ファイルシステム事象の削除、名前変更、属性変更などで、Windowsのdirectory notificationやIRIXの/dev/imonなどと似ている。また、シグナルや任意の数のタイマーも含む。すべての種類の記述子をサポートし、FIFOやsocket、開いたファイルやその他のkqueue事象を含む。登録する事象やオブジェクトの種類には制約はない。
kqueue is usually used synchronously. The kqueue descriptor is pollable too, so it's compatible with the traditional non-blocking application model. Asynchronous notification of new events is available as well, by using standard O_ASYNC signal semantics on the kqueue descriptor.
kqueueは、通常同期的に用いる。が、kqueue記述子はポーリングも可能なので、伝統的な非ブロックアプリケーションでも利用可能だ。新しい事象の非同期通知も利用可能だが、kqueue記述子で通常のO_ASYNCのシグナルフラグを与えて行う。
翻訳のツリー (スコア:4, 参考になる)
我々(訳注:NewsForge記者)は、NetBSDのプログラマのChristos Zoulas, Luke Mewburn, Ben Collver, Nathan J. Williams, Jaromir Dolecek, Chuck Silvers, Hubert Feyrer, Bret Lymn, Jan Schaumann, Roland Dowdeswell, およびNiels Provosにインタビ
Q9 and A9 (スコア:1)
あたらしいkqueueの枠組とは?
Jaromir Dolecek: Traditional select()/poll() is only limited to descriptors. There are other interesting kernel events, such as signals, or file system changes.
伝統的なselect()/poll()システムコールの組合せでは、記述子に限定されていた。しかし、他にもシグナルやファイルシステムの変更など興味深いカーネル事象がある。
Furthermore, select()/poll() doesn't scale very well for a large number of watched descriptors. Their efficiency decreases quickly with larger sets -- the whole watched descriptor set must be passed for each syscall invocation, forcing the system to perform two memory copies across the user/kernel boundary, reducing the memory bandwidth available for other activities. The internal kernel handling is not very scalable either, forcing the kernel to do potentially several passes through the list and having poor interaction if a descriptor is watched by more than one process or thread.
しかも、select()/poll()は、大規模な数の記述子を見張る場合にスケーラビリティが悪い。大きな集合になると、その効率は急激に減衰する。システムコールの呼出しごとに、検査する記述子集合すべてが渡される、つまりユーザ領域とカーネル領域の境界を越えて2回のメモリコピーを実行を強いられる。これは利用可能なメモリのバンド幅を減らし、他の動作に影響する。また、カーネル内の取り扱いもスケールしない。潜在的にいくつかのリストの受渡しをカーネルに強要し、記述子が一つ以上のプロセスまたはスレッドに監視されている場合に、ひどい交互作用を引き起こす。
kqueue provides a generic method of notifying the user when an event happens or condition holds, and also provides further information related to the event. The kqueue framework is stateful, application registers interested in events with the kernel via the kqueue descriptor, and can wait for any of the events to occur. For NetBSD 2.0, supported events include the traditional functionality provided by select()/poll(); notifications for file system events such as unlink, rename, attribute changes, similar to the Windows directory notifications or IRIX's /dev/imon; signals; and an arbitrary number of timers. All types of descriptors are supported, including FIFOs, sockets, open files or other kqueue descriptors. There are no limits on the number of registered events for any type of object.
kqueueは、カーネル内事象の発生や、状態の保持、事象に関する詳細情報を通知する一般的な方法を提供する。kqueueは状態依存で、アプリケーションは、kqueueを通してカーネルに関して興味ある事象を登録し、それらの事象の発生を待つことができる。NetBSD 2.0では、伝統的にはselect()/poll()で提供したイベントもサポートする。具体的には、ファイルシステム事象の削除、名前変更、属性変更などで、Windowsのdirectory notificationやIRIXの/dev/imonなどと似ている。また、シグナルや任意の数のタイマーも含む。すべての種類の記述子をサポートし、FIFOやsocket、開いたファイルやその他のkqueue事象を含む。登録する事象やオブジェクトの種類には制約はない。
kqueue is usually used synchronously. The kqueue descriptor is pollable too, so it's compatible with the traditional non-blocking application model. Asynchronous notification of new events is available as well, by using standard O_ASYNC signal semantics on the kqueue descriptor.
kqueueは、通常同期的に用いる。が、kqueue記述子はポーリングも可能なので、伝統的な非ブロックアプリケーションでも利用可能だ。新しい事象の非同期通知も利用可能だが、kqueue記述子で通常のO_ASYNCのシグナルフラグを与えて行う。