https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 Summary: Timeout Product: Swift Version: 0.93 Platform: All OS/Version: Linux Status: NEW Severity: normal Priority: P2 Component: Providers AssignedTo: [email protected] ReportedBy: [email protected] CC: [email protected], [email protected], [email protected] Brief Desc: When running Swift catsn example from bridled to OSG via coasters and provider staging, after about 5-15 minutes, Swift throws a timeout exception. This is followed by a series of "handling reply timeout" messages during which the workflow progress seems to have been halted. The same progress status message continues on the screen. Setup: provider staging; manual coasters; passive submit-host: bridled.ci.uchicago.edu data source: /gpfs/pads data destination: /gpfs/pads execution site: OSG site "UCR" worker submission: Condor GlideinWMS Application: catsn Jobs: 100 data size: 10MB per catsn Error message: Timeout org.globus.cog.karajan.workflow.service.TimeoutException: Handler(78, PUT): timed out receiving request. Last time 940817-011255.807, now: 120119-113300.193 at org.globus.cog.karajan.workflow.service.handlers.RequestHandler.handleTimeout(RequestHandler.java:124) at org.globus.cog.karajan.workflow.service.channels.AbstractKarajanChannel.checkTimeouts(AbstractKarajanChannel.java:131) at org.globus.cog.karajan.workflow.service.channels.AbstractKarajanChannel.checkTimeouts(AbstractKarajanChannel.java:123) at org.globus.cog.karajan.workflow.service.channels.AbstractKarajanChannel$1.run(AbstractKarajanChannel.java:116) at java.util.TimerThread.mainLoop(Timer.java:512) at java.util.TimerThread.run(Timer.java:462) Command(267, HEARTBEAT): handling reply timeout; sendReqTime=120119-133503.813, sendTime=691231-180000.000, now=120119-133704.275, channel=SC-null Service log: http://ci.uchicago.edu/~ketan/timeout-bug-service.log Service stdout: http://ci.uchicago.edu/~ketan/timeout-bug-service.out Worker log: http://ci.uchicago.edu/~ketan/timeout_worker_log.txt -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 Michael Wilde <[email protected]> changed: What |Removed |Added ---------------------------------------------------------------------------- Priority|P2 |P1 Status|NEW |ASSIGNED CC| |[email protected] Severity|normal |critical --- Comment #1 from Michael Wilde <[email protected]> 2012-01-25 08:41:56 --- Ketan, your initial decsription is good. Mihael, are you able to reproduce this? If not, Ketan, please try to replicate this in in script that doesnt use GWMS, and ideally can be run between local systems. If not, then between the easiest/fastest set of remote systems possible. The sooner Mihael can actual reproduce the problem the sooner it can be fixed. -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #2 from ketan <[email protected]> 2012-01-25 09:04:08 --- Here is a link to a spreadsheet that describes what happens running a catsn Swift example relavant to this bug: https://docs.google.com/spreadsheet/ccc?key=0AmvYSwENKFY9dHpuM1NQQlZ5VS1idGs... -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #3 from David Kelly <[email protected]> 2012-02-07 11:01:41 --- Ketan, I'm trying again to reproduce this issue using the MCS workstations. In the example you mention, you were using 100 10MB files. Can you please tell me approximately how many tasks were active at once, and the number of nodes you were using? Thanks, David -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #4 from ketan <[email protected]> 2012-02-07 11:50:26 --- (In reply to comment #3)
Ketan,
I'm trying again to reproduce this issue using the MCS workstations. In the example you mention, you were using 100 10MB files. Can you please tell me approximately how many tasks were active at once, and the number of nodes you were using?
About 40 tasks on 10 nodes.
Thanks, David
-- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #5 from David Kelly <[email protected]> 2012-02-08 16:21:25 --- Ketan, I tried running several more tests today on MCS. I tried 100 files x 10MB, then increased to 1000 files x 10MB, and then finally 10000 files x 10MB. These were run with similar throttle values/#nodes. All these tests completed. One obvious difference in this setup is the network speed. The MCS workstations are all connected via very high speed network connections. I will try running some tests tonight from my home internet to MCS and see what happens. Do you have any other ideas on possible setup differences? Are you running the latest/official 0.93 release, or 0.93.1? Can you please also send the sites.xml, cf, tc.data, and the version of catsn you are running? Thanks, David -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #6 from ketan <[email protected]> 2012-02-08 20:09:24 --- Try going from Bridled to MCS, manual coasters, service on Bridled and workers on 10 mcs workstations. That is how I reproduced this on MCS. (In reply to comment #5)
Ketan,
I tried running several more tests today on MCS. I tried 100 files x 10MB, then increased to 1000 files x 10MB, and then finally 10000 files x 10MB. These were run with similar throttle values/#nodes. All these tests completed.
One obvious difference in this setup is the network speed. The MCS workstations are all connected via very high speed network connections. I will try running some tests tonight from my home internet to MCS and see what happens.
Do you have any other ideas on possible setup differences? Are you running the latest/official 0.93 release, or 0.93.1? Can you please also send the sites.xml, cf, tc.data, and the version of catsn you are running?
Thanks, David
-- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #7 from David Kelly <[email protected]> 2012-02-09 09:54:21 --- I can reproduce this pretty reliably now by doing the following steps: 1) Login to communicado 2) Ensure you have the following environment variables defined: GLOBUS_HOSTNAME=communicado.ci.uchicago.edu GLOBUS_TCP_SRC_RANGE=50000,51000 GLOBUS_TCP_PORT_RANGE=50000,51000 Firewall restrictions will prevent connections outside of this port range. 3) Start coaster service. 4) Run a dummy swift script, then start workers on each of the 10 MCS workstations - crush, thwomp, stomp, crank, steamroller, grind, churn, trounce, thrash, and vanquish. Note: the order of this is important. If you start the workers before running your first script, you will only get 1 worker per node - see bug #467. 5) cd /autonfs/gpfs-pads/projects/CI-CCR000013/davidk/coaster-stress-tests 6) swift -sites.file sites.xml -tc.file tc.data -config cf catsn_random.swift. The error should occur within 10 minutes. There are 500 files in the data directory, each 10MB. This seems to be enough to consistently cause failures. Here are the logs from my latest run this morning: Swift log: http://www.ci.uchicago.edu/~davidk/logs/catsncommunicado_to_mcs.log.gz Coaster service log: http://www.ci.uchicago.edu/~davidk/logs/coaster-communicado_to_mcs.log.gz Worker logs: http://www.ci.uchicago.edu/~davidk/logs/communicado-to-mcs_worker_logs.tar.g... -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 Michael Wilde <[email protected]> changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|Timeout |Timeout in coaster provider | |staging -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #8 from Mihael Hategan <[email protected]> 2012-02-10 12:54:18 --- I'm probably going to need worker logs at DEBUG level, timestamps on the service log and DEBUG enabled on coaster stuff (that also goes for the swift log). -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #9 from David Kelly <[email protected]> 2012-02-10 14:34:44 --- Mihael, I increased the level of debugging for these logs. http://www.ci.uchicago.edu/~davidk/logs/catsn_random-20120210-1410-ry1ubdca.... http://www.ci.uchicago.edu/~davidk/logs/service-20120210-1410-ry1ubdca.log.g... http://www.ci.uchicago.edu/~davidk/logs/workers-20120210-1410-ry1ubdca.tar.g... Please let me know if it would be useful to add anything else. These are all the coaster related settings in my log4j: log4j.logger.org.globus.cog.abstraction.coaster.rlog=DEBUG log4j.logger.org.globus.cog.abstraction.impl.file.coaster=DEBUG log4j.logger.org.globus.cog.karajan.workflow.service.commands=DEBUG log4j.logger.org.globus.cog.karajan.workflow.service.handlers=DEBUG log4j.logger.org.globus.cog.karajan.workflow.service.channels.PerformanceDiagnosticInputStream=DEBUG log4j.logger.org.globus.cog.karajan.workflow.service.channels.PerformanceDiagnosticOutputStream=DEBUG log4j.logger.org.globus.cog.abstraction.impl.file.coaster=DEBUG log4j.logger.org.globus.cog.karajan.workflow.service.channels=DEBUG log4j.logger.org.globus.cog.karajan.workflow.service.commands.HeartBeatCommand=DEBUG log4j.logger.org.globus.cog.abstraction.impl.file.coaster.buffers.ThrottleManager=DEBUG log4j.logger.org.globus.cog.karajan.workflow.service.handlers.RequestHandler=DEBUG -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #10 from Mihael Hategan <[email protected]> 2012-02-10 20:23:21 --- Looks like everything just stops at around 14:11. Can you send me jstacks of swift and the coaster service when timeouts start to occur? -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #11 from David Kelly <[email protected]> 2012-02-10 21:57:53 --- These are the jstacks for swift and the coaster-service after the timeouts started: http://www.ci.uchicago.edu/~davidk/logs/service-jstack.log http://www.ci.uchicago.edu/~davidk/logs/swift-jstack.log -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #12 from Mihael Hategan <[email protected]> 2012-02-11 13:32:52 --- I looks like one of the workers stops processing data and things get filled up on the service side. The system should be robust to individual worker lockups and be able to continue working with the good workers. I'll start cooking up a solution, but we should probably also look at why the worker stops working. In this case, the bad worker is the one on thwomp. You can see how the "bad behaviour" looks like by looking at the last lines of its log. It might be useful if, when you see something like that again, get a stack trace of such a worker with gdb. -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #13 from David Kelly <[email protected]> 2012-02-12 23:46:13 --- I ran the tests again tonight to have some more reference points. I removed a few of the worker sites due to full disks. Logs are at: http://www.ci.uchicago.edu/~davidk/logs/timeout-20120212-2245-qq1maf8f.tar.g... -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #14 from Mihael Hategan <[email protected]> 2012-02-13 20:08:03 --- I keep looking at these logs and keep wondering how it can be that the service sees the TCP connections as going bad (no route to host, connection timed out, etc.) So I'm trying to distinguish between a genuine network problem and the workers dying. There is nothing in the worker logs that would suggest that they are dying, but that information typically goes on stdout. However, since these workers are started manually, that's not in the service log. So do you happen to have the stdout/stderr of the workers? -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #15 from David Kelly <[email protected]> 2012-02-14 10:44:41 --- Here is a run from this morning which should include the stdout and stderr from worker.pl. There is not too much in those logs except this: Failed to process data: at /sandbox/davidk/worker.pl line 788. The full logs are at: http://www.ci.uchicago.edu/~davidk/logs/catsn-20120214-1006-a9xg3oi8.tar.gz -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #16 from Mihael Hategan <[email protected]> 2012-02-14 12:13:07 --- The workers aren't dying. As far as I can tell, all that is left is something that prevents network packets from flowing properly. It looks completely unrelated to the code. Only triggered by it somehow. Can you ask the admin folks for system logs surrounding the time of the run and whether there are any local firewall rules related to network traffic? -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #17 from David Kelly <[email protected]> 2012-02-14 14:13:09 --- An email has been sent to MCS and CI support for help in tracking down any possible network connectivity issues. -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #18 from David Kelly <[email protected]> 2012-02-15 12:05:35 --- I can reproduce this issue now using only 1 worker host and 1 worker per node. I see it in both 0.93 and trunk. This morning I wanted to test and see if I could reproduce issues with large file transfers between thwomp and communicado using only netcat. I created a single large data file which is approximately 5 gigs. On communicado: $ cat /autonfs/gpfs-pads/projects/CI-CCR000013/davidk/largefile |nc -l 50009 On thwomp: $ nc communicado.ci.uchicago.edu 50009 > data.out The transfer starts and typically completes somewhere on the range of 1-3 gigs. Then it freezes and no more progress is made. I have sent this information to MCS network and CI support. -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #19 from Mihael Hategan <[email protected]> 2012-02-15 12:10:09 --- Nice! I was going to suggest removing swift/coasters from the equation, but clearly you are ahead of me on this one. -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #20 from David Kelly <[email protected]> 2012-02-15 15:06:38 --- The issues I have been seeing between the MCS workstations and communicado have been resolved. Corby Schmitz at MCS network support has been working with me on this issue. After his modifications to some firewall rules, my netcat tests complete. I re-ran the Swift test, and for the first time ever, it has successfully completed all 500 tasks. One thing that is unclear to me at the moment is the scope of these changes. I am not sure if these changes are limited to traffic between MCS and CI, or if it affects all traffic to/from communicado. I explained to him how we have seen similar situations with workers running on OSG. I'm waiting to hear back about this. Here is the original email from Corby. ---- This is very helpful information. I am taking a diagnostic step to see if we can isolate the problem. I have created a set of firewall rules to bypass the reflexive rules we have in place. They are prone to problems with long-term transfers of this nature. The rules are as follows: CHANGE: vlan-808-incoming CHANGE: diff from archive copy to push copy CHANGE: 13a14 CHANGE: > permit tcp any host 128.135.125.17 range 50000 51000 CHANGE: vlan-808-outgoing CHANGE: diff from archive copy to push copy CHANGE: 60a61 CHANGE: > permit tcp host 128.135.125.17 range 50000 51000 any This covers all the servers you initially listed. Can you run your netcat test again and let me know how the results pan out? -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #21 from David Kelly <[email protected]> 2012-02-15 15:13:44 --- It looks like his change only affects transfers between MCS and CI, but perhaps this might provide some insight on what is happening in other situations. --- this would affect only connections sourced from MCS server net (140.221.8.0-140.221.9.255). It has to do with long-term transfers. The longer a transfer continues via TCP, the larger the window size becomes. At some point, the ACKs coming back from the client which keep the dynamic rule in place (reflexive ACLs and stateful firewalls work in a similar way) time out. This cuts off the flow of data from the server to client, which then sees no traffic, times out and the application becomes unhappy. By bypassing the dynamic portion, we keep the flow of traffic happy. -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #22 from Mihael Hategan <[email protected]> 2012-02-15 15:24:02 --- Can you ask Corby why they are doing this in the first place? Is it to optimize the TCP window size? -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #23 from David Kelly <[email protected]> 2012-02-15 15:51:24 --- (In reply to comment #22)
Can you ask Corby why they are doing this in the first place? Is it to optimize the TCP window size?
Here is the reply I received. His email is schmitz at anl.gov if you would like to discuss it with him more. --- I need some context? Is the "they" in that message directed at MCS? If so, the answer has nothing to do with optimizing anything. It is a function of finite resources in security appliances. If the "they" is some other organization, I can't comment until I have the details. --- -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #24 from Michael Wilde <[email protected]> 2012-02-15 18:58:44 --- Ketan, can you coordinate with David regarding what data transfer endpoints your tests were failing with, and whether, based on the latest info posted to this ticket, you might now be able to run? David, Mihael: I dont understand the last few entries in this ticket regarding whether we know why coaster provider staging transfers were failing in the SCEC runs. It seems only firewall settings at Argonne were changed. David and I discussed some tests to try to recreate the problem between other WAN-connected endpoints, and also seeing is manually setting a TCO window size on the connection might help. -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #25 from David Kelly <[email protected]> 2012-02-20 09:36:21 --- Since the firewall modifications made last week only affected communication between communicado and the MCS, I found that I could still reproduce similar timeouts between engage-submit3 and MCS. I used this to test adjusting TCP window sizes. Netcat did not provide an easy way to adjust window sizes, so I wrote my own client/server test applications. I wrote a test client and server in Perl, Java, and C. This was to ensure that the we weren't running into any weird language-specific issues with worker.pl or coaster-service. The behaviors seemed pretty consistent among all three. After the sockets were created, setsockopt was used to modify the values of SO_RCVBUF and SO_SNDBUF. The values were modified on on both the client (thwomp) and server (engage). Once a client connected, the server attempted to transfer 5 gigabytes of data. The first column in the table below represents the values passed to SO_RCVBUF and SO_SNDBUF. The Linux kernel will take these values and then double it to reserve space for various metadata. The second column shows the actual amount of data that got transferred before freezing. When file transfers fail, no errors are reported by either the client or server - the data simply stops flowing and will sit there indefinitely unless killed. Here are the results: ____________________________ | Window | Data Xfered | +------------+-------------+ | 1024 | 1M | | 2048 | 2M | | 4096 | 5M | | 8192 | 27M | | 16384 | 19M | | 32768 | 84M | | 65536 | 62M | | 131072 | 71M | | 262144 | 64M | | 524288 | 124M | | 1048576 | 64M | | 2097152 | 78M | | 4194304 | 49M | | Auto | 2.9GB | +--------------------------+ One theory we had going into this was that setting a small window size may help. The opposite appears to be true - small window sizes seem to make the problem worse. Increasing the window size beyond 32K does not seem to make much difference. Allowing the TCP windows to scale as needed resulted in the best performance and came closest to completing the transfer. Beyond adjusting the window sizes, I also experimented with TCP_NODELAY(Nagle algorithm) and TCP_CORK with no luck. I don't think this is fixable from the application. I will try to reproduce this now directly on OSG. If the problem ends up being a similar firewall issue on an OSG worker(s), we can try to identify those sites, contact the network administrators or blacklist them. (tl;dr - Nothing we can do to fix broken firewalls) -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #26 from Michael Wilde <[email protected]> 2012-02-20 13:14:13 --- David, doesnt this experiment contradict what Corby described? Ie, I though he said that the window kept *growing* and then the firewall shut down the connection. Can you work with him to see what the firewall is saying when you run this latest test? -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #27 from Mihael Hategan <[email protected]> 2012-02-20 13:17:52 --- I agree with Mike. This seems to contradict our picture of what's going on. Can you also CC me in the discussion with Corby? -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #28 from David Kelly <[email protected]> 2012-02-21 10:41:14 --- I will email Corby today. Setting SO_SNDBUF and SO_RCVBUF are only suggestions to the kernel about how to set the window size. I don't have the information about what is actually happening at that level yet. I will run a packet sniffer to see how these suggestions actually affect the tcp window size. To run the packet sniffer I needed root access, so I am using my laptop as a server, and thwomp as the client. I am using my internet connection from home to bypass the Argonne firewall so that clients can connect to my server. I will send an update when I have some more results. -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #29 from David Kelly <[email protected]> 2012-02-21 15:13:19 --- I have finished re-running the socket tests while recording all packets with tcpdump/wireshark. I wrote a perl script to extract the window sizes of each packet to see what is actually happening for each test. There are a few things that jump out while looking at the data. When no socket options are specified, it looks exactly like what we thought - as the file transfer progresses, the window size increases. It seems plausible that this could be causing some issues. http://skynetdevelopment.com/network_tests/auto.png When I set SO_SNDBUF and SO_RCVBUF, the kernel seems to be honoring that request. Window sizes are no larger than double the value I request. There is no tcp window scaling happening here at all, but the transfer still freezes. There also seems to be a correlation between the window size and the total number of packets successfully sent. When SNDBUF and RCVBUF are 1024, the least number of packets transfer successfully before freezing. As I increase those values, the number of packets successfully transferred increases too. This pattern continues until a SNDBUF and RCVBUF reach 64K. http://skynetdevelopment.com/network_tests/under64k.png When SNDBUF and RCVBUF values are between 64K and 4096K, the window size stays at 64K. It seems to have no effect within this range. http://skynetdevelopment.com/network_tests/over64k.png I am passing along this information now. -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #30 from David Kelly <[email protected]> 2012-02-24 16:57:08 --- I wrote a test to simulate the SCEC workflow. Each task stages in 200MB, sleeps, then stages out 10MB. I ran this on OSG with about 200 active workers and saw the timeouts. I tried the same test on MCS and saw the same timeout failure. I scaled it down to the point where I can see timeouts using only 1 workers with 4 jobs per node. The logs for my latest run can be found at http://www.ci.uchicago.edu/~davidk/logs/pcatsn-pm802hl8.tar.gz (the CI site has been up and down all day, but the data should be there when it returns) Also, this can be reproduced even more simply by starting swift, coaster-service and worker.pl on the same machine (set jobs per node = 4). Staging out seems more likely to trigger these freezes than staging in. The freezes seem to happen at the very beginning of the staging out. The file often gets created, but is 0 bytes. Right before the freezes start, I see a large amount of packets with a 0-byte window size. It never recovers.. nothing else gets sent. Sidenote: Would coasters benefit from using two connections - one for control commands, and one for data? This is very similar to what FTP does. The control channel would be used for simple commands and heartbeats. The data channel would be used for transferring files only. I think it might also help in terms of performance. On the control channel you would want smaller, more frequent packets and TCP_NO_DELAY. On the data channel, you would want larger packets and more optimization. -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #31 from Mihael Hategan <[email protected]> 2012-04-04 00:31:42 --- I remember you having a jstack output for this. Going back to the emails, the link doesn't work any more. Is there a chance you can find it? I've been trying to reproduce it locally but... stuff like openssl 1.0.0 doesn't export private keys in a format that the globus proxy utilities understand... I'd rather skip that for now. -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #32 from David Kelly <[email protected]> 2012-04-04 01:58:46 --- Here is a recent jstack from using provider staging with 0.93 on MCS ( also can be found at http://www.ci.uchicago.edu/~davidk/logs/jstack-staging.log ) 2012-04-04 01:54:16 Full thread dump Java HotSpot(TM) 64-Bit Server VM (21.1-b02 mixed mode): "Attach Listener" daemon prio=10 tid=0x0000000000ce7000 nid=0x7906 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "Timer-3" daemon prio=10 tid=0x0000000000c5e800 nid=0x42ff in Object.wait() [0x00007ff3e6839000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) at java.util.TimerThread.mainLoop(Timer.java:552) - locked <0x000000078812cb00> (a java.util.TaskQueue) at java.util.TimerThread.run(Timer.java:505) Locked ownable synchronizers: - None "I/O Queue" daemon prio=10 tid=0x0000000000d9d800 nid=0x42f9 in Object.wait() [0x00007ff3e693a000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) at org.globus.cog.abstraction.impl.file.coaster.buffers.Buffers.run(Buffers.java:178) - locked <0x0000000788150000> (a org.globus.cog.abstraction.impl.file.coaster.buffers.Buffers) Locked ownable synchronizers: - None "I/O Queue" daemon prio=10 tid=0x0000000000d9c800 nid=0x42f8 in Object.wait() [0x00007ff3e6a3b000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) at org.globus.cog.abstraction.impl.file.coaster.buffers.Buffers.run(Buffers.java:178) - locked <0x0000000788148518> (a org.globus.cog.abstraction.impl.file.coaster.buffers.Buffers) Locked ownable synchronizers: - None "Sender WorkerChannel" daemon prio=10 tid=0x0000000000d98800 nid=0x42f7 runnable [0x00007ff3e6b3c000] java.lang.Thread.State: RUNNABLE at java.net.SocketOutputStream.socketWrite0(Native Method) at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109) at java.net.SocketOutputStream.write(SocketOutputStream.java:141) at org.globus.cog.karajan.workflow.service.channels.AbstractStreamKarajanChannel$Sender.send(AbstractStreamKarajanChannel.java:331) - locked <0x0000000788148648> (a java.net.SocketOutputStream) at org.globus.cog.karajan.workflow.service.channels.AbstractStreamKarajanChannel$Sender.run(AbstractStreamKarajanChannel.java:273) Locked ownable synchronizers: - None "PullThread" daemon prio=10 tid=0x0000000000da2800 nid=0x42f6 in Object.wait() [0x00007ff3e6c3d000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) at org.globus.cog.abstraction.coaster.service.job.manager.PullThread.mwait(PullThread.java:118) at org.globus.cog.abstraction.coaster.service.job.manager.PullThread.run(PullThread.java:89) - locked <0x00000007881500a0> (a org.globus.cog.abstraction.coaster.service.job.manager.PullThread) Locked ownable synchronizers: - None "Timer-2" daemon prio=10 tid=0x0000000000c82800 nid=0x40e2 in Object.wait() [0x00007ff3e6d3e000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x0000000788160080> (a java.util.TaskQueue) at java.lang.Object.wait(Object.java:503) at java.util.TimerThread.mainLoop(Timer.java:526) - locked <0x0000000788160080> (a java.util.TaskQueue) at java.util.TimerThread.run(Timer.java:505) Locked ownable synchronizers: - None "Sender TCPChannel" daemon prio=10 tid=0x00007ff3e80f9800 nid=0x40e1 waiting on condition [0x00007ff3e6e3f000] java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for <0x00000007881ce090> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043) at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442) at org.globus.cog.karajan.workflow.service.channels.AbstractStreamKarajanChannel$Sender.run(AbstractStreamKarajanChannel.java:265) Locked ownable synchronizers: - None "Channel multiplexer 1" daemon prio=10 tid=0x0000000000d96000 nid=0x40e0 waiting on condition [0x00007ff3e6f40000] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.sleep(Native Method) at org.globus.cog.karajan.workflow.service.channels.AbstractStreamKarajanChannel$Multiplexer.run(AbstractStreamKarajanChannel.java:443) Locked ownable synchronizers: - None "Channel multiplexer 0" daemon prio=10 tid=0x0000000000e8d000 nid=0x40df in Object.wait() [0x00007ff3e7041000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x0000000788148518> (a org.globus.cog.abstraction.impl.file.coaster.buffers.Buffers) at java.lang.Object.wait(Object.java:503) at org.globus.cog.abstraction.impl.file.coaster.buffers.Buffers.request(Buffers.java:140) - locked <0x0000000788148518> (a org.globus.cog.abstraction.impl.file.coaster.buffers.Buffers) at org.globus.cog.abstraction.impl.file.coaster.handlers.providers.ProxyIOProvider$CWriteBuffer.write(ProxyIOProvider.java:423) at org.globus.cog.abstraction.impl.file.coaster.commands.GetFileCommand.addInData(GetFileCommand.java:62) at org.globus.cog.karajan.workflow.service.commands.Command.dataReceived(Command.java:82) at org.globus.cog.karajan.workflow.service.commands.Command.replyReceived(Command.java:86) at org.globus.cog.karajan.workflow.service.channels.AbstractKarajanChannel.handleReply(AbstractKarajanChannel.java:394) at org.globus.cog.karajan.workflow.service.channels.AbstractStreamKarajanChannel.step(AbstractStreamKarajanChannel.java:176) at org.globus.cog.karajan.workflow.service.channels.AbstractStreamKarajanChannel$Multiplexer.run(AbstractStreamKarajanChannel.java:404) Locked ownable synchronizers: - None "Timer-1" daemon prio=10 tid=0x0000000000e93800 nid=0x40de in Object.wait() [0x00007ff3e7142000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) at java.util.TimerThread.mainLoop(Timer.java:552) - locked <0x0000000788160108> (a java.util.TaskQueue) at java.util.TimerThread.run(Timer.java:505) Locked ownable synchronizers: - None "Passive Queue Processor" prio=10 tid=0x0000000000e3b800 nid=0x3de0 in Object.wait() [0x00007ff3e7243000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) at org.globus.cog.abstraction.coaster.service.job.manager.BlockQueueProcessor.run(BlockQueueProcessor.java:116) - locked <0x0000000788160238> (a java.util.ArrayList) Locked ownable synchronizers: - None "Local Queue Processor" prio=10 tid=0x0000000000e3e000 nid=0x3ddf in Object.wait() [0x00007ff3e7344000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000007881602c8> (a org.globus.cog.karajan.util.Queue) at java.lang.Object.wait(Object.java:503) at org.globus.cog.karajan.util.Queue.take(Queue.java:46) - locked <0x00000007881602c8> (a org.globus.cog.karajan.util.Queue) at org.globus.cog.abstraction.coaster.service.job.manager.AbstractQueueProcessor.take(AbstractQueueProcessor.java:51) at org.globus.cog.abstraction.coaster.service.job.manager.LocalQueueProcessor.run(LocalQueueProcessor.java:37) Locked ownable synchronizers: - None "Server: http://140.221.9.237:53562" daemon prio=10 tid=0x00007ff3e8342800 nid=0x3dde runnable [0x00007ff3e7445000] java.lang.Thread.State: RUNNABLE at java.net.PlainSocketImpl.socketAccept(Native Method) at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:396) at java.net.ServerSocket.implAccept(ServerSocket.java:522) at java.net.ServerSocket.accept(ServerSocket.java:490) at org.globus.net.BaseServer.run(BaseServer.java:226) at java.lang.Thread.run(Thread.java:722) Locked ownable synchronizers: - None "Server: http://140.221.9.237:55514" daemon prio=10 tid=0x00007ff3e8348000 nid=0x3ddd runnable [0x00007ff3e7546000] java.lang.Thread.State: RUNNABLE at java.net.PlainSocketImpl.socketAccept(Native Method) at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:396) at java.net.ServerSocket.implAccept(ServerSocket.java:522) at java.net.ServerSocket.accept(ServerSocket.java:490) at org.globus.net.BaseServer.run(BaseServer.java:226) at java.lang.Thread.run(Thread.java:722) Locked ownable synchronizers: - None "Timer-0" prio=10 tid=0x00007ff3e8322000 nid=0x3ddc in Object.wait() [0x00007ff3e7882000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) at java.util.TimerThread.mainLoop(Timer.java:552) - locked <0x0000000788160658> (a java.util.TaskQueue) at java.util.TimerThread.run(Timer.java:505) Locked ownable synchronizers: - None "Service Thread" daemon prio=10 tid=0x00007ff3e80d7800 nid=0x3dcd runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "C2 CompilerThread1" daemon prio=10 tid=0x00007ff3e80d5000 nid=0x3dcc waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "C2 CompilerThread0" daemon prio=10 tid=0x00007ff3e80d2000 nid=0x3dcb waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "Signal Dispatcher" daemon prio=10 tid=0x00007ff3e80d0000 nid=0x3dca runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "Finalizer" daemon prio=10 tid=0x00007ff3e807d000 nid=0x3dc9 in Object.wait() [0x00007ff3ec5aa000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000007881782a8> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135) - locked <0x00000007881782a8> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:177) Locked ownable synchronizers: - None "Reference Handler" daemon prio=10 tid=0x00007ff3e807b000 nid=0x3dc8 in Object.wait() [0x00007ff3ec6ab000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x0000000788146130> (a java.lang.ref.Reference$Lock) at java.lang.Object.wait(Object.java:503) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133) - locked <0x0000000788146130> (a java.lang.ref.Reference$Lock) Locked ownable synchronizers: - None "main" prio=10 tid=0x0000000000bec000 nid=0x3db7 in Object.wait() [0x00007ff3f4cb4000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) at org.globus.cog.abstraction.coaster.service.CoasterService.waitFor(CoasterService.java:215) - locked <0x00000007881781b8> (a org.globus.cog.abstraction.coaster.service.CoasterPersistentService) at org.globus.cog.abstraction.coaster.service.CoasterPersistentService.main(CoasterPersistentService.java:153) Locked ownable synchronizers: - None "VM Thread" prio=10 tid=0x00007ff3e8073800 nid=0x3dc7 runnable "GC task thread#0 (ParallelGC)" prio=10 tid=0x0000000000bf7000 nid=0x3db8 runnable "GC task thread#1 (ParallelGC)" prio=10 tid=0x0000000000bf9000 nid=0x3db9 runnable "GC task thread#2 (ParallelGC)" prio=10 tid=0x0000000000bfa800 nid=0x3dba runnable "GC task thread#3 (ParallelGC)" prio=10 tid=0x0000000000bfc800 nid=0x3dbb runnable "GC task thread#4 (ParallelGC)" prio=10 tid=0x0000000000bfe800 nid=0x3dbc runnable "GC task thread#5 (ParallelGC)" prio=10 tid=0x0000000000c00000 nid=0x3dbd runnable "GC task thread#6 (ParallelGC)" prio=10 tid=0x0000000000c02000 nid=0x3dbe runnable "GC task thread#7 (ParallelGC)" prio=10 tid=0x0000000000c04000 nid=0x3dbf runnable "GC task thread#8 (ParallelGC)" prio=10 tid=0x0000000000c05800 nid=0x3dc0 runnable "GC task thread#9 (ParallelGC)" prio=10 tid=0x0000000000c07800 nid=0x3dc1 runnable "GC task thread#10 (ParallelGC)" prio=10 tid=0x0000000000c09800 nid=0x3dc2 runnable "GC task thread#11 (ParallelGC)" prio=10 tid=0x0000000000c0b800 nid=0x3dc3 runnable "GC task thread#12 (ParallelGC)" prio=10 tid=0x0000000000c0d000 nid=0x3dc4 runnable "VM Periodic Task Thread" prio=10 tid=0x00007ff3e80e2800 nid=0x3dce waiting on condition JNI global references: 175 david@rogue:~$ cat jstack-staging.log david@rogue:~$ cat jstack-staging.log 2012-04-04 01:54:16 Full thread dump Java HotSpot(TM) 64-Bit Server VM (21.1-b02 mixed mode): "Attach Listener" daemon prio=10 tid=0x0000000000ce7000 nid=0x7906 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "Timer-3" daemon prio=10 tid=0x0000000000c5e800 nid=0x42ff in Object.wait() [0x00007ff3e6839000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) at java.util.TimerThread.mainLoop(Timer.java:552) - locked <0x000000078812cb00> (a java.util.TaskQueue) at java.util.TimerThread.run(Timer.java:505) Locked ownable synchronizers: - None "I/O Queue" daemon prio=10 tid=0x0000000000d9d800 nid=0x42f9 in Object.wait() [0x00007ff3e693a000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) at org.globus.cog.abstraction.impl.file.coaster.buffers.Buffers.run(Buffers.java:178) - locked <0x0000000788150000> (a org.globus.cog.abstraction.impl.file.coaster.buffers.Buffers) Locked ownable synchronizers: - None "I/O Queue" daemon prio=10 tid=0x0000000000d9c800 nid=0x42f8 in Object.wait() [0x00007ff3e6a3b000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) at org.globus.cog.abstraction.impl.file.coaster.buffers.Buffers.run(Buffers.java:178) - locked <0x0000000788148518> (a org.globus.cog.abstraction.impl.file.coaster.buffers.Buffers) Locked ownable synchronizers: - None "Sender WorkerChannel" daemon prio=10 tid=0x0000000000d98800 nid=0x42f7 runnable [0x00007ff3e6b3c000] java.lang.Thread.State: RUNNABLE at java.net.SocketOutputStream.socketWrite0(Native Method) at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109) at java.net.SocketOutputStream.write(SocketOutputStream.java:141) at org.globus.cog.karajan.workflow.service.channels.AbstractStreamKarajanChannel$Sender.send(AbstractStreamKarajanChannel.java:331) - locked <0x0000000788148648> (a java.net.SocketOutputStream) at org.globus.cog.karajan.workflow.service.channels.AbstractStreamKarajanChannel$Sender.run(AbstractStreamKarajanChannel.java:273) Locked ownable synchronizers: - None "PullThread" daemon prio=10 tid=0x0000000000da2800 nid=0x42f6 in Object.wait() [0x00007ff3e6c3d000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) at org.globus.cog.abstraction.coaster.service.job.manager.PullThread.mwait(PullThread.java:118) at org.globus.cog.abstraction.coaster.service.job.manager.PullThread.run(PullThread.java:89) - locked <0x00000007881500a0> (a org.globus.cog.abstraction.coaster.service.job.manager.PullThread) Locked ownable synchronizers: - None "Timer-2" daemon prio=10 tid=0x0000000000c82800 nid=0x40e2 in Object.wait() [0x00007ff3e6d3e000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x0000000788160080> (a java.util.TaskQueue) at java.lang.Object.wait(Object.java:503) at java.util.TimerThread.mainLoop(Timer.java:526) - locked <0x0000000788160080> (a java.util.TaskQueue) at java.util.TimerThread.run(Timer.java:505) Locked ownable synchronizers: - None "Sender TCPChannel" daemon prio=10 tid=0x00007ff3e80f9800 nid=0x40e1 waiting on condition [0x00007ff3e6e3f000] java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for <0x00000007881ce090> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043) at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442) at org.globus.cog.karajan.workflow.service.channels.AbstractStreamKarajanChannel$Sender.run(AbstractStreamKarajanChannel.java:265) Locked ownable synchronizers: - None "Channel multiplexer 1" daemon prio=10 tid=0x0000000000d96000 nid=0x40e0 waiting on condition [0x00007ff3e6f40000] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.sleep(Native Method) at org.globus.cog.karajan.workflow.service.channels.AbstractStreamKarajanChannel$Multiplexer.run(AbstractStreamKarajanChannel.java:443) Locked ownable synchronizers: - None "Channel multiplexer 0" daemon prio=10 tid=0x0000000000e8d000 nid=0x40df in Object.wait() [0x00007ff3e7041000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x0000000788148518> (a org.globus.cog.abstraction.impl.file.coaster.buffers.Buffers) at java.lang.Object.wait(Object.java:503) at org.globus.cog.abstraction.impl.file.coaster.buffers.Buffers.request(Buffers.java:140) - locked <0x0000000788148518> (a org.globus.cog.abstraction.impl.file.coaster.buffers.Buffers) at org.globus.cog.abstraction.impl.file.coaster.handlers.providers.ProxyIOProvider$CWriteBuffer.write(ProxyIOProvider.java:423) at org.globus.cog.abstraction.impl.file.coaster.commands.GetFileCommand.addInData(GetFileCommand.java:62) at org.globus.cog.karajan.workflow.service.commands.Command.dataReceived(Command.java:82) at org.globus.cog.karajan.workflow.service.commands.Command.replyReceived(Command.java:86) at org.globus.cog.karajan.workflow.service.channels.AbstractKarajanChannel.handleReply(AbstractKarajanChannel.java:394) at org.globus.cog.karajan.workflow.service.channels.AbstractStreamKarajanChannel.step(AbstractStreamKarajanChannel.java:176) at org.globus.cog.karajan.workflow.service.channels.AbstractStreamKarajanChannel$Multiplexer.run(AbstractStreamKarajanChannel.java:404) Locked ownable synchronizers: - None "Timer-1" daemon prio=10 tid=0x0000000000e93800 nid=0x40de in Object.wait() [0x00007ff3e7142000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) at java.util.TimerThread.mainLoop(Timer.java:552) - locked <0x0000000788160108> (a java.util.TaskQueue) at java.util.TimerThread.run(Timer.java:505) Locked ownable synchronizers: - None "Passive Queue Processor" prio=10 tid=0x0000000000e3b800 nid=0x3de0 in Object.wait() [0x00007ff3e7243000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) at org.globus.cog.abstraction.coaster.service.job.manager.BlockQueueProcessor.run(BlockQueueProcessor.java:116) - locked <0x0000000788160238> (a java.util.ArrayList) Locked ownable synchronizers: - None "Local Queue Processor" prio=10 tid=0x0000000000e3e000 nid=0x3ddf in Object.wait() [0x00007ff3e7344000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000007881602c8> (a org.globus.cog.karajan.util.Queue) at java.lang.Object.wait(Object.java:503) at org.globus.cog.karajan.util.Queue.take(Queue.java:46) - locked <0x00000007881602c8> (a org.globus.cog.karajan.util.Queue) at org.globus.cog.abstraction.coaster.service.job.manager.AbstractQueueProcessor.take(AbstractQueueProcessor.java:51) at org.globus.cog.abstraction.coaster.service.job.manager.LocalQueueProcessor.run(LocalQueueProcessor.java:37) Locked ownable synchronizers: - None "Server: http://140.221.9.237:53562" daemon prio=10 tid=0x00007ff3e8342800 nid=0x3dde runnable [0x00007ff3e7445000] java.lang.Thread.State: RUNNABLE at java.net.PlainSocketImpl.socketAccept(Native Method) at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:396) at java.net.ServerSocket.implAccept(ServerSocket.java:522) at java.net.ServerSocket.accept(ServerSocket.java:490) at org.globus.net.BaseServer.run(BaseServer.java:226) at java.lang.Thread.run(Thread.java:722) Locked ownable synchronizers: - None "Server: http://140.221.9.237:55514" daemon prio=10 tid=0x00007ff3e8348000 nid=0x3ddd runnable [0x00007ff3e7546000] java.lang.Thread.State: RUNNABLE at java.net.PlainSocketImpl.socketAccept(Native Method) at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:396) at java.net.ServerSocket.implAccept(ServerSocket.java:522) at java.net.ServerSocket.accept(ServerSocket.java:490) at org.globus.net.BaseServer.run(BaseServer.java:226) at java.lang.Thread.run(Thread.java:722) Locked ownable synchronizers: - None "Timer-0" prio=10 tid=0x00007ff3e8322000 nid=0x3ddc in Object.wait() [0x00007ff3e7882000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) at java.util.TimerThread.mainLoop(Timer.java:552) - locked <0x0000000788160658> (a java.util.TaskQueue) at java.util.TimerThread.run(Timer.java:505) Locked ownable synchronizers: - None "Service Thread" daemon prio=10 tid=0x00007ff3e80d7800 nid=0x3dcd runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "C2 CompilerThread1" daemon prio=10 tid=0x00007ff3e80d5000 nid=0x3dcc waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "C2 CompilerThread0" daemon prio=10 tid=0x00007ff3e80d2000 nid=0x3dcb waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "Signal Dispatcher" daemon prio=10 tid=0x00007ff3e80d0000 nid=0x3dca runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "Finalizer" daemon prio=10 tid=0x00007ff3e807d000 nid=0x3dc9 in Object.wait() [0x00007ff3ec5aa000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000007881782a8> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135) - locked <0x00000007881782a8> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:177) Locked ownable synchronizers: - None "Reference Handler" daemon prio=10 tid=0x00007ff3e807b000 nid=0x3dc8 in Object.wait() [0x00007ff3ec6ab000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x0000000788146130> (a java.lang.ref.Reference$Lock) at java.lang.Object.wait(Object.java:503) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133) - locked <0x0000000788146130> (a java.lang.ref.Reference$Lock) Locked ownable synchronizers: - None "main" prio=10 tid=0x0000000000bec000 nid=0x3db7 in Object.wait() [0x00007ff3f4cb4000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) at org.globus.cog.abstraction.coaster.service.CoasterService.waitFor(CoasterService.java:215) - locked <0x00000007881781b8> (a org.globus.cog.abstraction.coaster.service.CoasterPersistentService) at org.globus.cog.abstraction.coaster.service.CoasterPersistentService.main(CoasterPersistentService.java:153) Locked ownable synchronizers: - None "VM Thread" prio=10 tid=0x00007ff3e8073800 nid=0x3dc7 runnable "GC task thread#0 (ParallelGC)" prio=10 tid=0x0000000000bf7000 nid=0x3db8 runnable "GC task thread#1 (ParallelGC)" prio=10 tid=0x0000000000bf9000 nid=0x3db9 runnable "GC task thread#2 (ParallelGC)" prio=10 tid=0x0000000000bfa800 nid=0x3dba runnable "GC task thread#3 (ParallelGC)" prio=10 tid=0x0000000000bfc800 nid=0x3dbb runnable "GC task thread#4 (ParallelGC)" prio=10 tid=0x0000000000bfe800 nid=0x3dbc runnable "GC task thread#5 (ParallelGC)" prio=10 tid=0x0000000000c00000 nid=0x3dbd runnable "GC task thread#6 (ParallelGC)" prio=10 tid=0x0000000000c02000 nid=0x3dbe runnable "GC task thread#7 (ParallelGC)" prio=10 tid=0x0000000000c04000 nid=0x3dbf runnable "GC task thread#8 (ParallelGC)" prio=10 tid=0x0000000000c05800 nid=0x3dc0 runnable "GC task thread#9 (ParallelGC)" prio=10 tid=0x0000000000c07800 nid=0x3dc1 runnable "GC task thread#10 (ParallelGC)" prio=10 tid=0x0000000000c09800 nid=0x3dc2 runnable "GC task thread#11 (ParallelGC)" prio=10 tid=0x0000000000c0b800 nid=0x3dc3 runnable "GC task thread#12 (ParallelGC)" prio=10 tid=0x0000000000c0d000 nid=0x3dc4 runnable "VM Periodic Task Thread" prio=10 tid=0x00007ff3e80e2800 nid=0x3dce waiting on condition JNI global references: 175 -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #33 from Mihael Hategan <[email protected]> 2012-04-06 00:27:34 --- So this looks like one of the worker sockets is full and not getting any better. We should find out why (1) However, this shows a problem with the way things are implemented: if one of the sockets is blocked, that stops all worker traffic. This can be improved. So I started to rewrite that portion to use selectable NIO channels such that a blocked socket won't affect the other sockets and traffic can still flow on the working sockets (2) I'm doing (2). I need help with (1). -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #34 from Michael Wilde <[email protected]> 2012-04-09 10:40:03 --- (In reply to comment #33)
So this looks like one of the worker sockets is full and not getting any better. We should find out why (1)
Do you mean by this that you've determine that the worker is hanging in the process of staging an output file back to the coaster service?
However, this shows a problem with the way things are implemented: if one of the sockets is blocked, that stops all worker traffic. This can be improved. So I started to rewrite that portion to use selectable NIO channels such that a blocked socket won't affect the other sockets and traffic can still flow on the working sockets (2)
I'm doing (2). I need help with (1).
Before we test with the new NIO-based code, do we already have sufficient worker logs to diagnose (1), or is that what you need when you say "I need help with (1)"? I see from comment #30, David, that you can reproduce this with one worker. Can you reproduce it with jobPerNode=1? Or only with 4 as I think you state in that comment? In either case, would getting a selective strace on the worker, along with DEBUG or TRACE worker logs, help? (Ie just strace IO and Socket syscalls)? Can we tell, when the worker hangs, how far it has gotten in any files it is in the process of staging out to the coaster service (if this is indeed what you think is happening)? -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #35 from Mihael Hategan <[email protected]> 2012-04-09 12:47:20 --- (In reply to comment #34)
(In reply to comment #33)
So this looks like one of the worker sockets is full and not getting any better. We should find out why (1)
Do you mean by this that you've determine that the worker is hanging in the process of staging an output file back to the coaster service?
I determined that the service is stuck writing on a TCP connection to one of the workers.
However, this shows a problem with the way things are implemented: if one of the sockets is blocked, that stops all worker traffic. This can be improved. So I started to rewrite that portion to use selectable NIO channels such that a blocked socket won't affect the other sockets and traffic can still flow on the working sockets (2)
I'm doing (2). I need help with (1).
Before we test with the new NIO-based code, do we already have sufficient worker logs to diagnose (1), or is that what you need when you say "I need help with (1)"?
Why it happens I don't know. That it does happen I do know. From a design standpoint, it is a bad idea for a single worker to be able to freeze the entire system. The NIO implementation addressed just that: if one worker stops reading data from the TCP connection, the other workers (and the rest of the system) continue to work.
I see from comment #30, David, that you can reproduce this with one worker. Can you reproduce it with jobPerNode=1? Or only with 4 as I think you state in that comment?
I could not actually reproduce it on my local machine with jobsPerNode=4.
In either case, would getting a selective strace on the worker, along with DEBUG or TRACE worker logs, help? (Ie just strace IO and Socket syscalls)?
Probably. But before we get to complicated things, maybe the plain worker logs will shed enough light.
Can we tell, when the worker hangs, how far it has gotten in any files it is in the process of staging out to the coaster service (if this is indeed what you think is happening)?
Yes. That information in the worker logs at DEBUG level. -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #36 from David Kelly <[email protected]> 2012-04-09 20:28:25 ---
From another run tonight (on 2 MCS machines, 500 tasks, 10 megs per file, jobs per node=4)
Swift log: http://www.ci.uchicago.edu/~davidk/logs/catsn_random-20120409-1958-cdly3zl6.... Worker log: http://www.ci.uchicago.edu/~davidk/logs/worker-thwomp-20120409.log jstack: http://www.ci.uchicago.edu/~davidk/logs/jstack-20120409.log strace of worker.pl: http://www.ci.uchicago.edu/~davidk/logs/strace-20120409.log.gz -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #37 from David Kelly <[email protected]> 2012-04-09 23:40:44 --- I tried tonight and can still see this problem using only one machine. Here is how I do this: Run this script to create random files (you could also use dd if=/dev/random... here, but it's slower) --- #!/bin/bash if [ -z "$1" ] || [ -z "$2" ]; then echo "Usage: setup.sh <num_files> <size_in_megabytes>" exit 1 fi NUMFILES=$1 FILESIZE=$2 FILESIZE=$(($FILESIZE*1048576)) for count in `seq 1 $NUMFILES` do FILENAME=`mktemp -p data` openssl rand $FILESIZE -out $FILENAME done --- Run as "./setup.sh 100 200" to create 100 200MB files. The swift script -------------------- type file; app (file o) cat (file i) { cat @i stdout=@o; } file input_files[]<filesys_mapper; location="data", pattern="tmp.*">; foreach j in input_files { file output<single_file_mapper; location="data", file=@strcat(@filename(j), ".out")>; output = cat(j); } -------- Also, be sure to run a swift script after the coaster service starts, but before the worker is started. This is the workaround for bug #467. Without this, the value for jobs per node gets set to 1, and the timeouts don't happen. -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #38 from Michael Wilde <[email protected]> 2012-04-11 09:17:03 --- Im adding thsi comment to document several emails describing progress in past 24 hours. Mihael, is the fix to the scenario you describe in the first email below (Tuesday, April 10, 2012 7:04:56 PM) now comitted? David, is that what you tested? Or did this scenario not occur with the new NIO code in place? Also, David: your email below implies that some of these fixes are not in place for automatic coasters, but only for manual (as you say "latest update which fixes coaster-service") Can you both update this ticket to summarize the state of the fixes? Ie, are all the problems identified related to provider staging now fixed for all configs, or is there more known work needed to call this issue resolved? In any case, nice work guys - this is excellent news and excellent progress! - Mike --- ----- Forwarded Message ----- From: "Mihael Hategan" <[email protected]> To: "David Kelly" <[email protected]> Cc: "Swift Devel" <[email protected]> Sent: Tuesday, April 10, 2012 7:04:56 PM Subject: Re: [Swift-devel] coaster io with NIO. On Tue, 2012-04-10 at 17:25 -0500, David Kelly wrote:
Yep, I gave it a try with automatic coasters, but am still seeing the timeouts.
I think I see the problem. With multiple jobs per worker the situation may such be that both a stagein and a stageout happen at the same time (on the same TCP connection). If the stageout runs out of buffers the writing to the socket on the worker side blocks causing the read loop to not happen. This eventually fills the other direction on the TCP link and everything deadlocks. --- ----- Forwarded Message ----- From: "Mihael Hategan" <[email protected]> To: "Michael Wilde" <[email protected]> Cc: "Swift Devel" <[email protected]>, "David Kelly" <[email protected]> Sent: Tuesday, April 10, 2012 9:13:03 PM Subject: Re: [Swift-devel] coaster io with NIO. On Tue, 2012-04-10 at 21:07 -0500, Michael Wilde wrote:
Mihael, while the scenario below seems plausible, I thought that the timeout problem was first detected on OSG nodes, which should have been running with jobsPerNode=1.
It's possible that there is another problem. However, David's latest logs (posted in bug 690) show this: - read from worker socket thread blocked on allocation of buffers - worker blocked in send() (thus unable to recv()). - service blocked in send() to worker Part of this should be addressed by the NIO stuff, so we'll need new logs. --- ----- Forwarded Message ----- From: "Ketan Maheshwari" <[email protected]> To: "Michael Wilde" <[email protected]> Sent: Tuesday, April 10, 2012 9:31:34 PM Subject: Re: [Swift-devel] coaster io with NIO. Jobspernode setting were indeed 1 on the tests done on osg. I do not recall seeing the blocking messages seen by David's current/recent tests. --- ----- Forwarded Message ----- From: "David Kelly" <[email protected]> To: "Michael Wilde" <[email protected]> Cc: "Swift Devel" <[email protected]>, "Ketan Maheshwari" <[email protected]> Sent: Tuesday, April 10, 2012 11:33:20 PM Subject: Re: [Swift-devel] coaster io with NIO. Since the latest update which fixes coaster-service, I have tested with two configurations: 1 machine only, 4 jobs per node, 100 200MB files (ran twice, passed twice) 2 MCS machines - swift and coaster-service running on one machine, 1 worker, 4 jobs per node, 500 20MB files (also ran twice, passed twice) These tests were failing pretty consistently yesterday. I am not positive it is completely fixed yet, but things have definitely improved. I have never been able to reproduce provider staging problems using jobs per node set of 1. It was only when I got to a value of 4 that I started seeing issues. I will write a test tonight that runs on OSG and let you know what happens. David --- ----- Forwarded Message ----- From: "David Kelly" <[email protected]> To: "Michael Wilde" <[email protected]> Cc: "Swift Devel" <[email protected]> Sent: Wednesday, April 11, 2012 1:00:36 AM Subject: Re: [Swift-devel] coaster io with NIO. I just ran a test on OSG similar to what Ketan described in the initial entry for ticket #690: Submit host: communicado using data on GPFS 100 nodes using Condor GlideinWMS 500 jobs 10MB data files The test completed without errors. -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #39 from Mihael Hategan <[email protected]> 2012-04-11 19:29:32 --- (In reply to comment #38)
Im adding thsi comment to document several emails describing progress in past 24 hours.
Mihael, is the fix to the scenario you describe in the first email below (Tuesday, April 10, 2012 7:04:56 PM) now comitted? David, is that what you tested? Or did this scenario not occur with the new NIO code in place?
Partially. There is still a deadlock possible which is mentioned in my email from Tuesday, April 10, 2012 7:04:56 PM. I just (as of a few hours ago) finished re-writing the worker socket read/write loop to use selectors and deal with the situation. I am currently testing this and ironing out the bugs. The NIO stuff is still something necessary to get maximum performance and prevent a single slow/blocked worker from slowing everything down.
Also, David: your email below implies that some of these fixes are not in place for automatic coasters, but only for manual (as you say "latest update which fixes coaster-service")
The fix should be there, but there was a bug present with manual coasters. David isn't seeing the code working because it really needs the updated worker which is not committed yet.
Can you both update this ticket to summarize the state of the fixes? Ie, are all the problems identified related to provider staging now fixed for all configs, or is there more known work needed to call this issue resolved?
As far as I can tell all the problems so far are identified and fixes are in the pipe. Though we won't know for sure until after these fixes are tested.
In any case, nice work guys - this is excellent news and excellent progress!
-- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #40 from David Kelly <[email protected]> 2012-04-12 00:20:14 --- Every test I have ran since r3371 (the second update last night) has passed. I've tried different combinations of systems (locally on my laptop, MCS, communicado, bridled, OSG), different values for jobs per node, and a varying number of tasks. I have tested with automatic and manual coasters. I have only seen two small issues. The first is that GLOBUS_TCP_PORT_RANGE does not seem to be honored. The second is that I am getting a small number of failures, maybe 5% of the total number of tasks, which I did not see before. The tasks fail with exit code 521 (timeout while staging out). But, they will almost always finish on the second try. -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #41 from David Kelly <[email protected]> 2012-04-12 12:46:15 --- coaster-service is dying when trying to run large jobs on OSG. I am attempting to run the cybershake simulation program I wrote. Each task stages in one 15k shell script, and stages out two 20k output files (stdout and stderr). I am testing this with about 6000 tasks and 1000 nodes. I am using 1 job per node. Approximately 3 or 4 hours into the run, the coaster-service application dies. I thought at first this might have been a case of running out of memory since there are so many connections. I increased the coaster-service max heap from 256M to 8096M and reran, but it still died. The service log contains a large amount of IOExceptions and NullPointerExceptions. These errors occur throughout the run, but it keeps making good progress until it suddenly dies hours later. The service log is at http://www.ci.uchicago.edu/~davidk/logs/cps-2012-04-12_09-07-25.log.gz (73 megs compressed, 2.6 gigs uncompressed). -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #42 from Mihael Hategan <[email protected]> 2012-04-12 19:28:10 --- I committed the non-blocking socket I/O worker code (cog trunk r3373). This, together with the NIO stuff, should fix the deadlocking behavior. The NIO stuff by itself should reduce the incidence of deadlocks, so it may have appeared as though it has fixed the issue. -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #43 from Mihael Hategan <[email protected]> 2012-04-12 19:40:12 --- (In reply to comment #41)
The service log contains a large amount of IOExceptions
Those happen when a worker ends because the NIO code didn't properly remove dead channels from the selector. I fixed that yesterday or so.
and NullPointerExceptions.
Those look like some race condition at the start. I'll see if I can reproduce them, but it would be helpful if you could check if it happens all the time or not.
These errors occur throughout the run, but it keeps making good progress until it suddenly dies hours later.
The service log is at http://www.ci.uchicago.edu/~davidk/logs/cps-2012-04-12_09-07-25.log.gz (73 megs compressed, 2.6 gigs uncompressed).
-- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #44 from David Kelly <[email protected]> 2012-04-15 15:53:24 --- The issue with a large amount of socket related exceptions has been fixed. From the swift-devel meeting last Friday, the plan is to continue with testing to determine any issues. -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #45 from Mihael Hategan <[email protected]> 2012-04-19 22:55:15 --- There is a fix for the NPE (cog trunk r3376). The issue was that the coaster service was trying to send information about workers to the client before the client was connected. This made sense for automatic coasters, but not for the standalone service. -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #46 from David Kelly <[email protected]> 2012-04-20 08:34:02 --- I tried the updated version, but still see a few exceptions at the start. Probably not a huge deal since it seems to continue past these fine. The link to the logs are below. Just wanted to give a quick update on the tests that I have done this week. When using 1 job per node, everything seems to work fine. I have tested with large amounts of data on MCS and not run into any issues. I have also tested this on OSG and it seems fine. I am still running into some issues when testing with large data and 4 jobs per node. Looking through the logs, I see messages about the channels dying and then I get an out of memory exception. I am running with both Swift and coaster-service heap max at 8G (staging 500 files at 200MB each across 10 nodes with jobs per node at 4). The logs for this are at http://www.ci.uchicago.edu/~davidk/logs/logs-2012-04-20.tar.gz (17MB). -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #47 from David Kelly <[email protected]> 2012-04-24 10:13:03 --- Yesterday, I tried a larger set of data on OSG using 1 worker per node and saw timeouts. I'll try again later to get a better set of worker logs (need to give them all a unique filename so they don't get overwritten when condor sends them back). The file below has the coaster service log, swift log, and 1 worker log. http://www.ci.uchicago.edu/~davidk/logs/logs-2012-04-23.tar.gz -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #48 from Mihael Hategan <[email protected]> 2012-04-25 00:29:11 --- (In reply to comment #47)
Yesterday, I tried a larger set of data on OSG using 1 worker per node and saw timeouts. I'll try again later to get a better set of worker logs (need to give them all a unique filename so they don't get overwritten when condor sends them back). The file below has the coaster service log, swift log, and 1 worker log.
http://www.ci.uchicago.edu/~davidk/logs/logs-2012-04-23.tar.gz
It's ok. I have enough to go with for now. -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #49 from Mihael Hategan <[email protected]> 2012-04-26 01:41:58 --- (In reply to comment #46)
I am still running into some issues when testing with large data and 4 jobs per node. Looking through the logs, I see messages about the channels dying and then I get an out of memory exception. I am running with both Swift and coaster-service heap max at 8G (staging 500 files at 200MB each across 10 nodes with jobs per node at 4).
I can't reproduce this. I can't get the swift process to go over 300MB of heap. Can you do a heap dump as soon as you see it going over 2GB? (the relevant log lines are [MEM] ... Heap used: xxx). You can get the heap dump with: jmap -dump:format=b,file=heap.dump <pid> -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #50 from Mihael Hategan <[email protected]> 2012-05-21 18:18:59 --- Regarding the timeouts, they seem to occur when one particular site starts complaining about the disk quota when the worker writes to a file. While the obvious solution is to not run on sites that have very limited space available, there needs to be a solution to this class of problem (workers dying in the middle of a stage-in). The problem actually occurs because when a worker fails catastrophically like that, the buffers currently in use by active transfers on that worker don't get properly released. I have been testing a bunch of fixes for that and related problems (e.g. once writing to a file fails in the worker, the client/service should stop sending data for that file). -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #51 from Michael Wilde <[email protected]> 2012-05-21 18:36:27 --- What was the work dir set to for the site(s) complaining about quotas? We should be setting the site's workdir to $OSG_WN_TMP, and thats where worker.pl should be staging data to. Since these OSG runs with GWMS are likely being run as a single site, we might need to set workdirectory dynamically to that value, likely with a mod to worker.pl, as thats the only place that $OSG_WN_TMP can be readily discovered. Maybe we can set workdirectory as a relative pathname in the sites file, and set a flag to worker.pl. With provider staging, is the workdirectory/jobdirectory created by indirectly by commands from the Swift client, or by worker.pl directly? -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #52 from David Kelly <[email protected]> 2012-05-21 19:49:31 --- In previous coaster tests I was using on OSG, I also had the work directory set to /tmp I believe. This was because it wasn't easy to set the work directory to be an environment variable that was declared on the remote system. To get around this you would probably need to modify worker.pl to create a symlink from $OSG_WN_TMP to /tmp/somedirectory (or use the new run-a-script at launch option, which I still haven't had a chance to look at). I'll give this a try tomorrow and see what happens. -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #53 from Michael Wilde <[email protected]> 2012-05-22 09:36:48 --- (In reply to comment #52)
In previous coaster tests I was using on OSG, I also had the work directory set to /tmp I believe. This was because it wasn't easy to set the work directory to be an environment variable that was declared on the remote system.
To get around this you would probably need to modify worker.pl to create a symlink from $OSG_WN_TMP to /tmp/somedirectory (or use the new run-a-script at launch option, which I still haven't had a chance to look at). I'll give this a try tomorrow and see what happens.
To clarify where we are on this bug: David, can you: - see if your latest failing OSG runs are caused by quota failures on /tmp - Mihael sees a "lost connection to worker"-type error in your latest failing logs. Is that caused by worker.pl exiting on a quota failure, or some other reason? - Mihael is I think working to harden the service to better survive loss of workers in this manner (for any cause) - Lets discuss how to modify (or use) the end-to-end coaster mechanism to reasonably handle OSG_WN_TMP (ie, dynamicaly determining the root dir for workdirectory). -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #54 from David Kelly <[email protected]> 2012-05-22 10:52:05 --- I committed some changes this morning which should allow you to pretty easily use $OSG_WN_TMP as your work directory. To do this: --- Start your proxy Copy coaster-service.conf from /scratch3/davidk/coaster-stress-tests (or from swift, tests/sites/osg/coaster-service.conf) into your working directory. Adjust the value CONDOR_WORKERS in coaster-service.conf as needed Run start-coaster-service Run swift with the sites.xml, tc.data and cf that gets generated. You will have to run this on engage-submit3 only at the moment. (Run stop-coaster-service when done) --- The new scripts should also include full worker logs now, along with information about disk usage. I ran a few tests this morning. It worked fine on a small test I did. When I did a larger test (500 files x 200mb), I saw provider staging timeouts followed by no progress being made. I looked through the logs in /scratch3/davidk/coaster-stress-tests/condor and did not see anything obvious. As far as I can tell, none of the disks I was using was full. I did not see any errors related to quotas. -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #55 from Mihael Hategan <[email protected]> 2012-05-22 16:22:37 --- (In reply to comment #53) [...]
David, can you: - see if your latest failing OSG runs are caused by quota failures on /tmp
I saw some of those, but there might be other ways workers fail.
- Mihael sees a "lost connection to worker"-type error in your latest failing logs. Is that caused by worker.pl exiting on a quota failure, or some other reason? - Mihael is I think working to harden the service to better survive loss of workers in this manner (for any cause)
That's what I'm doing now. I did this when there was no worker staging, but never tested with aborts in the middle of transfers. -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #56 from Mihael Hategan <[email protected]> 2012-05-22 16:24:02 --- (In reply to comment #54)
I ran a few tests this morning. It worked fine on a small test I did. When I did a larger test (500 files x 200mb), I saw provider staging timeouts followed by no progress being made.
I haven't committed any fixes yet. -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #57 from Mihael Hategan <[email protected]> 2012-05-24 16:38:36 --- I committed a fair number of fixes to cog trunk. Here's a summary: - worker properly notifies client when a stage-in fails - when an error occurs in a transfer, all buffers are properly released - there is better flow control on stage-ins so that a single slow transfer doesn't eat all the buffers (in proxy mode if client supplies data at disk speed, and the worker connection is slow, the proxy buffers will be mostly going to that transfer, leaving none for potentially faster transfers). - check for walltime violations in worker and cancel job if necessary - give sleeping coaster workers a quality value ( (completedJobs + 1)/(failedJobs + 1)) and, when a choice of sleeping worker to be awaken needs to be made, select the worker with the highest quality value. I ran a few tests with stagingMode=file/proxy on Engage. Basically 512jobs/100MB/100MB. They all finished fine (with retries; some sites still produce failures) and without warnings. Your mileage may vary, but hopefully not by much. -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #58 from David Kelly <[email protected]> 2012-05-28 17:58:05 --- I've been testing these changes over the weekend and this is all looking very good to me. I started with the 200MB test. This is 500 tasks, each task staging in and staging out 200MB. I ran this across 100 OSG nodes using GWMS. I ran this a few different times now and it seems to work fine. The second test was doing a real DSSAT run on OSG. This consists of ~120K tasks, staging in a total of 80gb, and staging out a total of 18gb. For each run I requested 1000 nodes, but usually got somewhere around 500-800. In each of the two cases, the runs got nearly done before running into a hang checker issue. Each got to exactly to task 119190 before exiting, so I believe this is just a case of some missing input data. I will try again with a different data set tomorrow to verify. -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #59 from David Kelly <[email protected]> 2012-06-11 14:46:26 --- I think I am seeing a new error that may be related to provider staging. I am using persistent coasters to go from communicado to a condor cluster at uchicago called UC3. I initially requests 300 nodes and work start progressing nicely. Then, suddenly within the first few minutes of the run, I see a large drop off in workers and never see more than 1 active task. When looking at the -stats, the workers still appear as registered. Looking at condor_q I see that worker.pl tasks are still running. The drop off seems to be related to this exception in the cps log: 493840 java.lang.NullPointerException 493841 at org.globus.cog.abstraction.impl.file.coaster.handlers.GetFileHandler.error(GetFileHandler.java:141) 493842 at org.globus.cog.abstraction.impl.file.coaster.handlers.providers.ProxyIOProvider$Reader.errorReceived(ProxyIOProvider.java:350) 493843 at org.globus.cog.karajan.workflow.service.commands.Command.errorReceived(Command.java:203) 493844 at org.globus.cog.abstraction.impl.file.coaster.commands.GetFileCommand.errorReceived(GetFileCommand.java:122) 493845 at org.globus.cog.karajan.workflow.service.RequestReply.errorReceived(RequestReply.java:296) 493846 at org.globus.cog.karajan.workflow.service.channels.AbstractKarajanChannel.handleReply(AbstractKarajanChannel.java:408) 493847 at org.globus.cog.karajan.workflow.service.channels.AbstractStreamKarajanChannel.step(AbstractStreamKarajanChannel.java:170) 493848 at org.globus.cog.karajan.workflow.service.channels.Multiplexer.run(Multiplexer.java:70) I see 284 instances of this error.. it could be that I am left with only 16 workers after this (though -stats seems all 300 as active, I suspect they are not being used) The full coaster log is at http://www.ci.uchicago.edu/~davidk/logs/cps-2012-06-11_14-28-26.log.gz (65MB zipped, nearly 1 gig when uncompressed) -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #60 from Mihael Hategan <[email protected]> 2012-06-11 15:42:16 --- Can you file it separately? I'm getting tired of 690. True, it's in coaster staging, but it's a different problem. -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 --- Comment #61 from David Kelly <[email protected]> 2012-06-11 16:05:10 --- Sure - opened as ticket #797. I have not seen the original timeout errors recently. If you'd like to close 690 it's ok with me. Good riddance! :-) -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
https://bugzilla.mcs.anl.gov/swift/show_bug.cgi?id=690 Mihael Hategan <[email protected]> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|ASSIGNED |RESOLVED Resolution| |FIXED -- Configure bugmail: https://bugzilla.mcs.anl.gov/swift/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.
participants (1)
-
bugzilla-daemon@mcs.anl.gov