[LWN Logo]

Date:   Sat, 24 Jul 1999 00:27:51 +0200 (CEST)
From:   Ingo Molnar <mingo@chiara.csoma.elte.hu>
To:     est@hyperreal.org
Subject: [patch] lowlatency-2.3.12-A0, sound, multimedia performance, etc.

  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

---1247997369-171102536-932768745=:9901
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
Content-ID: <Pine.LNX.3.96.990724002620.9901D@chiara.csoma.elte.hu>


On Fri, 23 Jul 1999 est@hyperreal.org wrote:

> Benno's latencytest is great: www.gardena.net/benno/linux/audio/
> 
> I'd come to about the same conclusions he does just watching /dev/rtc
> skips at 1khz.

now i can reproduce it as well - thanks to Benno's cool utility. Could you
(and everybody else having sound problems under high load) try the
attached patch?

It dramatically reduces sound skipping here: 

 [root@hell latencytest0.41]# ./latencytest none 3 256 0 350000000
 fragment latency = 1.451247 ms
 cpu latency = 1.160998 ms
   2.4ms (  0)|
 1MS num_time_samples=21856 num_times_within_1ms=21856 factor=100.000000
 2MS num_time_samples=21856 num_times_within_2ms=21856 factor=100.000000

[...]
  314 root      18   0   740  740   576 R       0 97.3  0.5   0:02 top
  300 root      16   0   672  672   356 R       0 81.6  0.5   0:24 latencytest

top -d 0.01 was running during the above test - it caused lots of skipping
before. Generating heavy disk IO on the patched kernel does not cause a
single missed fragment either. 

the patch reduces the size of some critical 'scheduling atoms', ie. the
size of code paths within the kernel that execute code without ever
checking for ->need_resched. The solution in the patch is not final, but
i'd first like to identify all remaining problems that affect scheduling
latencies.

The patch is for 2.3.12, but should apply to 2.2.10 as well. 

-- mingo

--- linux/include/asm-i386/uaccess.h.orig2	Sat Jul 24 00:54:18 1999
+++ linux/include/asm-i386/uaccess.h	Sat Jul 24 00:55:48 1999
@@ -270,6 +270,7 @@
 		: "=&c"(size), "=&D" (__d0), "=&S" (__d1)		\
 		: "r"(size & 3), "0"(size / 4), "1"(to), "2"(from)	\
 		: "memory");						\
+	if (current->need_resched) schedule();				\
 } while (0)
 
 #define __copy_user_zeroing(to,from,size)				\
@@ -298,6 +299,7 @@
 		: "=&c"(size), "=&D" (__d0), "=&S" (__d1)		\
 		: "r"(size & 3), "0"(size / 4), "1"(to), "2"(from)	\
 		: "memory");						\
+	if (current->need_resched) schedule();				\
 } while (0)
 
 /* We let the __ versions of copy_from/to_user inline, because they're often
@@ -338,6 +340,7 @@
 			: "=c"(size), "=&S" (__d0), "=&D" (__d1)\
 			: "1"(from), "2"(to), "0"(size/4)	\
 			: "memory");				\
+		if (current->need_resched) schedule();		\
 		break;						\
 	case 1:							\
 		__asm__ __volatile__(				\
@@ -428,6 +431,7 @@
 			: "=c"(size), "=&S" (__d0), "=&D" (__d1)\
 			: "1"(from), "2"(to), "0"(size/4)	\
 			: "memory");				\
+		if (current->need_resched) schedule();		\
 		break;						\
 	case 1:							\
 		__asm__ __volatile__(				\

---1247997369-171102536-932768745=:9901
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME="lowlatency-2.3.12-A0"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.3.96.990724002545.9901B@chiara.csoma.elte.hu>
Content-Description: 

LS0tIGxpbnV4L2luY2x1ZGUvYXNtLWkzODYvdWFjY2Vzcy5oLm9yaWcyCVNh
dCBKdWwgMjQgMDA6NTQ6MTggMTk5OQ0KKysrIGxpbnV4L2luY2x1ZGUvYXNt
LWkzODYvdWFjY2Vzcy5oCVNhdCBKdWwgMjQgMDA6NTU6NDggMTk5OQ0KQEAg
LTI3MCw2ICsyNzAsNyBAQA0KIAkJOiAiPSZjIihzaXplKSwgIj0mRCIgKF9f
ZDApLCAiPSZTIiAoX19kMSkJCVwNCiAJCTogInIiKHNpemUgJiAzKSwgIjAi
KHNpemUgLyA0KSwgIjEiKHRvKSwgIjIiKGZyb20pCVwNCiAJCTogIm1lbW9y
eSIpOwkJCQkJCVwNCisJaWYgKGN1cnJlbnQtPm5lZWRfcmVzY2hlZCkgc2No
ZWR1bGUoKTsJCQkJXA0KIH0gd2hpbGUgKDApDQogDQogI2RlZmluZSBfX2Nv
cHlfdXNlcl96ZXJvaW5nKHRvLGZyb20sc2l6ZSkJCQkJXA0KQEAgLTI5OCw2
ICsyOTksNyBAQA0KIAkJOiAiPSZjIihzaXplKSwgIj0mRCIgKF9fZDApLCAi
PSZTIiAoX19kMSkJCVwNCiAJCTogInIiKHNpemUgJiAzKSwgIjAiKHNpemUg
LyA0KSwgIjEiKHRvKSwgIjIiKGZyb20pCVwNCiAJCTogIm1lbW9yeSIpOwkJ
CQkJCVwNCisJaWYgKGN1cnJlbnQtPm5lZWRfcmVzY2hlZCkgc2NoZWR1bGUo
KTsJCQkJXA0KIH0gd2hpbGUgKDApDQogDQogLyogV2UgbGV0IHRoZSBfXyB2
ZXJzaW9ucyBvZiBjb3B5X2Zyb20vdG9fdXNlciBpbmxpbmUsIGJlY2F1c2Ug
dGhleSdyZSBvZnRlbg0KQEAgLTMzOCw2ICszNDAsNyBAQA0KIAkJCTogIj1j
IihzaXplKSwgIj0mUyIgKF9fZDApLCAiPSZEIiAoX19kMSlcDQogCQkJOiAi
MSIoZnJvbSksICIyIih0byksICIwIihzaXplLzQpCVwNCiAJCQk6ICJtZW1v
cnkiKTsJCQkJXA0KKwkJaWYgKGN1cnJlbnQtPm5lZWRfcmVzY2hlZCkgc2No
ZWR1bGUoKTsJCVwNCiAJCWJyZWFrOwkJCQkJCVwNCiAJY2FzZSAxOgkJCQkJ
CQlcDQogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJXA0KQEAgLTQyOCw2
ICs0MzEsNyBAQA0KIAkJCTogIj1jIihzaXplKSwgIj0mUyIgKF9fZDApLCAi
PSZEIiAoX19kMSlcDQogCQkJOiAiMSIoZnJvbSksICIyIih0byksICIwIihz
aXplLzQpCVwNCiAJCQk6ICJtZW1vcnkiKTsJCQkJXA0KKwkJaWYgKGN1cnJl
bnQtPm5lZWRfcmVzY2hlZCkgc2NoZWR1bGUoKTsJCVwNCiAJCWJyZWFrOwkJ
CQkJCVwNCiAJY2FzZSAxOgkJCQkJCQlcDQogCQlfX2FzbV9fIF9fdm9sYXRp
bGVfXygJCQkJXA0K
---1247997369-171102536-932768745=:9901--

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/