We have a C++ application that uses lksctp for transmission and reception of SCTP message. Our application does not report consistent message transfer rate (Tx and Rx) when multiple (two or three) instances of the same application are being run. I mean, the data rate is approximately 8k messages per second using a single application, however total messages per sec. get dropped to 18k when three instances of the same application are run. We have symmetric multi-processor (SMP) system with 4 CPUs (2GHz each).
To identify the performance bottleneck, we did profiling the system with OProfile (version 0.8.1) with following settings
The opreport –l obtained from the profiled data shows the SCTP module has been sampled maximum no of times but it doesn’t display the symbol information of sctp. The first 5 samples from opreport are as below.
CPU: Core Solo / Duo, speed 1995.21 MHz (estimated)
Counted CPU_CLK_UNHALTED events (Unhalted clock cycles) with a unit mask of 0x00 (Unhalted core cycles) count 100000
samples % app name symbol name
30498 9.3073 sctp (no symbols)
14241 4.3460 vmlinux sock_poll
13684 4.1761 vmlinux fget
10322 3.1500 vmlinux get_offset_pmtmr
9210 2.8107 vmlinux _spin_lock_irqsave
Redhat Enterprise Linux 2.6.9-55ELsmp.
gcc version 3.4.6 20060404 (Red Hat 3.4.6-8)
oprofile version 0.8.1
Please note that our application is also built with debug information. Note that, we also build the kernel source tree locally and installed newly build modules, bzImage and debuginfo rpm in the system. But still we are unable to get the symbol information of sctp module.
Can anyone help us to provide the steps (that we may have missed) to capture the symbol information of sctp module? Thanking you in advance for your help and comments.