[ https://issues.apache.org/jira/browse/TS-880?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13086737#comment-13086737 ]
mohan_zl commented on TS-880: ----------------------------- @William 1. I think function initialize_thread_for_net will assign value for trigger_event and signal_hook. 2. When i test your first patch, i found it will crash, and from the debug info, i found when the second time a thread use the connection which the last thread created, it will cause two thread switch, so i just add a "thread = t" in your do_reown_to_this_thread function, and change some function name. In my test environment, it do solve the problem. It seems odd, what is your test version? I use the latest trunk. 3. Agree with you, try3 is the perfect patch so far. weijin always solve one problem with only a few lines, i admire him... > Major performance problem with second request on same keep-alive connection > --------------------------------------------------------------------------- > > Key: TS-880 > URL: https://issues.apache.org/jira/browse/TS-880 > Project: Traffic Server > Issue Type: Bug > Components: HTTP > Affects Versions: 3.0.0, 2.1.4 > Environment: 32-bit TS on linux, using epoll. With > proxy.config.http.keep_alive_enabled_out = 1 > Reporter: William Bardwell > Assignee: William Bardwell > Fix For: 3.1.0 > > Attachments: performance.try3.diff, performance_2nd_req.diff, > performance_2nd_req_another_version.patch, performance_2nd_req_try2.diff > > > If I load the same URL through TS twice in a row to a server with keep-alives > turned on I get really slow performance on the second request. > E.g. (loading 212M over loopback with uncachable content, but results are > similar with cachable content): > % Total % Received % Xferd Average Speed Time Time Time > Current > Dload Upload Total Spent Left Speed > 100 212M 100 212M 0 0 140M 0 0:00:01 0:00:01 --:--:-- > 142M* > % Total % Received % Xferd Average Speed Time Time Time > Current > Dload Upload Total Spent Left Speed > 100 212M 100 212M 0 0 6397k 0 0:00:34 0:00:34 --:--:-- > 6400k* > If I turn off proxy.config.http.keep_alive_enabled_out the problem goes away, > it can also be partially solved by making proxy.config.io.max_buffer_size > really big (but it needs to be bigger for larger content, and that supports > the comment below, and proves that it isn't the origin server's fault.) > When I turn on debug messages it looks like the IO loop for the second > request only wakes up every 10ms (when an epoll_wait times out) and then it > reads and writes, for the first request it goes much faster without those > pauses. My theory is that the issue is related to the the fact that the > outgoing connection fd gets added to the epoll fd for the thread handling the > first request and the first user agent fd is added to the same epoll fd, and > it stays on that epoll fd. But the new user agent request is on a different > epoll fd which I assume means is tied to a different thread. -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira