[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] libports: reduce thread starvation on message floods
From: |
Richard Braun |
Subject: |
[PATCH] libports: reduce thread starvation on message floods |
Date: |
Mon, 20 Aug 2012 20:14:40 +0200 |
libports/manage-multithread.c: Add #include <mach/thread_switch.h>
(ports_manage_port_operations_multithread): Make threads depress
their priority on startup.
---
libports/manage-multithread.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/libports/manage-multithread.c b/libports/manage-multithread.c
index 82fa2ac..2c690d2 100644
--- a/libports/manage-multithread.c
+++ b/libports/manage-multithread.c
@@ -23,6 +23,7 @@
#include <assert.h>
#include <cthreads.h>
#include <mach/message.h>
+#include <mach/thread_switch.h>
void
ports_manage_port_operations_multithread (struct port_bucket *bucket,
@@ -123,6 +124,16 @@ ports_manage_port_operations_multithread (struct
port_bucket *bucket,
int timeout;
error_t err;
+ /* XXX To reduce starvation, the priority of new threads is initially
+ depressed. This helps already existing threads complete their job
+ and be recycled to handle new messages. The duration of this
+ depression is made a function of the total number of threads because
+ more threads implies more contention, and the priority of threads
+ blocking on a contented spin lock is also implicitely depressed.
+ The lock isn't needed, since an approximation is sufficient. */
+ timeout = (((totalthreads - 1) / 100) + 1) * 10;
+ thread_switch(MACH_PORT_NULL, SWITCH_OPTION_DEPRESS, timeout);
+
if (hook)
(*hook) ();
--
1.7.10.4
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] libports: reduce thread starvation on message floods,
Richard Braun <=