Re: [PATCH] bcache: insert bkeys without overlap when placeholder missed

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

 



On 2020/9/22 23:47, Liu Hua wrote:
> Btree spliting and garbage collection process will drop
> placeholders, which may cause cache miss collision. We can
> insert nonoverlapping bkeys with write lock. It is helpful
> for performance.
> 

Could you please to explain more detais about,
- How does "Btree spliting and garbage collection process will drop
placeholders" happen?
- And how does the consequence "cache miss collision" happen?
- Do you observe performance improvement? If yes, which part is improved
and what is the performance number?

Thanks in advance.

Coly Li

> Signed-off-by: Liu Hua <liusdu@xxxxxxx>
> ---
>  drivers/md/bcache/extents.c | 10 +++++++---
>  1 file changed, 7 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/md/bcache/extents.c b/drivers/md/bcache/extents.c
> index c809724e6571..acebe5bdb3f1 100644
> --- a/drivers/md/bcache/extents.c
> +++ b/drivers/md/bcache/extents.c
> @@ -329,6 +329,7 @@ static bool bch_extent_insert_fixup(struct btree_keys *b,
>  
>  	uint64_t old_offset;
>  	unsigned int old_size, sectors_found = 0;
> +	bool overlap = false;
>  
>  	BUG_ON(!KEY_OFFSET(insert));
>  	BUG_ON(!KEY_SIZE(insert));
> @@ -340,15 +341,18 @@ static bool bch_extent_insert_fixup(struct btree_keys *b,
>  			break;
>  
>  		if (bkey_cmp(&START_KEY(k), insert) >= 0) {
> -			if (KEY_SIZE(k))
> -				break;
> -			else
> +			if (!KEY_SIZE(k))
>  				continue;
> +			if (replace_key && overlap == false)
> +				goto out;
> +			break;
>  		}
>  
>  		if (bkey_cmp(k, &START_KEY(insert)) <= 0)
>  			continue;
>  
> +		overlap = true;
> +
>  		old_offset = KEY_START(k);
>  		old_size = KEY_SIZE(k);
>  
> 




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux ARM Kernel]     [Linux Filesystem Development]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux