Skip to content

Conversation

jiayisuse
Copy link
Contributor

Summary: sched_yield looping results in much higher latency in highly concurrent pipe I/O. It's not strictly busy wait, but relinquish CPU and move to the end of priority task queue while no immediately available data. http://man7.org/linux/man-pages/man2/sched_yield.2.html. The overhead of re-scheduling and context switch could be high. Conversely, modern semaphore/mutex is kind hybrid locking of spinlock and sleep-lock - performs spinklock for the first part of remained scheduled CPU time and sleep after if lock is unavailable. It avoids both frequent re-scheduling and eating up CPU with spin. In practice it's always performs better than pure spinlock or re-schedule, even to protect lightweight operations like counter update.

Differential Revision: D21446104

Summary: sched_yield looping results in much higher latency in highly concurrent pipe I/O. It's not strictly busy wait, but relinquish CPU and move to the end of priority task queue while no immediately available data. http://man7.org/linux/man-pages/man2/sched_yield.2.html. The overhead of re-scheduling and context switch could be high. Conversely, modern semaphore/mutex is kind hybrid locking of spinlock and sleep-lock - performs spinklock for the first part of remained scheduled CPU time and sleep after if lock is unavailable. It avoids both frequent re-scheduling and eating up CPU with spin. In practice it's always performs better than pure spinlock or re-schedule, even to protect lightweight operations like counter update.

Differential Revision: D21446104

fbshipit-source-id: b49bb1bc6b5576142344ed83d964ff6df5b21477
@facebook-github-bot
Copy link

This pull request was exported from Phabricator. Differential Revision: D21446104

@jiayisuse jiayisuse requested review from osalpekar and lw May 7, 2020 17:14
@lw
Copy link
Contributor

lw commented May 7, 2020

I want to take a close look at this, as it goes against what I had observed, so it may take a bit to get back to you, sorry...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants