This could be any one of a number of wierd effects that one sees from time to time. Rather than speculate, would it be too much to ask you to run objdump --disassemble on the different versions of your test program and post the results? ----- Original Message ----- From: "jamal" <hadi@xxxxxxxxxx> To: <linux-mips@xxxxxxxxxxxxxx> Cc: <sibyte-users@xxxxxxxxxxxx> Sent: Friday, May 28, 2004 21:36 Subject: weird sb1250 behavior > > found some very strange behavior with sb1250. > Gcc 3.2.3 with sibyte mods. Running Linux 2.4.21 with whatever > mods off sibyte. > > Testcase: > sending a large amount of traffic > -->eth0-->someprocessing-->eth1 > > given the nature of processing, say i was getting 100Kpps throughput. > Now i fire a very basic program that has just loops and forever > sums up two numbers. > > --- > 1 #include <stdlib.h> > 2 > 3 int main () > 4 { > 5 int a = 1; > 6 int b = 2; > 7 int c = 0; > 8 // int c; > 9 while (1) { > 10 c = a + b; > 11 } > 12 } > -------- > > I see very little drop in throughput - probably around 0.01%. > > Now comment line 7 then uncomment line 8. Hallelujah. > Perfomance drops to about 100pps. Thats about a factor of 1000 down! > > Interesting thing is if you add a nop (__asm__ __volatile__("nop");) > in the second version just before the while loop, we get back the same > performance as in the earlier version. > Apologies in advance for attaching objdumps (since there maybe folks who > dont have access to the sibyte tools) > 1) while-init-dis is for case 1 where c is initialized > 2) while-noinit-dis is for case 2 where c is not initialize > 3) while-nop-dis is for case 3 when you have nop thrown in. > > > cheers, > jamal > >