From: Shane K. <sh...@ti...> - 2002-01-28 13:19:23
|
Jeff & Co., I saw a report of threading problems on the user list, but I'm not currently on that list. And this doesn't seem too related. Anyway... I just downloaded and compiled a kernel with uml-patch-2.4.17-9.bz2, and booted up the Red Hat 7.2 image. It consumed 100% of the CPU all of the time. I shut down various services, and eventually got it to run idle. The problem turned out to be that any program running pthreads spins. Here's a short sample: *** begin foo.c *** #include <pthread.h> #include <stdio.h> void * thread (void *dummy) { for (;;) { sleep(60); } } int main () { pthread_t tid; if (pthread_create(&tid, NULL, thread, NULL) != 0) { fprintf(stderr, "Error %d creating thread\n"); return 1; } pthread_join(tid, NULL); return 0; } *** end foo.c ** Run with: $ gcc -o foo foo.c -lpthread $ ./foo UML has two threads, one using 2/3 of the CPU, the other the remaining 1/3. Additionally, the threads appear to ignore any signal but SIGKILL, although the parent process gets a return from wait(). Needless to say, this program consumes no CPU when run under the host kernel. ;) -- Shane Carpe Diem |
From: Jeff D. <jd...@ka...> - 2002-01-28 18:09:34
|
sh...@ti... said: > I just downloaded and compiled a kernel with uml-patch-2.4.17-9.bz2, > and booted up the Red Hat 7.2 image. It consumed 100% of the CPU all > of the time. I shut down various services, and eventually got it to > run idle. > The problem turned out to be that any program running pthreads spins. > Here's a short sample: People keep showing me variations of this program and it always runs fine for me. This particular one just goes to sleep like it seems it's supposed to. This happens with my current pool (the soon to be -10), with the 2.4.17 UML binary from the RPM, and also with the 2.4.17-9 patch. So, can you be more explicit about your environment? For starters, here are the libraries I have linked into foo: usermode:~# ldd foo libpthread.so.0 => /lib/libpthread.so.0 (0x40017000) libc.so.6 => /lib/libc.so.6 (0x4002b000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) Jeff |
From: Shane K. <sh...@ti...> - 2002-01-28 18:44:08
|
On 2002-01-28 13:11:38 -0500, Jeff Dike wrote: > sh...@ti... said: > > I just downloaded and compiled a kernel with uml-patch-2.4.17-9.bz2, > > and booted up the Red Hat 7.2 image. It consumed 100% of the CPU > > all of the time. I shut down various services, and eventually got > > it to run idle. > > The problem turned out to be that any program running pthreads > > spins. Here's a short sample: > > People keep showing me variations of this program and it always runs > fine for me. This particular one just goes to sleep like it seems > it's supposed to. This happens with my current pool (the soon to be > -10), with the 2.4.17 UML binary from the RPM, and also with the > 2.4.17-9 patch. > > So, can you be more explicit about your environment? For starters, here > are the libraries I have linked into foo: > > usermode:~# ldd foo > libpthread.so.0 => /lib/libpthread.so.0 (0x40017000) > libc.so.6 => /lib/libc.so.6 (0x4002b000) > /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) bash-2.05# ldd foo libpthread.so.0 => /lib/i686/libpthread.so.0 (0x4001d000) libc.so.6 => /lib/i686/libc.so.6 (0x40032000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) New libc causing problems? The environment is: 2.4.17 kernel from www.kernel.nl.org. 2.4.17-9 UM patch. $ make xconfig ARCH=um $ make dep ARCH=um $ make linux ARCH=um The only option I changed in "xconfig" is setting "hostfs" from a module to being included in the kernel proper. The behavior was the same before I did that, IIRC. I am using the Red Hat 7.2 "pristine" image from here: http://user-mode-linux.sourceforge.net/dl-nl-linux.html I boot with the following (note the COW): $ nice ./linux ubd0=root_fs.rh72.pristine.cow,root_fs.rh72.pristine -- Shane Carpe Diem |
From: Matt Z. <md...@de...> - 2002-01-28 20:24:33
|
On Mon, Jan 28, 2002 at 07:44:01PM +0100, Shane Kerr wrote: > On 2002-01-28 13:11:38 -0500, Jeff Dike wrote: > > So, can you be more explicit about your environment? For starters, here > > are the libraries I have linked into foo: > > > > usermode:~# ldd foo > > libpthread.so.0 => /lib/libpthread.so.0 (0x40017000) > > libc.so.6 => /lib/libc.so.6 (0x4002b000) > > /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) > > bash-2.05# ldd foo > libpthread.so.0 => /lib/i686/libpthread.so.0 (0x4001d000) > libc.so.6 => /lib/i686/libc.so.6 (0x40032000) > /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) > > New libc causing problems? Maybe not new, but "optimized". FWIW, for me, it just sleeps like it's supposed to. libpthread.so.0 => /lib/libpthread.so.0 (0x40018000) libc.so.6 => /lib/libc.so.6 (0x4002e000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) ii libc6 2.2.4-7 GNU C Library: Shared libraries and Timezone (from a Debian woody root fs) You might try mv /lib/i686 /lib/i686.temp and running it again. -- - mdz |
From: Shane K. <sh...@ti...> - 2002-01-29 11:09:44
|
On 2002-01-28 15:23:00 -0500, Matt Zimmerman wrote: > On Mon, Jan 28, 2002 at 07:44:01PM +0100, Shane Kerr wrote: > > > On 2002-01-28 13:11:38 -0500, Jeff Dike wrote: > > > So, can you be more explicit about your environment? For > > > starters, here are the libraries I have linked into foo: > > > > > > usermode:~# ldd foo > > > libpthread.so.0 => /lib/libpthread.so.0 (0x40017000) > > > libc.so.6 => /lib/libc.so.6 (0x4002b000) > > > /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) > > > > bash-2.05# ldd foo > > libpthread.so.0 => /lib/i686/libpthread.so.0 (0x4001d000) > > libc.so.6 => /lib/i686/libc.so.6 (0x40032000) > > /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) > > > > New libc causing problems? > > Maybe not new, but "optimized". FWIW, for me, it just sleeps like it's > supposed to. > > libpthread.so.0 => /lib/libpthread.so.0 (0x40018000) > libc.so.6 => /lib/libc.so.6 (0x4002e000) > /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) FWIW, I tried the same operation with the Debian small image from the SourceForge site, and it sleeps properly. Versions are: shane@usermode:~$ ldd foo libpthread.so.0 => /lib/libpthread.so.0 (0x40015000) libc.so.6 => /lib/libc.so.6 (0x40029000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) I guess there's something about the latest pthread library that doesn't get along with UML.... -- Shane Carpe Diem |