softflowdのデータ構造

softflowdのデータ構造 softflowdは、筆者がメンテナンスしているソフトウェアですが、元々はDamien Millerという方がオリジナルの作者です。 そのため、自分があまりきちんと把握せずにメンテしている部分もあります(正確に言うと自分で書いていないから忘れてしまう)。そのあまりきちんと把握していない部分にsoftflowd内部で使われているFlowのメモリ管理がわからなくなったのでコードを読み直して調べなおしました。そのメモです。 分析したのはsoftflowd.hのFLOWTRACK構造体です。 struct FLOWTRACK { /* The flows and their expiry events */ FLOW_HEAD (FLOWS, FLOW) flows; /* Top of flow tree */ EXPIRY_HEAD (EXPIRIES, EXPIRY) expiries; /* Top of expiries tree */ struct freelist flow_freelist; /* Freelist for flows */ struct freelist expiry_freelist; /* Freelist for expiry events */ struct FLOWTRACKPARAMETERS param; }; freelist リストを実現する構造体です。一定のエントリ数分まとまってメモリ領域を確保するようになっており単純なリストに比べて連続した領域をとるようになっています。freelist.hで定義されているstruct freelistは以下の内容です。 struct freelist { size_t allocsz; size_t nalloc; size_t navail; void **free_entries; }; allocszはallocate sizeの略と想定され、free_entriesが指し示す先の各エントリのサイズを意味しています。 softflowd....

February 3, 2024