... it difficult to say what can make your program faster.
But you're right, the I/O operation is usually not the CPU burner. But the data preparation can it be. You can check if you can omit some memcpy calls or other data moving algorithms?
Especially such as you put in your first sample,
buffer[i] = ' '
Here were an memset or memcpy better. What you can also do, is to check buffer alignment, it's extremely performance difference if you do copy on aligned or unaligned data!
Cause when your data is aligned you can replace your memcpy call with routine like this this:
long i = 0;
long *pdata = (long*)&data;
for( i = 0; i < sizeof(data); i+=sizeof(long) )
*pdata++ = i;
I've tested this behavior, in test I've called memcpy and this routine in loop for 1000000 times.
Result, copy with memcpy took up to 10 secs, with 70%CPU and another one copy took 400 milis with ~1% CPU :-)
From: c400-l-bounces+peter.daransky=uc4.com@xxxxxxxxxxxx [mailto:c400-l-bounces+peter.daransky=uc4.com@xxxxxxxxxxxx] On Behalf Of Boris
Sent: Donnerstag, 26. Mai 2011 01:05
Subject: Re: [C400-L] Write to IFS file - high CPU
Changing Standard C functions to POSIX did make an improvement and as you said the program finished much faster. The highest CPU percentage it reached was 79% as opposed to 91%.
The internal buffer in Standard C functions was a real revelation to me. Any other hidden gems out of your sleeve :)?
I'm just wondering... The program is doing multiple I/O operations.
Shouldn't an I/O operation release the CPU?
It's only a psychological problem until the operator puts the job on hold because he thinks it's in infinite loop :) Then it becomes a real problem, because the business unit thinks that other business jobs will get less CPU.
There seems to be a consensus in this thread that high CPU is pretty much normal. I'm just having hard time explaining it and I think I will be forced to put the job in a different class with a lower runtime priority.
Thanks for the code. I'll definitely try it.
This is the C programming iSeries / AS400 (C400-L) mailing list To post a message email: C400-L@xxxxxxxxxxxx To subscribe, unsubscribe, or change list options,
or email: C400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives at http://archive.midrange.com/c400-l