-
Notifications
You must be signed in to change notification settings - Fork 42
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
Add back preadv2
optimization for try_acquire
on Linux
#90
base: main
Are you sure you want to change the base?
Add back preadv2
optimization for try_acquire
on Linux
#90
Conversation
cc @the8472 can you check the syscall I added please? I'm not sure if it is correct, thank you! |
Signed-off-by: Jiahao XU <[email protected]>
5a43208
to
c65cd8e
Compare
Signed-off-by: Jiahao XU <[email protected]>
Signed-off-by: Jiahao XU <[email protected]>
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.
Maybe we can simplify things by limiting to aarch64, x86_64 linux gnu? Those are probably the most common environments where stuff is built. And it's mostly a perf optimization, so we can be conservative in which platforms get it.
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.
what are the numbers on this optimization like?
It would enable
On performance, it's mostly for avoiding performance loss with Without |
Well, from the glibc implementation, it looks like there're only 3 versions for it, so maybe we can still bare with the cost?
While it's mostly a perf optimization, there is situation where
|
Signed-off-by: Jiahao XU <[email protected]>
Signed-off-by: Jiahao XU <[email protected]>
Signed-off-by: Jiahao XU <[email protected]>
Thanks @NobodyXu for the work. Believing that people already know the benefit of this for fixing unsupported situations. What Jubilee asked for are numbers. I think that's a reasonable request for a change aiming at optimization. Could you do some benchmark and show the number, so we can have a baseline in mind? It is also beneficial to prevent from future performance regression if we have the reproducible benchmark steps (if you don't mind sharing). |
Signed-off-by: Jiahao XU <[email protected]>
ab7b8db
to
5cf22b5
Compare
Co-authored-by: Jubilee Signed-off-by: Jiahao XU <[email protected]>
Signed-off-by: Jiahao XU <[email protected]>
Signed-off-by: Jiahao XU <[email protected]>
I could add one in Edit: Would do that tomorrow. |
Note that using blocking reads in acquire is mostly beneficial when there are many concurrent waiters. A single waiter won't see much of a speedup (perhaps a little from the avoided syscalls). See #30 and torvalds/linux@0ddad21, the latter one has numbers. |
Oh, cute, so it is in fact a kernel optimization specifically for this protocol! |
Can the code generally minimize amount of |
Signed-off-by: Jiahao XU <[email protected]>
Signed-off-by: Jiahao XU <[email protected]>
Thanks, I've added the code in |
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.
Since this code path is trying to achieve something very specific - doing a non-blocking read without setting a pipe fd to O_NONBLOCK - there should be a platform-specific test that checks that this indeed does happen.
But even if we have tests CI only exercises x86-64. If we had targeted tests we could manually run it on the arm cloud machines at least.
My other concern is that the syscall code looks correct but usually the devil is in the details. Having a targeted test would help with that too.
let iovcnt: c_int = 1; | ||
let offset: off_t = -1; | ||
|
||
if cfg!(all(target_arch = "x86_64", target_pointer_width = "64")) { |
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.
The branches here could use some comment. It's a bit surprising that 86-64 needs two special-cases but all other platforms (including powerpc, aarch64 and even i686) all go in the same bucket.
Yeah I would add one, I wish libc would support it for musl libc Or perhaps we could wait till libc support it on musl @the8472 ? |
Yeah it's not urgent. try_acquire is new and I assume not many things are using it yet so the negative performance impact of making the pipe non-blocking isn't important yet. |
Well cc is using it so it does have some effect to the ecosystem as a whole, though depending on the project, it might not be that large as compiling is much more expensive. |
Opened rust-lang/libc#3760 |
Fixed #87