[
https://issues.apache.org/jira/browse/TS-4924?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15547668#comment-15547668
]
James Peach commented on TS-4924:
---------------------------------
According to Instruments, these are the heaviest stacks for the two cases. I
would need to spend more time to make sure that I'm using the tools correctly,
but it does seem plausible:
*Port 8080 (native ATS)*
{noformat}
21 12765.0 EThread::execute 0x16b649 :0
20 libtsutil.7.dylib 4668.0 freelist_free(_InkFreeList*, void*)
/Users/jpeach/src/trafficserver.git/lib/ts/ink_queue.cc:277
19 libtsutil.7.dylib 4668.0 ink_freelist_free
/Users/jpeach/src/trafficserver.git/lib/ts/ink_queue.cc:267
18 traffic_server 3929.0 Allocator::free_void(void*)
../lib/ts/Allocator.h:134
17 traffic_server 2480.0 HttpSM::destroy()
/Users/jpeach/src/trafficserver.git/proxy/http/HttpSM.cc:360
16 traffic_server 2480.0 HttpSM::kill_this()
/Users/jpeach/src/trafficserver.git/proxy/http/HttpSM.cc:6732
15 traffic_server 2480.0 HttpSM::main_handler(int, void*)
/Users/jpeach/src/trafficserver.git/proxy/http/HttpSM.cc:2629
14 traffic_server 2480.0 Continuation::handleEvent(int, void*)
../iocore/eventsystem/I_Continuation.h:152
13 traffic_server 2480.0 HttpTunnel::main_handler(int, void*)
/Users/jpeach/src/trafficserver.git/proxy/http/HttpTunnel.cc:1632
12 traffic_server 2480.0 Continuation::handleEvent(int, void*)
../iocore/eventsystem/I_Continuation.h:153
11 traffic_server 2480.0 write_signal_and_update(int, UnixNetVConnection*)
/Users/jpeach/src/trafficserver.git/iocore/net/UnixNetVConnection.cc:171
10 traffic_server 2480.0 write_signal_done(int, NetHandler*,
UnixNetVConnection*)
/Users/jpeach/src/trafficserver.git/iocore/net/UnixNetVConnection.cc:214
9 traffic_server 2480.0 write_to_net_io(NetHandler*, UnixNetVConnection*,
EThread*)
/Users/jpeach/src/trafficserver.git/iocore/net/UnixNetVConnection.cc:419
8 traffic_server 2480.0 write_to_net(NetHandler*, UnixNetVConnection*,
EThread*)
/Users/jpeach/src/trafficserver.git/iocore/net/UnixNetVConnection.cc:408
7 traffic_server 2480.0 NetHandler::mainNetEvent(int, Event*)
/Users/jpeach/src/trafficserver.git/iocore/net/UnixNet.cc:385
6 traffic_server 2480.0 Continuation::handleEvent(int, void*)
../iocore/eventsystem/I_Continuation.h:152
5 traffic_server 2480.0 EThread::process_event(Event*, int)
/Users/jpeach/src/trafficserver.git/iocore/eventsystem/UnixEThread.cc:131
4 traffic_server 2480.0 EThread::execute()
/Users/jpeach/src/trafficserver.git/iocore/eventsystem/UnixEThread.cc:177
{noformat}
*Port 9090 (passthru protocol plugin)*
{noformat}
24 libtsutil.7.dylib 88.0 freelist_free(_InkFreeList*, void*)
/Users/jpeach/src/trafficserver.git/lib/ts/ink_queue.cc:277
23 libtsutil.7.dylib 88.0 ink_freelist_free
/Users/jpeach/src/trafficserver.git/lib/ts/ink_queue.cc:267
22 traffic_server 86.0 Allocator::free_void(void*) ../lib/ts/Allocator.h:134
21 traffic_server 77.0 IOBufferData::dealloc()
../iocore/eventsystem/P_IOBuffer.h:304
20 traffic_server 77.0 IOBufferData::free()
../iocore/eventsystem/P_IOBuffer.h:330
19 traffic_server 76.0 Ptr<IOBufferBlock>::operator=(IOBufferBlock*)
../lib/ts/Ptr.h:222
18 traffic_server 76.0 IOBufferBlock::clear()
../iocore/eventsystem/P_IOBuffer.h:418
17 traffic_server 76.0 IOBufferBlock::dealloc()
../iocore/eventsystem/P_IOBuffer.h:462
16 traffic_server 76.0 IOBufferBlock::free()
../iocore/eventsystem/P_IOBuffer.h:468
15 traffic_server 73.0 Ptr<IOBufferBlock>::operator=(IOBufferBlock*)
../lib/ts/Ptr.h:222
14 traffic_server 22.0 IOBufferReader::clear()
../iocore/eventsystem/P_IOBuffer.h:709
13 traffic_server 22.0 MIOBuffer::dealloc_reader(IOBufferReader*)
../iocore/eventsystem/P_IOBuffer.h:1143
12 traffic_server 22.0 MIOBuffer::dealloc_all_readers()
../iocore/eventsystem/P_IOBuffer.h:1166
11 traffic_server 22.0 free_MIOBuffer(MIOBuffer*)
../iocore/eventsystem/P_IOBuffer.h:802
10 traffic_server 22.0 PluginVCCore::destroy()
/Users/jpeach/src/trafficserver.git/proxy/PluginVC.cc:1039
9 traffic_server 22.0 PluginVCCore::attempt_delete()
/Users/jpeach/src/trafficserver.git/proxy/PluginVC.cc:1151
8 traffic_server 22.0 PluginVC::process_close()
/Users/jpeach/src/trafficserver.git/proxy/PluginVC.cc:691
7 traffic_server 22.0 PluginVC::main_handler(int, void*)
/Users/jpeach/src/trafficserver.git/proxy/PluginVC.cc:122
6 traffic_server 22.0 Continuation::handleEvent(int, void*)
../iocore/eventsystem/I_Continuation.h:152
5 traffic_server 22.0 EThread::process_event(Event*, int)
/Users/jpeach/src/trafficserver.git/iocore/eventsystem/UnixEThread.cc:131
4 traffic_server 22.0 EThread::execute()
/Users/jpeach/src/trafficserver.git/iocore/eventsystem/UnixEThread.cc:177
{noformat}
> Protocol plugin performance penalty
> -----------------------------------
>
> Key: TS-4924
> URL: https://issues.apache.org/jira/browse/TS-4924
> Project: Traffic Server
> Issue Type: Bug
> Components: Performance, Plugins
> Reporter: James Peach
> Fix For: sometime
>
>
> It looks like protocol plugins take a significant performance penalty
> compared to doing the same work in the code.
> *Configuratation:*
> {noformat}
> [root@fedora-23 ~]# cat /opt/ats/etc/trafficserver/remap.config
> map http://generator.jpeach.org/ http://127.0.0.1/ \
> @plugin=generator.so
> [root@fedora-23 ~]# cat /opt/ats/etc/trafficserver/plugin.config
> passthru.so
> [root@fedora-23 ~]# tail /opt/ats/etc/trafficserver/records.config
> ...
> CONFIG config.plugin.passthru.server_ports STRING 9090
> {noformat}
> *http_load:*
> {noformat}
> http://generator.jpeach.org/cache/1024/1934f6c8-2cd6-46ea-9077-0532528fb1c9
> [vagrant@fedora-23 ~]$ http_load -proxy 127.0.0.1:8080 -parallel 50 -seconds
> 20 -keep_alive 4 url.lst
> {noformat}
> We are using a generator URL of 1K that gets served from cache.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)