Shlib Subroutine Source File Ratio Enter % Cycles ================ =========== ===== ===== ========== .memset memset.s 5.63 9 6.3 15311
Hummm... here is a snip from the flow trace... <snip> 1003923 2689 sendrecv.c 99 17 .......[0]apr_recv 1003925 2703 sendrecv.c 119 14 ........[0]apr_wait_for_io_or_timeout 1003927 2709 glink.s 185 6 .........[0]bzero 1003928 2712 memset.s 29 3 .........[0]bzero 1003929 4785 memset.s 10326 2073 .........*[0]memset 1004959 4803 sendrecv.c 65 18 ........[14]apr_wait_for_io_or_timeout 1004961 4809 glink.s 128 6 .........[0]__divi64 1004962 4908 divi64.s 295 99 .........[0]__divi64 1004982 4917 sendrecv.c 13 9 ........[32]apr_wait_for_io_or_timeout 1004983 4923 glink.s 83 6 .........[0]select ==> KERNEL </snip> Here is the source that corresponds to the flow trace: apr_status_t apr_wait_for_io_or_timeout(apr_socket_t *sock, int for_read) { struct timeval tv, *tvptr; fd_set fdset; int srv; do { FD_ZERO(&fdset); FD_SET(sock->socketdes, &fdset); if (sock->timeout < 0) { tvptr = NULL; } else { tv.tv_sec = sock->timeout / APR_USEC_PER_SEC; tv.tv_usec = sock->timeout % APR_USEC_PER_SEC; tvptr = &tv; } srv = select(sock->socketdes + 1, for_read ? &fdset : NULL, for_read ? NULL : &fdset, NULL, tvptr); /* TODO - timeout should be smaller on repeats of this loop */ } while (srv == -1 && errno == EINTR); I am -very- suprised that FD_SET is so wicked expensive. This accounts for 10,000+ of the 15,311 cycles of memset. Going to bounce this one off the AIX dev team and see what I get back. Bill