lkml.org 
[lkml]   [2003]   [Feb]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patches in this message
/
Date
From
Subject2.4.20(-pre4) traps and 2.4 19
Hi,
Informix 9.30UC4 benchmark from ESQLC 2.80CSDK.
What's causing the "devic.." interrupts ?
Basis system Suse 8.1, kernel orig, Mantel, 2.4.20pre and 2.4.21pre.

--snip sorted by time --
145 system_call 2.5893
87 device_not_available 1.8125
27 restore_fpu 0.8710
42 math_state_restore 0.8077
183 do_schedule 0.3172
4 ret_from_sys_call 0.2353
10 in_group_p 0.2326
28 do_softirq 0.1879
2 sys_gettid 0.1429
6 supplemental_group_member 0.1277
3 wake_up_process 0.1154
4 __find_get_page 0.0952
1 reschedule 0.0833
2 ret_from_exception 0.0800
173 sys_semtimedop 0.0695
32 update_queue 0.0570
17 try_to_wake_up 0.0484
8 schedule_timeout 0.0457
2 bh_action 0.0357
1 __free_pages 0.0323
-- end snip --

-- snip sorted by frequency --
839 total 0.0006
170 do_schedule 0.2946
166 sys_semtimedop 0.0667
127 system_call 2.2679
80 device_not_available 1.6667
37 math_state_restore 0.7115
30 do_page_fault 0.0213
28 do_softirq 0.1879
27 update_queue 0.0481
25 restore_fpu 0.8065
14 try_to_wake_up 0.0399
13 sys_ipc 0.0183
9 do_no_page 0.0183
8 schedule_timeout 0.0457
8 in_group_p 0.1860
7 do_wp_page 0.0135
6 do_anonymous_page 0.0206
5 timer_bh 0.0069
--end snip --

/proc/<main oninit process>/maps

08048000-086f8000 r-xp 00000000 08:02 1060509 /opt/informix/bin/oninit
086f8000-08826000 rw-p 006af000 08:02 1060509 /opt/informix/bin/oninit
08826000-08897000 rwxp 00000000 00:00 0
10000000-18d73000 rw-s 00000000 00:05 98305 /SYSV52564801 (deleted)
18d73000-19d73000 rw-s 00000000 00:05 131074 /SYSV52564802 (deleted)
19d73000-19dae000 rw-s 00000000 00:05 163843 /SYSV52564803 (deleted)
2aaab000-2aabd000 r-xp 00000000 08:02 1108443 /lib/ld-2.2.5.so
2aabd000-2aabe000 rw-p 00011000 08:02 1108443 /lib/ld-2.2.5.so
2aabe000-2aac0000 rw-p 00000000 00:00 0
2aad2000-2aad3000 r-xp 00000000 08:02 441462 /opt/informix/lib/iosm09a.so
2aad3000-2aad4000 rw-p 00000000 08:02 441462 /opt/informix/lib/iosm09a.so
2aad4000-2aade000 r-xp 00000000 08:02
441698 /opt/informix/lib/libifxpthread.so
2aade000-2aae6000 rw-p 00009000 08:02
441698 /opt/informix/lib/libifxpthread.so
2aae6000-2aae7000 r-xp 00000000 08:02 441464 /opt/informix/lib/ismdd09a.so
2aae7000-2aae8000 rw-p 00000000 08:02 441464 /opt/informix/lib/ismdd09a.so
2aae8000-2ab0a000 r-xp 00000000 08:02 1108477 /lib/libm.so.6
2ab0a000-2ab0b000 rw-p 00021000 08:02 1108477 /lib/libm.so.6
2ab0b000-2ab0d000 r-xp 00000000 08:02 1108476 /lib/libdl.so.2
2ab0d000-2ab0e000 rw-p 00001000 08:02 1108476 /lib/libdl.so.2
2ab0e000-2ab0f000 rw-p 00000000 00:00 0
2ab0f000-2ab17000 r-xp 00000000 08:02 1108475 /lib/libcrypt.so.1
2ab17000-2ab19000 rw-p 00008000 08:02 1108475 /lib/libcrypt.so.1
2ab19000-2ab40000 rw-p 00000000 00:00 0
2ab40000-2ac54000 r-xp 00000000 08:02 1108444 /lib/libc.so.6
2ac54000-2ac5a000 rw-p 00113000 08:02 1108444 /lib/libc.so.6
2ac5a000-2ac5e000 rw-p 00000000 00:00 0
2ac5e000-2ac69000 r-xp 00000000 08:02 1108479 /lib/libnss_compat.so.2
2ac69000-2ac6a000 rw-p 0000a000 08:02 1108479 /lib/libnss_compat.so.2
2ac6a000-2ac7c000 r-xp 00000000 08:02 1108478 /lib/libnsl.so.1
2ac7c000-2ac7d000 rw-p 00011000 08:02 1108478 /lib/libnsl.so.1
2ac7d000-2ac7f000 rw-p 00000000 00:00 0
7ffc8000-80000000 rwxp fffc9000 00:00 0




From the Informix Doc:

Just read till *** MSW ***

From Machine notes:
System Requirements:
===================

1. This product was built on RedHat Linux 6.2 and is targeted
for Linux Kernel 2.2.14-5 or higher and glibc 2.1.3-15 or higher.
GNU License
===========

1. This product is shipped with a modified version of libpthread.so,
which can be found under $INFORMIXDIR/lib/libifxpthread.so.
The "Terms and Conditions" from the GNU license apply to this file only.
The IBM Informix copyrights apply to all other files in this distribution.
You can check the GNU copyright under http://www.gnu.org/copyleft/gpl.html
or in the GNU General Public License file $INFORMIXDIR/etc/GNUlicense.txt.
The following changes have been applied to the original
glibc linuxthreads 2.1.3 sources, which can be downloaded from
sourceware.cygnus.com or one of the mirror sites under
glibc/releases/glibc-linuxthreads-2.1.3.tar.gz

$ diff -u /glibc2.1.3-src/linuxthreads/internals.h internals.h
--- /glibc2.1.3-src/linuxthreads/internals.h Thu Jan 20 17:40:19 2000
+++ internals.h Thu May 11 05:17:56 2000
@@ -240,6 +240,15 @@

extern char *__pthread_initial_thread_bos;

+/* lowest bottom of stack of any other thread ever allocated
+ This is used for checking stack pointer between this value
+ and __pthread_initial_thread_bos to check other threads
+ before checking initial threads stack. This enables switching
+ the stack of the initial thread (in user level multithreading)
+ and make thread_self() working correctly. see also internals.h */
+
+extern char *__pthread_other_threads_lowest_bos;
+
/* Indicate whether at least one thread has a user-defined stack (if 1),
or all threads have stacks supplied by LinuxThreads (if 0). */

@@ -337,15 +346,26 @@
return THREAD_SELF;
#else
char *sp = CURRENT_STACK_FRAME;
- if (sp >= __pthread_initial_thread_bos)
- return &__pthread_initial_thread;
- else if (sp >= __pthread_manager_thread_bos
- && sp < __pthread_manager_thread_tos)
+ if (sp >= __pthread_manager_thread_bos
+ && sp < __pthread_manager_thread_tos)
return &__pthread_manager_thread;
- else if (__pthread_nonstandard_stacks)
- return __pthread_find_self();
- else
- return (pthread_descr)(((unsigned long)sp | (STACK_SIZE-1))+1) - 1;
+ else
+ {
+ if(__pthread_nonstandard_stacks)
+ {
+ pthread_descr pd;
+ if( (pd = __pthread_find_self()) != NULL )
+ return pd;
+ }
+ else
+ {
+ if( __pthread_other_threads_lowest_bos != NULL &&
+ sp < __pthread_initial_thread_bos &&
+ sp >= __pthread_other_threads_lowest_bos )
+ return (pthread_descr)(((unsigned long)sp | (STACK_SIZE-1))+1) - 1;
+ }
+ }
+ return &__pthread_initial_thread;
#endif
}

$ diff -u /glibc2.1.3-src/linuxthreads/pthread.c pthread.c
--- /glibc2.1.3-src/linuxthreads/pthread.c Thu Jan 20 17:40:19 2000
+++ pthread.c Wed Apr 19 07:53:55 2000
@@ -136,6 +136,15 @@

char *__pthread_initial_thread_bos = NULL;

+/* lowest bottom of stack of any other thread ever allocated
+ This is used for checking stack pointer between this value
+ and __pthread_initial_thread_bos to check other threads
+ before checking initial threads stack. This enables switching
+ the stack of the initial thread (in user level multithreading)
+ and make thread_self() working correctly. see also internals.h */
+
+char *__pthread_other_threads_lowest_bos = NULL;
+
/* File descriptor for sending requests to the thread manager. */
/* Initially -1, meaning that the thread manager is not running. */

@@ -544,8 +553,12 @@
/* __pthread_handles[0] is the initial thread, __pthread_handles[1] is
the manager threads handled specially in thread_self(), so start at 2 */
h = __pthread_handles + 2;
- while (! (sp <= (char *) h->h_descr && sp >= h->h_bottom)) h++;
- return h->h_descr;
+ while (! (sp <= (char *) h->h_descr && sp >= h->h_bottom &&
+ h < (__pthread_handles + PTHREAD_THREADS_MAX) )) h++;
+ if( h < (__pthread_handles + PTHREAD_THREADS_MAX) )
+ return h->h_descr;
+ else
+ return NULL;
}

#endif
$ diff -u /glibc2.1.3-src/linuxthreads/manager.c manager.c
--- /glibc2.1.3-src/linuxthreads/manager.c Thu Jan 20 17:40:19 2000
+++ manager.c Wed Apr 19 07:44:17 2000
@@ -301,6 +301,11 @@
-1, 0) == MAP_FAILED)
/* Bad luck, this segment is already mapped. */
return -1;
+
+ if( __pthread_other_threads_lowest_bos == NULL ||
+ __pthread_other_threads_lowest_bos > new_thread_bottom )
+ __pthread_other_threads_lowest_bos = new_thread_bottom;
+
/* We manage to get a stack. Now see whether we need a guard
and allocate it if necessary. Notice that the default
attributes (stack_size = STACK_SIZE - pagesize) do not need

You can also obtain these modified linuxthreads source files
under http://www.informix.com/idn-secure/Linux/randinfo.html

*** MSW ***

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

\
 
 \ /
  Last update: 2005-03-22 13:32    [W:0.033 / U:0.392 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site