Re: [PATCH] ceph: optimizing cap allocation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> On 24 Feb 2018, at 18:35, Chengguang Xu <cgxu519@xxxxxxxxxx> wrote:
> 
> When setting high volume of caps_min_count or having many
> unreserved caps, unused caps may always keep in the ->caps_list
> even can't get new cap from kmem_cache_alloc because lack of
> maximum limitation of caps_avail_count. Hence reuse caps in
> ->caps_list if available, it's maybe better than setting max
> limitation of caps_avail_count and releasing unused caps when
> reaching the limit.
> 
> Signed-off-by: Chengguang Xu <cgxu519@xxxxxxxxxx>
> ---
> Only compile tested.
> 
> fs/ceph/caps.c | 17 +++++++++++++++++
> 1 file changed, 17 insertions(+)
> 
> diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c
> index 6582c45..b598a24 100644
> --- a/fs/ceph/caps.c
> +++ b/fs/ceph/caps.c
> @@ -280,6 +280,23 @@ struct ceph_cap *ceph_get_cap(struct ceph_mds_client *mdsc,
> 	/* temporary, until we do something about cap import/export */
> 	if (!ctx) {
> 		cap = kmem_cache_alloc(ceph_cap_cachep, GFP_NOFS);
> +		if (!cap) {
> +			spin_lock(&mdsc->caps_list_lock);
> +			if (mdsc->caps_avail_count) {
> +				BUG_ON(list_empty(&mdsc->caps_list));
> +
> +				mdsc->caps_avail_count--;
> +				mdsc->caps_use_count++;
> +				cap = list_first_entry(&mdsc->caps_list,
> +						struct ceph_cap, caps_item);
> +				list_del(&cap->caps_item);
> +
> +				BUG_ON(mdsc->caps_total_count != mdsc->caps_use_count +
> +				       mdsc->caps_reserve_count + mdsc->caps_avail_count);
> +			}
> +			spin_unlock(&mdsc->caps_list_lock);
> +		}
> +

should skip executing following code. I fixed it locally

> 		if (cap) {
> 			spin_lock(&mdsc->caps_list_lock);
> 			mdsc->caps_use_count++;
> -- 
> 1.8.3.1
> 

--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [CEPH Users]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux