-
Notifications
You must be signed in to change notification settings - Fork 8
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
Introduce new, better performing IoRingLogDevice2. #155
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
First couple of comments as I'm getting started on this review. I'll do this PR over the next several working days and submit feedback in chunks.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
More comments
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Review of log_device2.test.cpp
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Last part of my review! All done.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good to go! Merge away!
Instead of using a fixed-size set of flush ops, this impl just flushes the next chunk of data directly and overwrites a single control block on media.
In micro-benchmarks, it performs over 2x as well as the old IoRingLogDevice, while using less memory and being much simpler code-wise. Recovery is also simpler and faster since the control block holds a ring buffer of commit pos values (which are by definition aligned to slot record boundaries).