Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

os/bluestore: drop unreferenced spanning blobs #11212

Merged
merged 1 commit into from Sep 26, 2016

Conversation

liewegas
Copy link
Member

Otherwise we can "leak" these and keep them around indefinitely.

Signed-off-by: Sage Weil sage@redhat.com

@liewegas
Copy link
Member Author

@somnathr

Otherwise we can "leak" these and keep them around indefinitely.

Signed-off-by: Sage Weil <sage@redhat.com>
@somnathr
Copy link

Thanks will try...

@somnathr
Copy link

@liewegas it is not fixed. I did some digging and found it is never satisfying the if condition above.
The reason is blob->id is always -1 in this part. So, the extents we are deleting is not holding spanning blobs ever (?)
I saw spanning blob destructors are only called from get_spanning_blob() while destructing dummy blob.
Another point, I am seeing even for the blob->id = -1 , the ref count for the blob is not getting to 0 from _wctx_finish() after deletion of extent, is this expected ?

@liewegas
Copy link
Member Author

liewegas commented Sep 23, 2016 via email

@somnathr
Copy link

Hmm..I can collect logs but before that let me move to latest master to be in sync with you.
Yes, if b->id = -1 is not a spanning blob case, but, I was talking about non-spanning blob case as well.
Isn't the expectation of non-spanning blob case that ref count will be 0 from here ?

@liewegas
Copy link
Member Author

liewegas commented Sep 23, 2016 via email

@somnathr
Copy link

Yeah, that's what I thought too , but, I added some log to print b->nref after extent delete in the _wctx_finish loop , it was printing non zero ref.
For spanning blob case, I synced to latest master and cherry-picked your commit again , it's the same..
it is not entering in the if block because b->id is always -1 , I am not seeing any blob of id >=0

@liewegas
Copy link
Member Author

liewegas commented Sep 23, 2016 via email

@liewegas
Copy link
Member Author

liewegas commented Sep 23, 2016 via email

@somnathr
Copy link

I created 400G image (without exclusive lock etc.) , preconditioned with 1M SW.
After that, from a single client I am running 4K RW (16 QD, 10 jobs).
Once it is going beyonf inline_bl (1200 bytes) and having spanning blobs , I am seeing memory started growing.
I can generate logs as well , debug_bluestore = 20/20 ?

@liewegas
Copy link
Member Author

liewegas commented Sep 23, 2016 via email

@somnathr
Copy link

@liewegas debug_bluestore = 20/20 log is in the below location. Log I started capturing only when I started 4K RW IO after preconditioning. Let me know if you are having difficulties on accessing it.

https://drive.google.com/file/d/0B7W-S0z_ymMJR08yOUxiNkh5LW8/view?usp=sharing

@somnathr
Copy link

@liewegas Please look at #11223 , it seems to fix the issue for me.

@liewegas liewegas merged commit fc8e7f3 into ceph:master Sep 26, 2016
@liewegas liewegas deleted the wip-bluestore-spanning-leak branch September 26, 2016 13:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
2 participants