Our service (c/c++ based) receive data from network (using select) and process the data and forward to network. Its designed as producer (1 thread, receive from network) and consumer(6 thread, manipulate the data and forward to network). In consumer it sleep for some time (4ms using select) and check if any data need to process. (i know this is not good design).

For high traffic from network , CPU utilization over 80% in suse 11 but 0~1% in suse 10(Same hardware).

I know clock precision in suse 10 is 4ms and suse 11 its 4ns. I check the CPU uses of each thread (using top -H). All producer and consumer thread utilization in suse 11 is over 10% but in suse 10 its 0%.
I tried to analyse strace output. In suse 11, select is taking 98% of time but in suse 10 its taking around 70%. I checked the oprofile output in suse 10 and suse 11 but could not findout what to analyse.

I also have written one sample server and client which just recive the message from sample client. Message rate 9000 msg /second. In SUSE 11, each server and client are taking over 7% but same test application take 0% in suse 10.

Plz help me to analyze. Thanks !!

/** server select logic **/
if (select(fdmax+1, &read_fds, NULL, NULL, NULL) == -1)

/** client **/
for(int i =0; i<400; ++i)
/* send the message line to the server */
n = write(sockfd, buf, strlen(buf));
if (n < 0)
printf("ERROR writing to socket\n");
m_sleepTime.tv_sec = 0;
m_sleepTime.tv_usec = 4000; // in 1 second, 250 times
if (-1 == select(FD_SETSIZE, NULL, NULL, NULL, &m_sleepTime))
printf("Select Failed\n");