summaryrefslogtreecommitdiffstats
path: root/usr
diff options
context:
space:
mode:
authorIlya Dryomov <idryomov@gmail.com>2019-09-04 15:40:03 +0200
committerIlya Dryomov <idryomov@gmail.com>2019-09-16 12:06:25 +0200
commitcf73d882cc51c1f245a890cccb79952a260302d3 (patch)
treeb6d86b83c52de7f8349a30a9a2074db755f4dc7d /usr
parent10c12851a022662bf6085bd4384b4ebed4c447ce (diff)
downloadlinux-cf73d882cc51c1f245a890cccb79952a260302d3.tar.bz2
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>
Diffstat (limited to 'usr')
0 files changed, 0 insertions, 0 deletions