You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@trafficserver.apache.org by "James Peach (JIRA)" <ji...@apache.org> on 2016/10/05 04:54:20 UTC

[jira] [Commented] (TS-4924) Protocol plugin performance penalty

    [ 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)