Forked Processes Won't Migrate, Perl & ForkManager
James Wagner <jwagner-I/[email protected]> Mon, 24 Jul 2006 13:16:27 -0400
| Newsgroups | gmane.linux.cluster.openmosix.general |
|---|---|
| Message-ID | <[email protected]> |
Hi all I've built an OpenMosix cluster on Slackware Linux. From any node, I can run mosmon and see the load for each node. I built this to aid in the processing of a large amount of data, but have run into a problem. I wrote a perl script to read the file and use a foreach loop to process each record. I have the program structured to print a status indicater to the screen, then call a subroutine to do the actual processing, passing it the variable containing the data. That process then chews on the data, writes to a mysql database and a text file. I tried running this with the cluster enabled and there was no migration - the node the process was running on was maxxed out and the other ones were idle. "Hey, I bet I need to re-write it to use threads!" I think and proceed to do so. (When will I learn to read FAQs *first*??? ;) ) Anyways, the threaded implementation of my program didn't distribute the work among the nodes and after reading the FAQ, I re-wrote the program again to use the ForkManager package referenced in the FAQ. (MUCH easier than using threads, plus I don't have to download and re-compile Perl.) After doing this and still obtaining the same results, I downloaded a stock analyzer program I found on the 'net, one possible use of which is to test openmosix clusters. All the nodes went to 100% CPU usage and stayed there until the program was done, so I have to assume that the cluster is set up correctly. After this, I figured that the routine responsible for chewing on the data must be exiting too quickly for openmosix to recognize the high load and to distribute (takes about 5 seconds on an AMD 2500+), so I incorporated a crude blocking scheme and passed 1000 records a shot to be processed. This make no difference either. I assumed that there must be a problem using a mysql connection on the local machine, so I changed the program to connect to mysql on a separate machine. No change. I then thought that it must be writing to a file on the local machine. After trying to enable MFS and continually getting an 'unknown file system type' error, I gave up and changed it to write to a text file on another machine using a TCP connection. I set up a daemon on the remote machine that does nothing but listen for connections and spit whatever it receives into a text file. When I start the program, the only node working on the data is still the whatever one I start the process on. I'm frankly out of ideas of what to try. Processing on the amount of data I need to will take on the order of months and I would very much like to speed this up, but don't know what else to try. Any advice is appreciated. Jim ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys -- and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV