Commit 55d8538498f62ec72b5ba67aa386c7726f630475

Authored by Linus Torvalds
1 parent 481c5346d0

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

... ... @@ -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))