Hi Leif, Here is an oprofile report taken when the test is running. I guess the higher samples for process_event is due to the extra events generated by having the plugin in place?
With the plugin: # opreport -l /spare/trafficserver/bin/traffic_server | less CPU: Intel Westmere microarchitecture, speed 2666.97 MHz (estimated) Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (No unit mask) count 100000 samples % image name symbol name 72381 4.2764 traffic_server EThread::process_event(Event*, int) 56934 3.3638 traffic_server read_from_net(NetHandler*, UnixNetVConnection*, EThread*) 50753 2.9986 traffic_server NetHandler::mainNetEvent(int, Event*) 46040 2.7202 traffic_server TransformTerminus::handle_event(int, void*) 44729 2.6427 traffic_server write_to_net_io(NetHandler*, UnixNetVConnection*, EThread*) 44680 2.6398 traffic_server MIOBuffer::write_avail() 43016 2.5415 traffic_server MIOBuffer::write(IOBufferReader*, long, long) 33287 1.9667 traffic_server HttpTunnel::producer_handler(int, HttpTunnelProducer*) 29387 1.7363 traffic_server UnixNetVConnection::reenable(VIO*) 28501 1.6839 traffic_server EThread::execute() 28115 1.6611 traffic_server HttpSM::_instantiate_func(HttpSM*, HttpSM*) 24991 1.4765 traffic_server HttpTunnel::main_handler(int, void*) 24831 1.4671 traffic_server IOBufferBlock::free() 22365 1.3214 traffic_server TSIOBufferReaderAvail 21353 1.2616 traffic_server HdrHeap::allocate_obj(int, int) 20894 1.2345 traffic_server HttpSM::state_api_callout(int, void*) 20784 1.2280 traffic_server HttpTunnel::consumer_handler(int, HttpTunnelConsumer*) 20119 1.1887 traffic_server HdrHeap::destroy() 16219 0.9583 traffic_server mime_parser_parse(MIMEParser*, HdrHeap*, MIMEHdrImpl*, char const**, char const*, bool, bool) 16193 0.9567 traffic_server UnixNetVConnection::load_buffer_and_write(long, long&, long&, MIOBufferAccessor&) 15985 0.9444 traffic_server HttpAPIHooks::get(TSHttpHookID) 15160 0.8957 traffic_server UnixNetVConnection::acceptEvent(int, Event*) 14975 0.8848 traffic_server PriorityEventQueue::check_ready(long, EThread*) 14949 0.8832 traffic_server TransformTerminus::reenable(VIO*) 14844 0.8770 traffic_server INKVConnInternal::handle_event(int, void*) 14667 0.8666 traffic_server HttpSM::main_handler(int, void*) 14134 0.8351 traffic_server HttpSM::cleanup() 13347 0.7886 traffic_server HttpSM::set_next_state() 13289 0.7851 traffic_server HttpSM::handle_api_return() 13205 0.7802 traffic_server HttpTunnel::producer_run(HttpTunnelProducer*) 13135 0.7760 traffic_server mime_hdr_field_find(MIMEHdrImpl*, char const*, int) 12965 0.7660 traffic_server hdrtoken_tokenize(char const*, int, char const**) 12404 0.7329 traffic_server INKVConnInternal::get_data(int, void*) 11649 0.6883 traffic_server ProtectedQueue::dequeue_timed(long, long, bool) 10440 0.6168 traffic_server HttpClientSession::do_io_close(int) 10310 0.6091 traffic_server UnixNetProcessor::connect_re_internal(Continuation*, unsigned int, int, NetVCOptions*) 10122 0.5980 traffic_server RecIncrGlobalRawStatSum(RecRawStatBlock*, int, long) 9445 0.5580 traffic_server TSDebug 9345 0.5521 traffic_server read_signal_and_update(int, UnixNetVConnection*) 9277 0.5481 traffic_server INKVConnInternal::reenable(VIO*) 8708 0.5145 traffic_server HttpSM::kill_this() When there is no plugin: CPU: Intel Westmere microarchitecture, speed 2666.97 MHz (estimated) Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (No unit mask) count 100000 samples % image name symbol name 65802 5.5597 traffic_server read_from_net(NetHandler*, UnixNetVConnection*, EThread*) 60502 5.1119 traffic_server NetHandler::mainNetEvent(int, Event*) 59198 5.0018 traffic_server MIOBuffer::write_avail() 40326 3.4072 traffic_server write_to_net_io(NetHandler*, UnixNetVConnection*, EThread*) 26835 2.2673 traffic_server EThread::execute() 26084 2.2039 traffic_server HttpSM::_instantiate_func(HttpSM*, HttpSM*) 22366 1.8897 traffic_server UnixNetVConnection::reenable(VIO*) 22270 1.8816 traffic_server HttpTunnel::producer_handler(int, HttpTunnelProducer*) 20121 1.7001 traffic_server UnixNetVConnection::load_buffer_and_write(long, long&, long&, MIOBufferAccessor&) 18675 1.5779 traffic_server EThread::process_event(Event*, int) 18305 1.5466 traffic_server mime_parser_parse(MIMEParser*, HdrHeap*, MIMEHdrImpl*, char const**, char const*, bool, bool) 17666 1.4926 traffic_server HdrHeap::allocate_obj(int, int) 17355 1.4664 traffic_server HttpSM::cleanup() 16056 1.3566 traffic_server HttpSM::handle_api_return() 14149 1.1955 traffic_server HttpTunnel::main_handler(int, void*) 14034 1.1858 traffic_server hdrtoken_tokenize(char const*, int, char const**) 13770 1.1635 traffic_server HdrHeap::destroy() 13759 1.1625 traffic_server HttpSM::set_next_state() 12805 1.0819 traffic_server PriorityEventQueue::check_ready(long, EThread*) 12486 1.0550 traffic_server IOBufferBlock::free() 12230 1.0333 traffic_server mime_hdr_field_find(MIMEHdrImpl*, char const*, int) 11180 0.9446 traffic_server read_signal_and_update(int, UnixNetVConnection*) 10855 0.9172 traffic_server HttpSM::main_handler(int, void*) 10026 0.8471 traffic_server UnixNetProcessor::connect_re_internal(Continuation*, unsigned int, int, NetVCOptions*) 9926 0.8387 traffic_server UnixNetVConnection::set_active_timeout(long) 9193 0.7767 traffic_server HttpSM::state_read_server_response_header(int, void*) 9073 0.7666 traffic_server HttpSM::attach_client_session(HttpClientSession*, IOBufferReader*) 9005 0.7609 traffic_server HttpClientSession::release(IOBufferReader*) 8871 0.7495 traffic_server RecIncrGlobalRawStatSum(RecRawStatBlock*, int, long) 8778 0.7417 traffic_server HttpSM::kill_this() 8605 0.7271 traffic_server HttpTunnel::consumer_handler(int, HttpTunnelConsumer*) 8603 0.7269 [vdso] (tgid:31600 range:0x7fff2e11a000-0x7fff2e11b000) [vdso] (tgid:31600 range:0x7fff2e11a000-0x7fff2e11b000) 7975 0.6738 traffic_server UnixNetVConnection::connectUp(EThread*) 7956 0.6722 traffic_server HttpTunnel::producer_run(HttpTunnelProducer*) 7401 0.6253 traffic_server HttpTransactHeaders::copy_header_fields(HTTPHdr*, HTTPHdr*, bool, long) 7209 0.6091 traffic_server HttpTransact::HandleRequest(HttpTransact::State*) 7184 0.6070 traffic_server HostDBProcessor::getbyname_imm(Continuation*, void (Continuation::*)(HostDBInfo*), char*, int, int, int, int) 7179 0.6066 traffic_server HttpTransact::client_result_stat(HttpTransact::State*, long, long) 7050 0.5957 traffic_server HttpTransact::initialize_state_variables_from_response(HttpTransact::State*, HTTPHdr*) Shaun -----Original Message----- From: Leif Hedstrom [mailto:zw...@apache.org] Sent: Thursday, October 20, 2011 1:53 AM To: dev@trafficserver.apache.org Cc: Shaun McGinnity Subject: Re: Performance impact of transform plugin On 10/18/2011 11:19 AM, Shaun McGinnity wrote: > Hi, > > We have run some performance tests using the null-plugin transform example. > > The test is a simple forward-proxy configuration fetching content from > servers on our internal network. > > With no plugins loaded traffic server runs at ~40% CPU. When we enable the > plugin the CPU usage jumps to ~50% for the same transaction rate. > > Is this increase in CPU to be expected? It seems rather large for a transform > that is just reading and writing data. > > Any advice is appreciated. > I suspect this is as expected, but I'd have to do some tests myself (but feel free to do some valgrind/callgrind tests to get some ideas). There is going to be overhead doing a transform, because it enabled additional code in the processing of the response bodies, regardless if it's a "no-op" or not. -- leif