Frank Filz has uploaded this change for review.

View Change

FSAL: Convert fsal_obj_ops in fsal_obj_handle to pointer

This trades an extra dereference for a dramatic reduction in the size of
the fsal_obj_handle (which with stacked mdcache is two fsal_obj_handle
structures per cached inode).

The extra dereference will dramatically reduce memory consumtion
(424 bytes per fsal_obj_handle * 2 * 100,000 is 85 MB).

We can also expect some benefit to having a single function vector
per FSAL resulting in the function vector often liing in L2 cache.
A further optimization (coming in a subsequent patch) will be to
move the most used methods to the front of the structure in the hopes
that they can live in a single cache line and this may even live in
the L1 cache on the CPU.

Change-Id: Ie20e50900488d72e7871f2be295cb8241fbc0f3f
Signed-off-by: Frank S. Filz <ffilzlnx@mindspring.com>
---
M src/FSAL/FSAL_CEPH/handle.c
M src/FSAL/FSAL_CEPH/internal.c
M src/FSAL/FSAL_CEPH/internal.h
M src/FSAL/FSAL_CEPH/main.c
M src/FSAL/FSAL_GLUSTER/gluster_internal.c
M src/FSAL/FSAL_GLUSTER/gluster_internal.h
M src/FSAL/FSAL_GLUSTER/handle.c
M src/FSAL/FSAL_GLUSTER/main.c
M src/FSAL/FSAL_GPFS/file.c
M src/FSAL/FSAL_GPFS/fsal_internal.h
M src/FSAL/FSAL_GPFS/handle.c
M src/FSAL/FSAL_GPFS/main.c
M src/FSAL/FSAL_MEM/mem_handle.c
M src/FSAL/FSAL_MEM/mem_int.h
M src/FSAL/FSAL_MEM/mem_main.c
M src/FSAL/FSAL_MEM/mem_up.c
M src/FSAL/FSAL_PROXY/handle.c
M src/FSAL/FSAL_PROXY/main.c
M src/FSAL/FSAL_PROXY/pxy_fsal_methods.h
M src/FSAL/FSAL_PSEUDO/handle.c
M src/FSAL/FSAL_PSEUDO/main.c
M src/FSAL/FSAL_PSEUDO/pseudofs_methods.h
M src/FSAL/FSAL_RGW/handle.c
M src/FSAL/FSAL_RGW/internal.c
M src/FSAL/FSAL_RGW/internal.h
M src/FSAL/FSAL_RGW/main.c
M src/FSAL/FSAL_VFS/file.c
M src/FSAL/FSAL_VFS/handle.c
M src/FSAL/FSAL_VFS/state.c
M src/FSAL/FSAL_VFS/vfs/attrs.c
M src/FSAL/FSAL_VFS/vfs/main-c.in.cmake
M src/FSAL/FSAL_VFS/vfs_methods.h
M src/FSAL/FSAL_VFS/xfs/main.c
M src/FSAL/Stackable_FSALs/FSAL_MDCACHE/mdcache_avl.h
M src/FSAL/Stackable_FSALs/FSAL_MDCACHE/mdcache_file.c
M src/FSAL/Stackable_FSALs/FSAL_MDCACHE/mdcache_handle.c
M src/FSAL/Stackable_FSALs/FSAL_MDCACHE/mdcache_helpers.c
M src/FSAL/Stackable_FSALs/FSAL_MDCACHE/mdcache_int.h
M src/FSAL/Stackable_FSALs/FSAL_MDCACHE/mdcache_lru.c
M src/FSAL/Stackable_FSALs/FSAL_MDCACHE/mdcache_main.c
M src/FSAL/Stackable_FSALs/FSAL_MDCACHE/mdcache_xattrs.c
M src/FSAL/Stackable_FSALs/FSAL_NULL/file.c
M src/FSAL/Stackable_FSALs/FSAL_NULL/handle.c
M src/FSAL/Stackable_FSALs/FSAL_NULL/main.c
M src/FSAL/Stackable_FSALs/FSAL_NULL/nullfs_methods.h
M src/FSAL/Stackable_FSALs/FSAL_NULL/xattrs.c
M src/FSAL/access_check.c
M src/FSAL/commonlib.c
M src/FSAL/default_methods.c
M src/FSAL/fsal_destroyer.c
M src/FSAL/fsal_helper.c
M src/FSAL_UP/fsal_up_top.c
M src/Protocols/9P/9p_attach.c
M src/Protocols/9P/9p_getattr.c
M src/Protocols/9P/9p_lcreate.c
M src/Protocols/9P/9p_mkdir.c
M src/Protocols/9P/9p_mknod.c
M src/Protocols/9P/9p_proto_tools.c
M src/Protocols/9P/9p_read.c
M src/Protocols/9P/9p_readdir.c
M src/Protocols/9P/9p_remove.c
M src/Protocols/9P/9p_statfs.c
M src/Protocols/9P/9p_symlink.c
M src/Protocols/9P/9p_walk.c
M src/Protocols/9P/9p_write.c
M src/Protocols/9P/9p_xattrcreate.c
M src/Protocols/9P/9p_xattrwalk.c
M src/Protocols/NFS/mnt_Mnt.c
M src/Protocols/NFS/nfs3_access.c
M src/Protocols/NFS/nfs3_commit.c
M src/Protocols/NFS/nfs3_create.c
M src/Protocols/NFS/nfs3_fsinfo.c
M src/Protocols/NFS/nfs3_fsstat.c
M src/Protocols/NFS/nfs3_getattr.c
M src/Protocols/NFS/nfs3_link.c
M src/Protocols/NFS/nfs3_lookup.c
M src/Protocols/NFS/nfs3_mkdir.c
M src/Protocols/NFS/nfs3_mknod.c
M src/Protocols/NFS/nfs3_pathconf.c
M src/Protocols/NFS/nfs3_read.c
M src/Protocols/NFS/nfs3_readdir.c
M src/Protocols/NFS/nfs3_readdirplus.c
M src/Protocols/NFS/nfs3_readlink.c
M src/Protocols/NFS/nfs3_remove.c
M src/Protocols/NFS/nfs3_rename.c
M src/Protocols/NFS/nfs3_rmdir.c
M src/Protocols/NFS/nfs3_setattr.c
M src/Protocols/NFS/nfs3_symlink.c
M src/Protocols/NFS/nfs3_write.c
M src/Protocols/NFS/nfs4_op_create.c
M src/Protocols/NFS/nfs4_op_free_stateid.c
M src/Protocols/NFS/nfs4_op_getattr.c
M src/Protocols/NFS/nfs4_op_getfh.c
M src/Protocols/NFS/nfs4_op_layoutcommit.c
M src/Protocols/NFS/nfs4_op_layoutget.c
M src/Protocols/NFS/nfs4_op_layoutreturn.c
M src/Protocols/NFS/nfs4_op_lookup.c
M src/Protocols/NFS/nfs4_op_lookupp.c
M src/Protocols/NFS/nfs4_op_open.c
M src/Protocols/NFS/nfs4_op_putfh.c
M src/Protocols/NFS/nfs4_op_putrootfh.c
M src/Protocols/NFS/nfs4_op_read.c
M src/Protocols/NFS/nfs4_op_readdir.c
M src/Protocols/NFS/nfs4_op_secinfo.c
M src/Protocols/NFS/nfs4_op_write.c
M src/Protocols/NFS/nfs4_op_xattr.c
M src/Protocols/NFS/nfs4_pseudo.c
M src/Protocols/NFS/nfs_proto_tools.c
M src/Protocols/NLM/nlm_Cancel.c
M src/Protocols/NLM/nlm_Lock.c
M src/Protocols/NLM/nlm_Share.c
M src/Protocols/NLM/nlm_Test.c
M src/Protocols/NLM/nlm_Unlock.c
M src/Protocols/NLM/nlm_Unshare.c
M src/Protocols/NLM/nlm_util.c
M src/SAL/nfs4_state.c
M src/SAL/nfs4_state_id.c
M src/SAL/nlm_state.c
M src/SAL/state_deleg.c
M src/SAL/state_layout.c
M src/SAL/state_lock.c
M src/SAL/state_misc.c
M src/SAL/state_share.c
M src/gtest/fsal_api/test_close2_latency.cc
M src/gtest/fsal_api/test_close_latency.cc
M src/gtest/fsal_api/test_commit2_latency.cc
M src/gtest/fsal_api/test_getattrs_latency.cc
M src/gtest/fsal_api/test_handle_to_key_latency.cc
M src/gtest/fsal_api/test_handle_to_wire_latency.cc
M src/gtest/fsal_api/test_link_latency.cc
M src/gtest/fsal_api/test_lock_op2_latency.cc
M src/gtest/fsal_api/test_lookup_latency.cc
M src/gtest/fsal_api/test_mkdir_latency.cc
M src/gtest/fsal_api/test_mknode_latency.cc
M src/gtest/fsal_api/test_open2_latency.cc
M src/gtest/fsal_api/test_read2_latency.cc
M src/gtest/fsal_api/test_readdir_latency.cc
M src/gtest/fsal_api/test_readlink_latency.cc
M src/gtest/fsal_api/test_release_latency.cc
M src/gtest/fsal_api/test_rename_latency.cc
M src/gtest/fsal_api/test_reopen2_latency.cc
M src/gtest/fsal_api/test_setattr2_latency.cc
M src/gtest/fsal_api/test_symlink_latency.cc
M src/gtest/fsal_api/test_unlink_latency.cc
M src/gtest/fsal_api/test_write2_latency.cc
M src/gtest/gtest.hh
M src/gtest/test_ci_hash_dist1.cc
M src/include/FSAL/fsal_commonlib.h
M src/include/fsal.h
M src/include/fsal_api.h
M src/include/nfs_proto_data.h
M src/include/sal_functions.h
M src/support/exports.c
M src/support/nfs_creds.c
M src/support/nfs_filehandle_mgmt.c
155 files changed, 812 insertions(+), 710 deletions(-)

git pull ssh://review.gerrithub.io:29418/ffilz/nfs-ganesha refs/changes/88/419288/1

To view, visit change 419288. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: ffilz/nfs-ganesha
Gerrit-Branch: next
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie20e50900488d72e7871f2be295cb8241fbc0f3f
Gerrit-Change-Number: 419288
Gerrit-PatchSet: 1
Gerrit-Owner: Frank Filz <ffilzlnx@mindspring.com>