From 8103a9a0e92d937c187515db5a0d57fff5a50df0 Mon Sep 17 00:00:00 2001 From: Simon Wilkinson Date: Sat, 14 May 2011 08:55:50 +0100 Subject: [PATCH] rx: Reverse the consumption order of idle queue Currently, the rx server thread idle queue is used in an LRU manner. This means that we round robin requests between all of the threads configured on a given system, which means that we end up thrashing CPU caches on machines whose workload doesn't require that all of the configured threads be used. Change this so that we always use the most recently idle thread. This isn't as "fair" to all of our waiting threads, but should mean that we scale better on SMP machines, as a thread that is recently idle is likely to have been recently scheduled. Performance numbers to follow ... Reviewed-on: http://gerrit.openafs.org/4871 Reviewed-by: Derrick Brashear Tested-by: BuildBot Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman (cherry picked from commit 5614305853f0f87a2418a6fb7ca472a8ef966084) Change-Id: I6b961a470adfe053ecd85af05821e42898fd7847 Reviewed-on: http://gerrit.openafs.org/4912 Tested-by: BuildBot Reviewed-by: Derrick Brashear --- src/rx/rx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rx/rx.c b/src/rx/rx.c index 9b5266a00..3b62030c8 100644 --- a/src/rx/rx.c +++ b/src/rx/rx.c @@ -4741,7 +4741,7 @@ rxi_AttachServerProc(struct rx_call *call, queue_Append(&rx_incomingCallQueue, call); } } else { - sq = queue_First(&rx_idleServerQueue, rx_serverQueueEntry); + sq = queue_Last(&rx_idleServerQueue, rx_serverQueueEntry); /* If hot threads are enabled, and both newcallp and sq->socketp * are non-null, then this thread will process the call, and the -- 2.39.5