From: Hugh Macdonald <hughm@(email surpressed)> Subject: Logging progress inside a command Date: Mon, 23 Oct 2006 06:24:58 -0400 |
Msg# 1408 View Complete Thread (6 articles) | All Threads Last Next |
Hi all,I'm relatively new to Rush, having helped evaluate it for a previous company (we ended up deciding to stick with Alfred for the time being, which we had a lot of code based around), and am now working at a company that has recently started using Rush. I've looked through the docs, and scanned the archives of the newsgroup for the answer to this question, but nobody seems to have brought it up, so I'm going to assume that I'm being a muppet and am missing something obvious. If you could tell me what I'm missing (in the nicest possible way), I'd be grateful. At the moment, Rush will only give a Done % as each box finishes, but I'd like it to be able to pick up when, for example, a box is 50% done. Something that is easily parsable from the Shake output... What am I missing here? Thanks! -- Hugh Macdonald Rainmaker UK |
From: Greg Ercolano <erco@(email surpressed)> Subject: Re: Logging progress inside a command Date: Mon, 23 Oct 2006 16:06:24 -0400 |
Msg# 1409 View Complete Thread (6 articles) | All Threads Last Next |
Hugh Macdonald wrote: [posted to rush.general] Hi all,I'm relatively new to Rush, having helped evaluate it for a previous company (we ended up deciding to stick with Alfred for the time being, which we had a lot of code based around), and am now working at a company that has recently started using Rush.I've looked through the docs, and scanned the archives of the newsgroup for the answer to this question, but nobody seems to have brought it up, so I'm going to assume that I'm being a muppet and am missing something obvious. If you could tell me what I'm missing (in the nicest possible way), I'd be grateful.At the moment, Rush will only give a Done % as each box finishes, but I'd like it to be able to pick up when, for example, a box is 50% done. Something that is easily parsable from the Shake output... Irush doesn't try to parse the continuous output of the renderers, though I suppose it could. I've seen a few requests for this before, and I might try to entertain adding it as a feature to rush if a see a clean technical path to implement it that doesn't suffer from scaling problems. Mainly it's an issue of scalability.. eg. if you start a rush job and it jumps on 50 machines, irush would have to parse the logs for realtime output of all 50 machines to update the report. Or worse, if there's 300 machines that start working on the job. Also, rush supports a lot of renderers.. many don't show percent completion messages, so it wouldn't be universally deployable. And finally some renders (mental ray) goes through the zero-to-100 percent progress potentially several times, depending on how many passes it has. The current way to monitor progress in real time is to get an idea of the average time it takes frames to render (see the 'ELAPSED' times in the 'Frames' report, or the 'average render time' in the 'Frames Info' report), and then put the Frames button on 'repeat' (Hit "REP", then hit "Frames"), and then monitor the ELAPSED times for the busy frames to see how fast things are going. Or, just keep the 'Frame Info' or 'Jobs' report on 'repeat' to keep an eye on one or several jobs at a time. -- Greg Ercolano, erco@(email surpressed) Rush Render Queue, http://seriss.com/rush/ Tel: (Tel# suppressed) Fax: (Tel# suppressed) Cel: (Tel# suppressed) |
From: Hugh Macdonald <hughm@(email surpressed)> Subject: Re: Logging progress inside a command Date: Tue, 24 Oct 2006 06:07:57 -0400 |
Msg# 1410 View Complete Thread (6 articles) | All Threads Last Next |
Thanks Greg - that does kinda make sense.... To answer a couple of your points.... Greg Ercolano wrote: Also, rush supports a lot of renderers.. many don't show percent completion messages, so it wouldn't be universally deployable. And finally some renders (mental ray) goes through the zero-to-100 percent progress potentially several times, depending on how many passes it has. My thinking here would be that Rush would require some kind of wrapper around the application to convert the application's progress reports into something that makes more sense to Rush. Pretty much in the same way that Alfred does it. I work mainly with Shake, and if I've, say, got 5 frames rendering on each render machine, the wrapper script would translate Shake saying that frame 1/5 is 50% complete to telling rush that the whole box is 10% complete. Alfred ignores any output from the application except for lines that look something like "ALF_PROGRESS 23%" You could, potentially, write wrapper scripts for the more common renderers that Rush supports, and if users wanted to get progress information for others, I'm sure they'd be capable of writing a small wrapper script. Your example of Mental Ray, again, would fall into the same camp as Shake - the wrapper script could (I don't know MR, so I don't know how easy this would be) know how many passes are coming out, and so turn each 0-100% progress into a subset of the whole progress for that box. The current way to monitor progress in real time is to get an idea of the average time it takes frames to render (see the 'ELAPSED' times in the 'Frames' report, or the 'average render time' in the 'Frames Info' report), and then put the Frames button on 'repeat' (Hit "REP", then hit "Frames"), and then monitor the ELAPSED times for the busy frames to see how fast things are going. My current issue with this is that the render farm picks up all of my frames at the same time (well, clumps of 5 frames), and they all take about the same length of time. So the progress information that I get stays at 0% for the length of the render, and then suddenly jumps to 100% at the end. Thanks, though - it's good to know that I wasn't missing anything too obvious. -- Hugh Macdonald Rainmaker UK |
From: Robert Minsk <rminsk@(email surpressed)> Subject: Re: Logging progress inside a command Date: Tue, 24 Oct 2006 15:48:52 -0400 |
Msg# 1411 View Complete Thread (6 articles) | All Threads Last Next |
I have done exactly that in the past. The biggest problem with implementing something like this is you have to open a pseudo tty (pty) and run the program attached to the pty. Some programs behave differently if they are attached to a tty. Also another issue is there is some overhead with the "rush -notes" command. When 100's of cpus are all calling "rush -notes" you do feel it on the job server. > My thinking here would be that Rush would require some kind of wrapper > around the application to convert the application's progress reports > into something that makes more sense to Rush. Pretty much in the same > way that Alfred does it. I work mainly with Shake, and if I've, say, got > 5 frames rendering on each render machine, the wrapper script would > translate Shake saying that frame 1/5 is 50% complete to telling rush > that the whole box is 10% complete. Alfred ignores any output from the > application except for lines that look something like "ALF_PROGRESS 23%" > |
From: Greg Ercolano <erco@(email surpressed)> Subject: Re: Logging progress inside a command Date: Tue, 24 Oct 2006 17:46:18 -0400 |
Msg# 1412 View Complete Thread (6 articles) | All Threads Last Next |
Hugh Macdonald wrote: > My thinking here would be that Rush would require some kind of wrapper > around the application to convert the application's progress reports > into something that makes more sense to Rush. Pretty much in the same > way that Alfred does it. I'm not sure what alfred does, but my approach would probably be to implement the log parsing in irush. Possibly irush would need to call the submit script in order to convert the log output into percentage info that irush can show, so that the parsing logic can be modified in the submit script, should it change from version-to-version of the renderer. Thing is, managing the realtime logs of potentially tens or hundreds of files in progress, and piping their data through such a parser is not trivial technically across all platforms at the workstation. It can be done, but there's a lot of bending over backwards to accumulate this info, and it would add a bit of traffic to the machine doing the accumulation. The other route would be to have the remote rush daemons parse the logs for just the processors they're working on, and make that data available the daemon protocol back to irush, so that irush can 'poll' for the info. The latter is probably the best approach, but would involve irush having to contact each machine busy rendering to get the accumulated percentage info. Might be possible, but kinda ugly, because currently rush daemons don't look at the log data, it just redirects it to the server, leaving the daemon available to do scheduling and manage other tasks. > You could, potentially, write wrapper scripts for the more common > renderers that Rush supports, and if users wanted to get progress > information for others, I'm sure they'd be capable of writing a small > wrapper script. If sufficiently motivated, you can certainly use the info from 'rush -lf' to write a dedicated app to monitor the logs of busy frames and show the percent completion data. Such a dedicated app shouldn't be too bad under unix using the tail command.. a bit harder under windows because there is no tail command in windows (unless you have the SFU or cygwin stuff). You can do pipes in WIN32, but it's a bit more complicated.. I believe Active Perl for windows gives you access to that API. > Your example of Mental Ray, again, would fall into the same camp as > Shake - the wrapper script could (I don't know MR, so I don't know how > easy this would be) know how many passes are coming out, and so turn > each 0-100% progress into a subset of the whole progress Determining the number of passes is the issue.. this means diving into the scene files to determine this.. not somewhere I want to go, as the scene files are often in proprietary binary format, and are very hard to parse even if ascii. And with the constant changes in the renderers, it would be very hard to track. But again, all this is a long way around just looking at the elapsed times in the 'Frames' report, which are *realtime information*. The Elapsed time for each frame changes while the frame is rendering. -- Greg Ercolano, erco@(email surpressed) Rush Render Queue, http://seriss.com/rush/ Tel: (Tel# suppressed) Fax: (Tel# suppressed) Cel: (Tel# suppressed) |
From: Greg Ercolano <erco@(email surpressed)> Subject: Re: Logging progress inside a command Date: Tue, 24 Oct 2006 17:49:46 -0400 |
Msg# 1413 View Complete Thread (6 articles) | All Threads Last Next |
[..] put the Frames button on 'repeat' (Hit "REP", then hit "Frames"), and then monitor the ELAPSED times for the busy frames to see how fast things are going.My current issue with this is that the render farm picks up all of my frames at the same time (well, clumps of 5 frames), and they all take about the same length of time. So the progress information that I get stays at 0% for the length of the render, and then suddenly jumps to 100% at the end. Hmm, are you *sure* you're looking at the "ELAPSED" time column in the "Frames" report? eg: | \|/ v STAT FRAME TRY HOSTNAME PID JOBID START ELAPSED NOTES Done 0109 3 geneva 1816 ontario.1 08/11,00:53:07 00:05:03 Run 0110 3 tower 2723 ontario.1 08/11,01:50:00 00:03:03 Run 0111 3 geneva 1244 ontario.1 08/11,01:50:00 00:03:03 Run 0112 3 geneva 1816 ontario.1 08/11,01:50:00 00:03:03 Run 0113 3 meade 12244 ontario.1 08/11,01:50:00 00:03:03 Those numbers change while the frame is rendering. So if you know frames are taking about 05:00, then you can watch the elapsed times change for the "Run" frames.. 03:00... 04:00.. 05:00 I can tell in the above the "Run" frames are 3 minutes into a 5 minute render, so those frames are about 3/5 complete. Batching works the same. Leave the Frames button in REP mode to see the report update automatically in "hands off" mode. -- Greg Ercolano, erco@(email surpressed) Rush Render Queue, http://seriss.com/rush/ Tel: (Tel# suppressed) Fax: (Tel# suppressed) Cel: (Tel# suppressed) |