zswap の same filled pages について

Published: 2021/5/6


Zswap には、 same filled pages があるが、それはどういうものかについての覚書。

Zswap は、圧縮して管理対象にしたページに対しては、その管理用のメタデータを保持する。 そのメタデータにおいて、圧縮後のバイト数とプール上の場所を表す handle を保持する必要があるが、 そこにバイト数を0、handle を実際の何かしらの long 値を突っ込むことで、 その long 値が繰り返し現れていたページを表現する。

struct zswap_entry {
    struct rb_node rbnode;
    pgoff_t offset;
    int refcount;
    unsigned int length;
    struct zswap_pool *pool;
    union {
        unsigned long handle;
        unsigned long value;
    };
};

このように管理することで、同一の long 値が繰り返されるようなページに対しては、 メタデータだけでそれを表現して、圧縮してしまうことが可能になり、 これが same filled page の動作原理である。

おそらく、 0 埋めのページなどがよくある利用パターンなのだろうな、と思われる。

参考: https://github.com/torvalds/linux/blob/master/mm/zswap.c


Tags: linuxzswap
Next: POSIX における文字とエンコーディング(ロケール)と正規表現
Prev: NextJs にブログを移行した