From Frank Filz <ffilzlnx@mindspring.com>: Frank Filz has uploaded this change for review. ( https://review.gerrithub.io/419288 Change subject: FSAL: Convert fsal_obj_ops in fsal_obj_handle to pointer ...................................................................... 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 https://review.gerrithub.io/419288 To unsubscribe, or for help writing mail filters, visit https://review.gerrithub.io/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>