On 7/26/17 3:00 AM, Nikolay Borisov wrote:
>
>
> On 25.07.2017 23:51, jeffm@xxxxxxxx wrote:
>> From: Jeff Mahoney <jeffm@xxxxxxxx>
>>
>> We have the infrastructure to cache extent buffers but we don't actually
>> do the caching. As soon as the last reference is dropped, the buffer
>> is dropped. This patch keeps the extent buffers around until the max
>> cache size is reached (defaults to 25% of memory) and then it drops
>> the last 10% of the LRU to free up cache space for reallocation. The
>> cache size is configurable (for use by e.g. lowmem) when the cache is
>> initialized.
>>
>> Signed-off-by: Jeff Mahoney <jeffm@xxxxxxxx>
>> @@ -567,7 +580,21 @@ struct extent_buffer *btrfs_clone_extent_buffer(struct extent_buffer *src)
>> return new;
>> }
>>
>> -void free_extent_buffer(struct extent_buffer *eb)
>> +static void free_extent_buffer_final(struct extent_buffer *eb)
>> +{
>> + struct extent_io_tree *tree = eb->tree;
>> +
>> + BUG_ON(eb->refs);
>> + BUG_ON(tree->cache_size < eb->len);
>> + list_del_init(&eb->lru);
>> + if (!(eb->flags & EXTENT_BUFFER_DUMMY)) {
>> + remove_cache_extent(&tree->cache, &eb->cache_node);
>> + tree->cache_size -= eb->len;
>> + }
>> + free(eb);
>> +}
>> +
>> +static void free_extent_buffer_internal(struct extent_buffer *eb, int free_now)
>
> nit: free_ow -> boolean
Ack. There should be a bunch of int -> bool conversions elsewhere too.
>> @@ -619,6 +650,21 @@ struct extent_buffer *find_first_extent_buffer(struct extent_io_tree *tree,
>> return eb;
>> }
>>
>> +static void
>> +trim_extent_buffer_cache(struct extent_io_tree *tree)
>> +{
>> + struct extent_buffer *eb, *tmp;
>> + u64 count = 0;
>
> count seems to be a leftover from something, so you could remove it
Yep, that was during debugging. Removed.
>> @@ -2521,3 +2522,14 @@ u8 rand_u8(void)
>> void btrfs_config_init(void)
>> {
>> }
>> +
>> +unsigned long total_memory(void)
>
> perhaps rename to total_memory_bytes and return the memory size in
> bytes. Returning them in kilobytes seems rather arbitrary. That way
> you'd save the constant *1024 to turn the kbs in bytes in the callers
> (currently only in extent_io_tree_init())
>
Ack.
Thanks,
-Jeff
--
Jeff Mahoney
SUSE Labs
Attachment:
signature.asc
Description: OpenPGP digital signature
