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

Reply via email to