CPU usage by job processes
Posted: Fri Feb 01, 2008 3:48 pm
Long time reader, first time poster... :)
I have inherited a project that uses Datastage 7.5.1.A Server Edition, running on a workstation-class machine with two Intel 3.9Ghz Dual Core Processors, and 3GB of RAM. Windows XP is the OS. (We understand Windows XP is a non-supported OS, and are running on a workstation-class machine/workstation operating system for political reasons around servers, internal to our department, unfortunately.)
We have been running successfully for 2-3 years, but would like to increase performance, as our cycle times are longer than desired (have always been long), but we cannot locate a bottleneck in CPU, memory, or disk performance at this time.
I notice odd CPU behavior on many of our jobs, when looking at either Perfmon or the Performance tab of Task Manager, and am trying to investigate the issue (or reason) using one particular job to test with.
The job that I am testing with reads in approximately 300,000 rows (150 columns) from a sequential file. It then has a transform that performs lookups against 7 different hash files (small number of rows/columns in each hash file), and also calls small routines for simple calculations or mappings for many of the columns. Finally, it writes the results to a sequential file.
When this job is run, CPU utilization is only 25%. If I redesign the job with either the IPC stage or Link Partitioner to create more than one process (the box has two CPUs of dual core equaling 4 logical processors), the sum of the individual processes of the job STILL don't exceed 25% utilization at any given time. (i.e. Process A approaches 25% when Process B approaches 0% and it fluctuates back and forth to any degree, where the sum of the two processes never go above 25%.) In fact, using the IPC or Link Partitioner designs cause the job to run longer!
If I divide my input file into two separate files of 150,000 rows each, and run two copies of this job concurrently, then each jobs' processes will use approximately 25% CPU or less, so that the overall server is taxed approximately 50% or less. In the end, my run time for this job goes from 10 minutes to 8 minutes by having TWO SEPARATE JOBS process concurrently. Thus, I am able to use more processing power with this approach.
Can someone tell me why this is occurring? Why am I unable to get a single job run at more than 25% CPU, even with multiple processes? Is Datastage simply not *asking* for any additional CPU, due to another bottleneck in the system? There is plenty of free physical memory available, and disk performance (disk queue length) looks completely fine during the run of this job. What else could be causing a bottleneck, that running two separate jobs is helping? Are there architectural limitations that either a workstation-class machine or Windows XP is introducing?
Any assistance in helping me understanding what I am observing, (or what I am doing wrong), is greatly appreciated.
Thanks,
David
I have inherited a project that uses Datastage 7.5.1.A Server Edition, running on a workstation-class machine with two Intel 3.9Ghz Dual Core Processors, and 3GB of RAM. Windows XP is the OS. (We understand Windows XP is a non-supported OS, and are running on a workstation-class machine/workstation operating system for political reasons around servers, internal to our department, unfortunately.)
We have been running successfully for 2-3 years, but would like to increase performance, as our cycle times are longer than desired (have always been long), but we cannot locate a bottleneck in CPU, memory, or disk performance at this time.
I notice odd CPU behavior on many of our jobs, when looking at either Perfmon or the Performance tab of Task Manager, and am trying to investigate the issue (or reason) using one particular job to test with.
The job that I am testing with reads in approximately 300,000 rows (150 columns) from a sequential file. It then has a transform that performs lookups against 7 different hash files (small number of rows/columns in each hash file), and also calls small routines for simple calculations or mappings for many of the columns. Finally, it writes the results to a sequential file.
When this job is run, CPU utilization is only 25%. If I redesign the job with either the IPC stage or Link Partitioner to create more than one process (the box has two CPUs of dual core equaling 4 logical processors), the sum of the individual processes of the job STILL don't exceed 25% utilization at any given time. (i.e. Process A approaches 25% when Process B approaches 0% and it fluctuates back and forth to any degree, where the sum of the two processes never go above 25%.) In fact, using the IPC or Link Partitioner designs cause the job to run longer!
If I divide my input file into two separate files of 150,000 rows each, and run two copies of this job concurrently, then each jobs' processes will use approximately 25% CPU or less, so that the overall server is taxed approximately 50% or less. In the end, my run time for this job goes from 10 minutes to 8 minutes by having TWO SEPARATE JOBS process concurrently. Thus, I am able to use more processing power with this approach.
Can someone tell me why this is occurring? Why am I unable to get a single job run at more than 25% CPU, even with multiple processes? Is Datastage simply not *asking* for any additional CPU, due to another bottleneck in the system? There is plenty of free physical memory available, and disk performance (disk queue length) looks completely fine during the run of this job. What else could be causing a bottleneck, that running two separate jobs is helping? Are there architectural limitations that either a workstation-class machine or Windows XP is introducing?
Any assistance in helping me understanding what I am observing, (or what I am doing wrong), is greatly appreciated.
Thanks,
David