summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2016-03-05 21:03:31 +0000
committerCarl Hetherington <cth@carlh.net>2016-03-05 22:20:37 +0000
commit78c9e9838a205bbd66e0a5456514a0818e024b66 (patch)
treef64c984b703a15fe7d63851610b7eacc6deacd35
parentdae7fea98a5ca43d7e278b6381afcb5ccd1a310b (diff)
Set thread affinity on Windows XP so that each encoder thread
is tied to a single CPU. There is some suggestion on the web that Windows 7 does this better, which may explain the slowdowns and erratic timings that we see post-2.6.3 on Windows XP (see #771).
-rw-r--r--ChangeLog4
-rw-r--r--src/lib/encoder.cc16
2 files changed, 19 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 3bb168cfa..2f3ab4c25 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2016-03-05 Carl Hetherington <cth@carlh.net>
+
+ * Try to fix slowdowns on Windows XP (#771).
+
2016-03-02 Carl Hetherington <cth@carlh.net>
* Version 2.6.31 released.
diff --git a/src/lib/encoder.cc b/src/lib/encoder.cc
index 8ba794a8e..34cae7d76 100644
--- a/src/lib/encoder.cc
+++ b/src/lib/encoder.cc
@@ -381,9 +381,23 @@ Encoder::servers_list_changed ()
boost::mutex::scoped_lock lm (_threads_mutex);
+#ifdef BOOST_THREAD_PLATFORM_WIN32
+ OSVERSIONINFO info;
+ info.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
+ GetVersionEx (&info);
+ bool const windows_xp = (info.dwMajorVersion == 5 && info.dwMinorVersion == 1);
+ LOG_GENERAL_NC (N_("Setting thread affinity for Windows XP"));
+#endif
+
if (!Config::instance()->only_servers_encode ()) {
for (int i = 0; i < Config::instance()->num_local_encoding_threads (); ++i) {
- _threads.push_back (new boost::thread (boost::bind (&Encoder::encoder_thread, this, optional<EncodeServerDescription> ())));
+ boost::thread* t = new boost::thread (boost::bind (&Encoder::encoder_thread, this, optional<EncodeServerDescription> ()));
+ _threads.push_back (t);
+#ifdef BOOST_THREAD_PLATFORM_WIN32
+ if (windows_xp) {
+ SetThreadAffinityMask (t->native_handle(), 1 << i);
+ }
+#endif
}
}