I spent some time today profiling the latest httpd-2.1 trunk on OS X,
using
the Shark application from Apple's developer tools bundle. Shark works
by sampling the program counter of a monitored process every N
instructions
or every N microseconds. It's somewhat like OProfile, but with a
nice GUI for
visualizing the data.
The test case I monitored was:
* JMeter requesting a 1KB file from the httpd, one request at a time,
with
no delay between requests
* Prefork MPM with default config settings during build
* Symlink checking and .htaccess file checking turned off in the
runtime config
* No server-side-include processing invoked
* No mod_cache
I found a lot of interesting things:
* Over 60% of the httpd's CPU time was spent in userspace, rather than
the kernel. That's higher than I'd expected for static file
delivery.
* We're spending a surprising amount of time creating pollsets (please
see my message on [EMAIL PROTECTED] earlier today for details). It looks like
this overhead is incurred both when opening files and when setting
aside file buckets (within core_output_filter).
* Our old friends file_walk() and directory_walk() collectively
account for
over 8% of the total CPU time. It's probably possible to speed up
both, but
I haven't looked at them in detail in over a year.
* Another 2.5% of the total is in find_ct(), in mod_mime.c.
* mod_log_config comprises just under 5% of the total CPU usage.
Date/time formatting is part of the reason for this (even with the
caching
that's already in place).
* ap_set_last_modified() is another 2.5% of the total. Date/time
formatting
accounts for most of this.
* basic_http_header() accounts for another 2.5%. About a third of
this time
is spent formatting the Date field in the response header.
* ap_discard_request_body(): 1.5%.
At a high level, the call graph looks like this:
Self Total Library Symbol
---- ----- ------- ------
0.0% 63.6% httpd main
0.0% 63.6% httpd ap_mpm_run
0.0% 63.6% httpd make_child
0.0% 63.5% httpd child_main
0.0% 62.2% httpd ap_run_process_connection
0.0% 62.2% httpd ap_process_http_connection
0.2% 45.9% httpd ap_process_request
0.1% 20.4% httpd ap_invoke_handler
0.4% 15.5% httpd ap_process_request_internal
0.1% 4.8% httpd ap_run_log_transaction
0.5% 2.4% httpd ap_core_output_filter
0.0% 1.0% httpd ap_http_filter
0.1% 0.6% httpd ap_finalize_request_protocol
0.1% 0.1% httpd ap_core_input_filter
0.1% 0.1% httpd
ap_update_child_status_from_indexes
0.1% 0.1% httpd ap_run_quick_handler
0.1% 0.1% httpd ap_update_child_status
0.1% 0.1% libapr-1.0 apr_file_read
0.1% 0.1% httpd writev_it_all
The remaining ~37% of the samples are in kernel space.
At the end of this message I've included a more detailed profile, as
generated by Shark's
"report" feature. I've left out the kernel-space parts, as well as
all functions in user-space
whose total self+children time was less than 0.1% of the total.
There are a few oddities
in the data that I think represent sampling errors--e.g., call stacks
that are impossible.
But the overall pattern of the data was consistent across many test
runs, so it appears
to be generally valid for performance optimization work.
Finally, I've saved the Shark data file, including annotated source
code. It's
available at <http://people.apache.org/~brianp/httpd-
trunk-20050703.mshark>.
Loading this data file into Shark is perhaps the best way to study
the data.
A few important caveats, though:
* The data file is 10MB in size.
* It's in a binary format readable only by Shark on OS X (found under
/Developer/Applications/Performance Tools/ if you've installed
Apple's
"Developer Tools" or "Xcode" package).
-Brian
More detailed profile:
# Report 1 - httpd-trunk-20050703.mshark - Time Profile (CPU Cycles -
G4+) of httpd
SharkProfileViewer
# Generated from the visible portion of the outline view
+ 63.6% start (httpd)
| + 63.6% _start (httpd)
| | + 63.6% main (httpd)
| | | + 63.6% ap_mpm_run (httpd)
| | | | + 63.6% make_child (httpd)
| | | | | + 63.5% child_main (httpd)
| | | | | | + 62.2% ap_run_process_connection (httpd)
| | | | | | | + 62.2% ap_process_http_connection (httpd)
| | | | | | | | + 45.9% ap_process_request (httpd)
| | | | | | | | | + 20.4% ap_invoke_handler (httpd)
| | | | | | | | | | + 19.7% ap_run_handler (httpd)
| | | | | | | | | | | + 18.3% default_handler (httpd)
| | | | | | | | | | | | + 8.1% ap_byterange_filter (httpd)
| | | | | | | | | | | | | + 7.7% ap_content_length_filter (httpd)
| | | | | | | | | | | | | | + 7.3% ap_http_header_filter (httpd)
| | | | | | | | | | | | | | | + 2.5% basic_http_header (httpd)
| | | | | | | | | | | | | | | | - 0.6% ap_recent_rfc822_date (httpd)
| | | | | | | | | | | | | | | | - 0.5% form_header_field (httpd)
| | | | | | | | | | | | | | | | - 0.4% apr_brigade_writev
(libaprutil-1.0.dylib)
| | | | | | | | | | | | | | | | - 0.4% cached_explode (httpd)
| | | | | | | | | | | | | | | | 0.2% __stub_getrealaddr
(libaprutil-1.0.dylib)
| | | | | | | | | | | | | | | | 0.2% __memcpy (commpage
[libSystem.B.dylib])
| | | | | | | | | | | | | | | | 0.1% ap_get_server_version (httpd)
| | | | | | | | | | | | | | | | 0.1% strlen (libSystem.B.dylib)
| | | | | | | | | | | | | | | | 0.1% dyld_stub_apr_table_unset (httpd)
| | | | | | | | | | | | | | | + 2.0% ap_set_keepalive (httpd)
| | | | | | | | | | | | | | | | - 0.8% apr_psprintf (libapr-1.0.dylib)
| | | | | | | | | | | | | | | | - 0.5% ap_find_token (httpd)
| | | | | | | | | | | | | | | | - 0.2% apr_table_mergen
(libapr-1.0.dylib)
| | | | | | | | | | | | | | | | - 0.2% apr_table_get (libapr-1.0.dylib)
| | | | | | | | | | | | | | | | 0.1% __divdi3 (httpd)
| | | | | | | | | | | | | | | + 1.2% ap_core_output_filter (httpd)
| | | | | | | | | | | | | | | | - 1.1% ap_save_brigade (httpd)
| | | | | | | | | | | | | | | - 0.2% basic_http_header_check (httpd)
| | | | | | | | | | | | | | | - 0.2% ap_http_header_filter (httpd)
| | | | | | | | | | | | | | | 0.2% strlen (libSystem.B.dylib)
| | | | | | | | | | | | | | | - 0.1% apr_table_do (libapr-1.0.dylib)
| | | | | | | | | | | | | | | - 0.1% apr_table_setn (libapr-1.0.dylib)
| | | | | | | | | | | | | | | - 0.1% apr_array_make (libapr-1.0.dylib)
| | | | | | | | | | | | | | | 0.1% dyld_stub_strlen (httpd)
| | | | | | | | | | | | | | | 0.1% ap_pass_brigade (httpd)
| | | | | | | | | | | | | | | 0.1% ap_make_content_type (httpd)
| | | | | | | | | | | | | | | - 0.1% apr_brigade_write
(libaprutil-1.0.dylib)
| | | | | | | | | | | | | | | 0.1% dyld_stub_apr_table_do (httpd)
| | | | | | | | | | | | | | - 0.3% ap_set_content_length (httpd)
| | | | | | | | | | | | | - 0.1% ap_http_header_filter (httpd)
| | | | | | | | | | | | + 2.6% ap_set_last_modified (httpd)
| | | | | | | | | | | | | + 2.2% apr_rfc822_date (libapr-1.0.dylib)
| | | | | | | | | | | | | | + 1.4% apr_time_exp_tz (libapr-1.0.dylib)
| | | | | | | | | | | | | | | + 1.4% explode_time (libapr-1.0.dylib)
| | | | | | | | | | | | | | | | - 1.3% gmtime_r (libSystem.B.dylib)
| | | | | | | | | | | | | | | | 0.1% notify_check (libSystem.B.dylib)
| | | | | | | | | | | | | | 0.2% __divdi3 (libapr-1.0.dylib)
| | | | | | | | | | | | | | 0.2% __moddi3 (libapr-1.0.dylib)
| | | | | | | | | | | | | | - 0.1% explode_time (libapr-1.0.dylib)
| | | | | | | | | | | | | - 0.1% apr_time_exp_tz (libapr-1.0.dylib)
| | | | | | | | | | | | | 0.1% ap_rationalize_mtime (httpd)
| | | | | | | | | | | | + 1.5% ap_discard_request_body (httpd)
| | | | | | | | | | | | | + 0.5% ap_http_filter (httpd)
| | | | | | | | | | | | | | 0.1% apr_table_get (libapr-1.0.dylib)
| | | | | | | | | | | | | | 0.1% ap_get_limit_req_body (httpd)
| | | | | | | | | | | | | | - 0.1% apr_bucket_eos_create
(libaprutil-1.0.dylib)
| | | | | | | | | | | | | 0.2% __stub_getrealaddr (libapr-1.0.dylib)
| | | | | | | | | | | | | - 0.1% apr_brigade_create
(libaprutil-1.0.dylib)
| | | | | | | | | | | | | 0.1% apr_file_open (libapr-1.0.dylib)
| | | | | | | | | | | | | 0.1% apr_unix_perms2mode (libapr-1.0.dylib)
| | | | | | | | | | | | | - 0.1% apr_brigade_cleanup
(libaprutil-1.0.dylib)
| | | | | | | | | | | | | 0.1% apr_pool_cleanup_register
(libapr-1.0.dylib)
| | | | | | | | | | | | | 0.1% apr_bucket_alloc (libaprutil-1.0.dylib)
| | | | | | | | | | | | + 0.9% ap_meets_conditions (httpd)
| | | | | | | | | | | | | - 0.3% apr_table_get (libapr-1.0.dylib)
| | | | | | | | | | | | | 0.2% __divdi3 (httpd)
| | | | | | | | | | | | | - 0.1% ap_meets_conditions (httpd)
| | | | | | | | | | | | + 0.7% apr_file_open (libapr-1.0.dylib)
| | | | | | | | | | | | | - 0.2% apr_pollset_create (libapr-1.0.dylib)
| | | | | | | | | | | | | 0.1% apr_palloc (libapr-1.0.dylib)
| | | | | | | | | | | | | 0.1% __stub_getrealaddr (libapr-1.0.dylib)
| | | | | | | | | | | | | 0.1% __memcpy (commpage [libSystem.B.dylib])
| | | | | | | | | | | | 0.6% ap_core_output_filter (httpd)
| | | | | | | | | | | | 0.5% ap_http_header_filter (httpd)
| | | | | | | | | | | | - 0.4% ap_set_etag (httpd)
| | | | | | | | | | | | - 0.4% ap_set_content_length (httpd)
| | | | | | | | | | | | - 0.2% apr_table_setn (libapr-1.0.dylib)
| | | | | | | | | | | | 0.2% ap_set_keepalive (httpd)
| | | | | | | | | | | | 0.2% ap_save_brigade (httpd)
| | | | | | | | | | | | - 0.2% default_handler (httpd)
| | | | | | | | | | | | - 0.1% apr_bucket_file_create
(libaprutil-1.0.dylib)
| | | | | | | | | | | | 0.1% apr_brigade_write (libaprutil-1.0.dylib)
| | | | | | | | | | | | - 0.1% ap_http_filter (httpd)
| | | | | | | | | | | | 0.1% strcasecmp (libSystem.B.dylib)
| | | | | | | | | | | | 0.1% ap_content_length_filter (httpd)
| | | | | | | | | | | | 0.1% ap_pass_brigade (httpd)
| | | | | | | | | | | | - 0.1% apr_brigade_create (libaprutil-1.0.dylib)
| | | | | | | | | | | | 0.1% ap_allow_standard_methods (httpd)
| | | | | | | | | | | | 0.1% ap_update_mtime (httpd)
| | | | | | | | | | | | 0.1% basic_http_header_check (httpd)
| | | | | | | | | | | + 0.3% status_handler (httpd)
| | | | | | | | | | | | 0.1% getpid (libSystem.B.dylib)
| | | | | | | | | | | - 0.2% cgi_handler (httpd)
| | | | | | | | | | | - 0.2% asis_handler (httpd)
| | | | | | | | | | | - 0.1% handle_map_file (httpd)
| | | | | | | | | | | 0.1% action_handler (httpd)
| | | | | | | | | | | - 0.1% handle_autoindex (httpd)
| | | | | | | | | | | - 0.1% apr_table_setn (libapr-1.0.dylib)
| | | | | | | | | | - 0.2% ap_run_insert_filter (httpd)
| | | | | | | | | | - 0.2% ap_invoke_handler (httpd)
| | | | | | | | | | - 0.1% ap_run_fixups (httpd)
| | | | | | | | | + 15.5% ap_process_request_internal (httpd)
| | | | | | | | | | + 8.9% ap_run_map_to_storage (httpd)
| | | | | | | | | | | + 8.7% core_map_to_storage (httpd)
| | | | | | | | | | | | + 6.5% ap_directory_walk (httpd)
| | | | | | | | | | | | | + 2.6% ap_merge_per_dir_configs (httpd)
| | | | | | | | | | | | | | + 1.7% merge_core_dir_configs (httpd)
| | | | | | | | | | | | | | | - 0.4% apr_array_append (libapr-1.0.dylib)
| | | | | | | | | | | | | | | 0.2% __memcpy (commpage
[libSystem.B.dylib])
| | | | | | | | | | | | | | | 0.1% dyld_stub_apr_array_append (httpd)
| | | | | | | | | | | | | - 0.6% ap_make_dirstr_parent (httpd)
| | | | | | | | | | | | | - 0.6% apr_stat (libapr-1.0.dylib)
| | | | | | | | | | | | | - 0.3% prep_walk_cache (httpd)
| | | | | | | | | | | | | 0.1% strlen (libSystem.B.dylib)
| | | | | | | | | | | | | 0.1% dyld_stub_memcpy (httpd)
| | | | | | | | | | | | | - 0.1% apr_filepath_merge (libapr-1.0.dylib)
| | | | | | | | | | | | | 0.1% strcmp (libSystem.B.dylib)
| | | | | | | | | | | | | - 0.1% apr_filepath_root (libapr-1.0.dylib)
| | | | | | | | | | | | | 0.1% core_opts_merge (httpd)
| | | | | | | | | | | | | 0.1% strchr (libSystem.B.dylib)
| | | | | | | | | | | | | 0.1% __memcpy (commpage [libSystem.B.dylib])
| | | | | | | | | | | | | - 0.1% ap_directory_walk (httpd)
| | | | | | | | | | | | | 0.1% dyld_stub_apr_filepath_root (httpd)
| | | | | | | | | | | | + 2.1% ap_file_walk (httpd)
| | | | | | | | | | | | | - 1.4% ap_regexec (httpd)
| | | | | | | | | | | | | - 0.1% prep_walk_cache (httpd)
| | | | | | | | | | | | | 0.1% strrchr (libSystem.B.dylib)
| | | | | | | | | | | | | - 0.1% ap_core_input_filter (httpd)
| | | | | | | | | | | | - 0.1% core_map_to_storage (httpd)
| | | | | | | | | | + 2.8% ap_run_type_checker (httpd)
| | | | | | | | | | | + 2.5% find_ct (httpd)
| | | | | | | | | | | | - 0.5% ap_str_tolower (httpd)
| | | | | | | | | | | | - 0.3% apr_hash_get (libapr-1.0.dylib)
| | | | | | | | | | | | - 0.2% apr_table_setn (libapr-1.0.dylib)
| | | | | | | | | | | | - 0.1% find_ct (httpd)
| | | | | | | | | | | | - 0.1% ap_set_content_type (httpd)
| | | | | | | | | | | | - 0.1% find_entry (libapr-1.0.dylib)
| | | | | | | | | | | | - 0.1% ap_getword (httpd)
| | | | | | | | | | | | 0.1% bcmp (libSystem.B.dylib)
| | | | | | | | | | | | 0.1% strrchr (libSystem.B.dylib)
| | | | | | | | | | | 0.1% ap_add_output_filters_by_type (httpd)
| | | | | | | | | | - 1.3% ap_run_translate_name (httpd)
| | | | | | | | | | - 0.8% ap_run_fixups (httpd)
| | | | | | | | | | - 0.5% ap_run_access_checker (httpd)
| | | | | | | | | | 0.3% ap_getparents (httpd)
| | | | | | | | | | - 0.2% ap_run_header_parser (httpd)
| | | | | | | | | | 0.1% ap_location_walk (httpd)
| | | | | | | | | | - 0.1% ap_unescape_url (httpd)
| | | | | | | | | | - 0.1% ap_some_auth_required (httpd)
| | | | | | | | | | - 0.1% ap_process_request_internal (httpd)
| | | | | | | | | | 0.1% ap_satisfies (httpd)
| | | | | | | | | + 4.8% ap_run_log_transaction (httpd)
| | | | | | | | | | + 4.6% multi_log_transaction (httpd)
| | | | | | | | | | | + 4.4% config_log_transaction (httpd)
| | | | | | | | | | | | + 1.6% log_request_time (httpd)
| | | | | | | | | | | | | - 0.7% cached_explode (httpd)
| | | | | | | | | | | | | - 0.3% apr_snprintf (libapr-1.0.dylib)
| | | | | | | | | | | | | 0.2% __divdi3 (httpd)
| | | | | | | | | | | | | 0.1% __memcpy (commpage [libSystem.B.dylib])
| | | | | | | | | | | | - 0.5% ap_default_log_writer (httpd)
| | | | | | | | | | | | - 0.3% ap_escape_logitem (httpd)
| | | | | | | | | | | | 0.2% strlen (libSystem.B.dylib)
| | | | | | | | | | | | 0.2% __moddi3 (libapr-1.0.dylib)
| | | | | | | | | | | | 0.2% __divdi3 (libapr-1.0.dylib)
| | | | | | | | | | | | - 0.2% log_remote_host (httpd)
| | | | | | | | | | | | - 0.1% apr_itoa (libapr-1.0.dylib)
| | | | | | | | | | | | - 0.1% apr_off_t_toa (libapr-1.0.dylib)
| | | | | | | | | | | | - 0.1% log_remote_logname (httpd)
| | | | | | | | | | | | 0.1% dyld_stub_apr_palloc (httpd)
| | | | | | | | | | | - 0.1% ap_net_time_filter (httpd)
| | | | | | | | | | - 0.1% ap_run_log_transaction (httpd)
| | | | | | | | | + 2.4% ap_core_output_filter (httpd)
| | | | | | | | | | - 0.4% apr_pool_clear (libapr-1.0.dylib)
| | | | | | | | | | - 0.3% apr_brigade_cleanup (libaprutil-1.0.dylib)
| | | | | | | | | | - 0.3% writev_it_all (httpd)
| | | | | | | | | | 0.2% apr_socket_send (libapr-1.0.dylib)
| | | | | | | | | | - 0.1% run_cleanups (libapr-1.0.dylib)
| | | | | | | | | | 0.1% apr_pool_cleanup_kill (libapr-1.0.dylib)
| | | | | | | | | | - 0.1% apr_file_read (libapr-1.0.dylib)
| | | | | | | | | | - 0.1% apr_file_seek (libapr-1.0.dylib)
| | | | | | | | | | 0.1% __stub_getrealaddr (libaprutil-1.0.dylib)
| | | | | | | | | | 0.1% dyld_stub_apr_file_seek (httpd)
| | | | | | | | | | 0.1% apr_brigade_destroy (libaprutil-1.0.dylib)
| | | | | | | | | | - 0.1% ap_core_output_filter (httpd)
| | | | | | | | | - 1.0% ap_http_filter (httpd)
| | | | | | | | | - 0.6% ap_finalize_request_protocol (httpd)
| | | | | | | | | 0.1% ap_core_input_filter (httpd)
| | | | | | | | | 0.1% ap_update_child_status_from_indexes (httpd)
| | | | | | | | | 0.1% ap_run_quick_handler (httpd)
| | | | | | | | | 0.1% ap_update_child_status (httpd)
| | | | | | | | | 0.1% apr_file_read (libapr-1.0.dylib)
| | | | | | | | | 0.1% writev_it_all (httpd)
| | | | | | | | | - 0.1% ap_process_request (httpd)
| | | | | | | | + 15.4% ap_read_request (httpd)
| | | | | | | | | + 4.1% ap_rgetline_core (httpd)
| | | | | | | | | | + 3.1% ap_core_input_filter (httpd)
| | | | | | | | | | | + 2.9% apr_brigade_split_line
(libaprutil-1.0.dylib)
| | | | | | | | | | | | + 2.1% socket_bucket_read (libaprutil-1.0.dylib)
| | | | | | | | | | | | | - 0.5% apr_socket_recv (libapr-1.0.dylib)
| | | | | | | | | | | | | 0.2% apr_pollset_poll (libapr-1.0.dylib)
| | | | | | | | | | | | | 0.2% apr_pollset_remove (libapr-1.0.dylib)
| | | | | | | | | | | | | 0.2% apr_pollset_add (libapr-1.0.dylib)
| | | | | | | | | | | | | 0.1% __divdi3 (libapr-1.0.dylib)
| | | | | | | | | | | | | 0.1% apr_allocator_alloc (libapr-1.0.dylib)
| | | | | | | | | | | | | 0.1% apr_wait_for_io_or_timeout
(libapr-1.0.dylib)
| | | | | | | | | | | | | 0.1% __stub_getrealaddr
(libaprutil-1.0.dylib)
| | | | | | | | | | | | | - 0.1% apr_bucket_heap_make
(libaprutil-1.0.dylib)
| | | | | | | | | | | | | 0.1% __moddi3 (libapr-1.0.dylib)
| | | | | | | | | | | | | - 0.1% cthread_set_errno_self
(libSystem.B.dylib)
| | | | | | | | | | | | | 0.1% kevent (libSystem.B.dylib)
| | | | | | | | | | | | | - 0.1% apr_bucket_socket_create
(libaprutil-1.0.dylib)
| | | | | | | | | | | | + 0.2% apr_bucket_shared_split
(libaprutil-1.0.dylib)
| | | | | | | | | | | | | 0.1% __memcpy (commpage [libSystem.B.dylib])
| | | | | | | | | | | | | - 0.1% apr_bucket_simple_split
(libaprutil-1.0.dylib)
| | | | | | | | | | | | 0.1% memchr (libSystem.B.dylib)
| | | | | | | | | | | | - 0.1% cerror (libSystem.B.dylib)
| | | | | | | | | | | | 0.1% apr_bucket_simple_split
(libaprutil-1.0.dylib)
| | | | | | | | | | | | 0.1% apr_socket_recv (libapr-1.0.dylib)
| | | | | | | | | | - 0.3% ap_net_time_filter (httpd)
| | | | | | | | | | 0.1% apr_brigade_split_line (libaprutil-1.0.dylib)
| | | | | | | | | | 0.1% ap_get_brigade (httpd)
| | | | | | | | | + 4.0% ap_get_mime_headers_core (httpd)
| | | | | | | | | | + 1.7% ap_rgetline_core (httpd)
| | | | | | | | | | | - 0.7% ap_core_input_filter (httpd)
| | | | | | | | | | | - 0.2% apr_brigade_cleanup (libaprutil-1.0.dylib)
| | | | | | | | | | | - 0.1% ap_net_time_filter (httpd)
| | | | | | | | | | | - 0.1% apr_brigade_split_line
(libaprutil-1.0.dylib)
| | | | | | | | | | | 0.1% ap_get_brigade (httpd)
| | | | | | | | | | | 0.1% apr_palloc (libapr-1.0.dylib)
| | | | | | | | | | | 0.1% __memcpy (commpage [libSystem.B.dylib])
| | | | | | | | | | - 1.0% apr_table_compress (libapr-1.0.dylib)
| | | | | | | | | | - 0.2% apr_table_addn (libapr-1.0.dylib)
| | | | | | | | | | - 0.1% ap_get_mime_headers_core (httpd)
| | | | | | | | | | 0.1% strcasecmp (libSystem.B.dylib)
| | | | | | | | | | 0.1% strchr (libSystem.B.dylib)
| | | | | | | | | | 0.1% table_reindex (libapr-1.0.dylib)
| | | | | | | | | | 0.1% ap_core_input_filter (httpd)
| | | | | | | | | | 0.1% dyld_stub_strchr (httpd)
| | | | | | | | | + 1.6% ap_update_vhost_from_headers (httpd)
| | | | | | | | | | + 0.6% apr_parse_addr_port (libapr-1.0.dylib)
| | | | | | | | | | | 0.3% strtol_l (libSystem.B.dylib)
| | | | | | | | | | | 0.1% __stub_getrealaddr (libapr-1.0.dylib)
| | | | | | | | | | - 0.2% ap_update_vhost_from_headers (httpd)
| | | | | | | | | | - 0.1% apr_table_get (libapr-1.0.dylib)
| | | | | | | | | | 0.1% atoi (libSystem.B.dylib)
| | | | | | | | | | 0.1% strtol_l (libSystem.B.dylib)
| | | | | | | | | | - 0.1% apr_itoa (libapr-1.0.dylib)
| | | | | | | | | | 0.1% dyld_stub_strtol_l (libSystem.B.dylib)
| | | | | | | | | + 1.1% ap_run_create_request (httpd)
| | | | | | | | | | + 0.6% core_create_req (httpd)
| | | | | | | | | | | - 0.2% apr_brigade_create (libaprutil-1.0.dylib)
| | | | | | | | | | | - 0.1% add_any_filter_handle (httpd)
| | | | | | | | | | - 0.3% http_create_request (httpd)
| | | | | | | | | - 0.8% ap_parse_uri (httpd)
| | | | | | | | | - 0.4% create_empty_config (httpd)
| | | | | | | | | - 0.3% apr_pool_create_ex (libapr-1.0.dylib)
| | | | | | | | | - 0.3% ap_run_post_read_request (httpd)
| | | | | | | | | - 0.3% ap_make_method_list (httpd)
| | | | | | | | | - 0.3% apr_time_now (libapr-1.0.dylib)
| | | | | | | | | - 0.2% ap_getword_white (httpd)
| | | | | | | | | - 0.2% apr_table_make (libapr-1.0.dylib)
| | | | | | | | | - 0.1% ap_read_request (httpd)
| | | | | | | | | - 0.1% apr_table_get (libapr-1.0.dylib)
| | | | | | | | | 0.1% __bzero (commpage [libSystem.B.dylib])
| | | | | | | | | - 0.1% add_any_filter_handle (httpd)
| | | | | | | | | 0.1% dyld_stub_apr_table_get (httpd)
| | | | | | | | | 0.1% ap_core_input_filter (httpd)
| | | | | | | | | 0.1% dyld_stub_apr_table_make (httpd)
| | | | | | | | | 0.1% apr_palloc (libapr-1.0.dylib)
| | | | | | | | | 0.1% ap_method_number_of (httpd)
| | | | | | | | - 0.5% apr_pool_destroy (libapr-1.0.dylib)
| | | | | | | | - 0.1% ap_process_http_connection (httpd)
| | | | | | | | 0.1% ap_update_child_status_from_indexes (httpd)
| | | | | | | | 0.1% ap_update_child_status (httpd)
| | | | | | + 0.7% ap_run_create_connection (httpd)
| | | | | | | + 0.6% core_create_conn (httpd)
| | | | | | | | - 0.3% apr_sockaddr_ip_get (libapr-1.0.dylib)
| | | | | | | | - 0.1% create_empty_config (httpd)
| | | | | | - 0.2% unixd_accept (httpd)
| | | | | | - 0.2% ap_process_connection (httpd)
| | | | | | 0.1% ap_process_http_connection (httpd)
| | | | | | - 0.1% ap_lingering_close (httpd)