Commit 55d8538498f62ec72b5ba67aa386c7726f630475
1 parent
481c5346d0
Exists in
master
and in
7 other branches
Fix performance regression on lmbench select benchmark
Christian Borntraeger reported that reinstating cond_resched() with CONFIG_PREEMPT caused a performance regression on lmbench: For example select file 500: 23 microseconds 32 microseconds and that's really because we totally unnecessarily do the cond_resched() in the innermost loop of select(), which is just silly. This moves it out from the innermost loop (which only ever loops ove the bits in a single "unsigned long" anyway), which makes the performance regression go away. Reported-and-tested-by: Christian Borntraeger <borntraeger@de.ibm.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Showing 1 changed file with 1 additions and 1 deletions Side-by-side Diff
fs/select.c
... | ... | @@ -249,7 +249,6 @@ |
249 | 249 | retval++; |
250 | 250 | } |
251 | 251 | } |
252 | - cond_resched(); | |
253 | 252 | } |
254 | 253 | if (res_in) |
255 | 254 | *rinp = res_in; |
... | ... | @@ -257,6 +256,7 @@ |
257 | 256 | *routp = res_out; |
258 | 257 | if (res_ex) |
259 | 258 | *rexp = res_ex; |
259 | + cond_resched(); | |
260 | 260 | } |
261 | 261 | wait = NULL; |
262 | 262 | if (retval || !*timeout || signal_pending(current)) |