kernel_optimize_test/net/ceph
Ilya Dryomov cf73d882cc libceph: use ceph_kvmalloc() for osdmap arrays
osdmap has a bunch of arrays that grow linearly with the number of
OSDs.  osd_state, osd_weight and osd_primary_affinity take 4 bytes per
OSD.  osd_addr takes 136 bytes per OSD because of sockaddr_storage.
The CRUSH workspace area also grows linearly with the number of OSDs.

Normally these arrays are allocated at client startup.  The osdmap is
usually updated in small incrementals, but once in a while a full map
may need to be processed.  For a cluster with 10000 OSDs, this means
a bunch of 40K allocations followed by a 1.3M allocation, all of which
are currently required to be physically contiguous.  This results in
sporadic ENOMEM errors, hanging the client.

Go back to manually (re)allocating arrays and use ceph_kvmalloc() to
fall back to non-contiguous allocation when necessary.

Link: https://tracker.ceph.com/issues/40481
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
2019-09-16 12:06:25 +02:00
..
crush
armor.c
auth_none.c
auth_none.h
auth_x_protocol.h
auth_x.c
auth_x.h
auth.c
buffer.c
ceph_common.c libceph: avoid a __vmalloc() deadlock in ceph_kvmalloc() 2019-09-16 12:06:25 +02:00
ceph_fs.c
ceph_hash.c
ceph_strings.c
cls_lock_client.c
crypto.c libceph: don't call crypto_free_sync_skcipher() on a NULL tfm 2019-08-28 12:33:46 +02:00
crypto.h
debugfs.c
decode.c
Kconfig
Makefile
messenger.c libceph: add function that reset client's entity addr 2019-09-16 12:06:23 +02:00
mon_client.c libceph: add function that reset client's entity addr 2019-09-16 12:06:23 +02:00
msgpool.c
osd_client.c libceph: drop unused con parameter of calc_target() 2019-09-16 12:06:25 +02:00
osdmap.c libceph: use ceph_kvmalloc() for osdmap arrays 2019-09-16 12:06:25 +02:00
pagelist.c
pagevec.c
snapshot.c
string_table.c
striper.c