Hi, I have a very strange (for me) problem on alpha. First we noticed a very big (5 times) slowdown in one of our programs in very particular circumstances. It was for example depending on the value of the DISPLAY variable on one machine (:0.0 fast, virgoa3:0.0 slow !). I tracked down the problem to a very simple program : #include <time.h> #include <stdio.h> #include <stdlib.h> #include <fcntl.h> //int main_dada() int main() {int fd; char header [40]; char *buf; unsigned short type; unsigned int length; clock_t t1,t4; fd = open("FR0-26.dat", O_RDONLY, 0644); if(fd < 0) {return (0);} length = 11; while(length> 10) { t1 = clock(); // begin timing buf = malloc(255); if(read(fd, buf, 25) == 0) return(0); free (buf); t4 = clock(); // end timing printf("length=%8d t4 - t1 = %d\n",length,t4-t1); // print it } } In this code, I'm just timing the successive reads of chunks of data in a file. Now the interesting part : when I compile the program alone, I get t4-t1 = 0 (time needed to read one chunk) most of the time, except around 10 times (over 2500), where I get 16666. I suppose this is simply time sharing made by the kernel. If I compile a shared lib containing this code, renaming my function main_dada(), then dynamically load this lib with .L and execute this function from the interpreter, I get around 50 times 16666 for t4-t1. That seems to slow down the execution very much. If I make an executable myroot.exe that is linked with this library, then everything is normal and runs fast. This seems to indicate that dynamically loading the shared lib does something special on alpha's (OSF). Anyway, our big program runs fast now that we link everything with a main executable. I don't see this behaviour on linux. It's always fast and I always get a small number of interuptions from the kernel. I tried to do a small program using dlopen but I get a message "The shared library loader cannot be activated for this process" and I don't know what to do. Did anybody see this kind of behaviour on Alpha ? Does anyone has suggestions on what to do apart from always binding the shared libs to a main executable ? I would really like to load/unload shared libs. Damir -- ===================================================================== | Damir Buskulic | Universite de Savoie/LAPP | | | Chemin de Bellevue, B.P. 110 | | Tel : +33 (0)450091600 | F-74941 Annecy-le-Vieux Cedex | | e-mail: buskulic@lapp.in2p3.fr | FRANCE | ===================================================================== mailto:buskulic@lapp.in2p3.fr
This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:43:30 MET