[PATCH v2 00/18] fs/ceph: optimize struct layouts

Max Kellermann <[email protected]>
Newsgroups org.kernel.vger.ceph-devel,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
This patch set aims to reduce the memory usage of the Ceph filesystems
by optimizing the layout of structs, most importantly struct
ceph_inode_info:

- use `bool` instead of `int` for booelans
- use `u32` instead of `u64` where possible
- reorder fields to eliminate padding holes
- eliminate redundant fields

Without this patch set, ceph_inode_info looks like this with pahole:

	/* size: 1456, cachelines: 23, members: 79 */
	/* sum members: 1424, holes: 8, sum holes: 32 */
	/* member types with holes: 3, total: 3 */

With this patch set, struct ceph_inode_info got smaller by 96 bytes:

	/* size: 1360, cachelines: 22, members: 76 */
	/* member types with holes: 1, total: 1 */

struct ceph_cap shrinks by 24 bytes:

	/* size: 120, cachelines: 2, members: 12 */

	/* size: 96, cachelines: 2, members: 10 */

struct ceph_snap_realm shrinks by 24 bytes, too:

	/* size: 232, cachelines: 4, members: 21 */
	/* sum members: 216, holes: 3, sum holes: 12 */

	/* size: 208, cachelines: 4, members: 20 */

---
v1->v2:
 - fix CONFIG_FS_ENCRYPTION check in "i_truncate_pagecache_size" patch
 - add patches to shrink ceph_cap and ceph_snap_realm

Max Kellermann (18):
  fs/ceph/super: remove unused field `i_cap_migration_resv`
  fs/ceph/super: make field `i_truncate_pagecache_size` optional
  include/ceph/ceph_fs.h: convert `pool_id` to u32
  fs/ceph/super.h: convert ceph_inode_xattr fields to `bool`
  fs/ceph/super.h: convert ceph_cap_snap.writing fields to `bool`
  fs/ceph: consistently use `u32` for `time_warp_seq`
  fs/ceph/super: reorder fields to eliminate padding holes
  fs/ceph: remove i_truncate_mutex, use i_fragtree_mutex for both
  fs/ceph/super.h: add `const` to helpers
  fs/ceph/super.h: add helper ceph_in_snap()
  fs/ceph: use ceph_vino() etc. instead of accessing i_vino directly
  fs/ceph: remove redundant inode number from ceph_inode_info
  fs/ceph: remove unused field `ceph_cap.last_used`
  fs/ceph: convert ceph_cap.queue_release to bool
  fs/ceph/super: move `ceph_cap.caps_item` into the union
  fs/ceph/snap: add a kmem_cache for struct ceph_snap_realm
  fs/ceph/super: reorder struct ceph_snap_realm fields
  fs/ceph/super: remove redundant field `ceph_snap_realm.parent_ino`

 fs/ceph/acl.c                |   2 +-
 fs/ceph/addr.c               |  23 ++++---
 fs/ceph/cache.c              |   4 +-
 fs/ceph/caps.c               |  14 ++--
 fs/ceph/dir.c                |  20 +++---
 fs/ceph/export.c             |   8 +--
 fs/ceph/file.c               |  28 ++++----
 fs/ceph/inode.c              |  38 +++++++----
 fs/ceph/mds_client.c         |  16 ++---
 fs/ceph/mds_client.h         |   2 +-
 fs/ceph/quota.c              |   6 +-
 fs/ceph/snap.c               |  17 +++--
 fs/ceph/super.c              |   9 +++
 fs/ceph/super.h              | 123 +++++++++++++++++++++++++----------
 fs/ceph/util.c               |   8 +--
 fs/ceph/xattr.c              |  18 ++---
 include/linux/ceph/ceph_fs.h |   2 +-
 include/linux/ceph/libceph.h |   1 +
 18 files changed, 204 insertions(+), 135 deletions(-)

-- 
2.47.3
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.