On 1/04/2016 8:13 AM, Andrew Rowley wrote:

I do know that the effects of allocation patterns are very different for GC languages and languages like C/C++. In C++ allocating and freeing short lived objects is expensive because the memory needs to be tracked. In GC languages short lived objects are cheap, it is objects that survive to GC that are expensive. This can make it a bit difficult to directly compare performance because there might be different design decisions.


In C++ small object allocation can be done with pool allocators http://www.boost.org/doc/libs/1_60_0/libs/pool/doc/html/index.html.

Most of my CPU time seems to be I/O related (processing SMF data). Even removing all the reporting seems to make very little difference to the CPU consumed. I'm trying to work out if I can reduce the I/O overhead.


I guess you're using JZOS RecordReader? From what I know of the implementation it's micro-optimized and it's as good as it gets for Java.

I don't know about JIT overhead - I think it is probably insignificant because it should only compile the methods you actually invoke.

The FTS1 CPU is running CICS, IMS and that one Java batch job spikes past it.

Without other work for competition anything CPU bound will max out the CPU, so that's not necessarily a negative - it just means that it isn't waiting for other things. E.g. at one site the DBAs greatly increased Adabas buffer space. CPU contention increased massively as virtually nothing was waiting for I/O anymore. Caused a few problems, but it's a good problem to have. It just means that if it can only get 5% CPU instead of 50% it will run ~10 times as long. Total CPU time is a better measure than CPU%.

Agreed. I probably didn't articulate my point very well. You can't compare a COBOL batch job to a Java batch job. The COBOL program will use 200K of memory and use very little CPU where the Java program will be a multi-threaded monster and gobble up as much memory as it can devour. That's the nature of the beast. It probably means the density of Java workloads that can run on a zIIP is far less than conventional programs on CPs.

My Java program creates Redis pipeline buffers so uses quite a bit of memory. When I profile the program in APA I see the following.

Name      Description               Percent of CPU Time * 10.00%  +3.9%
                                        
*....1....2....3....4....5....6....7....8....9....*
APPLCN    Application Code         96.35 
************************************************
*PATHNAM  Application Program    96.35 
************************************************
  > Parallel  CSECT in *PATHNAM    34.86 *****************
  > MarkingS  CSECT in *PATHNAM    27.41 **************
  > CompactS  CSECT in *PATHNAM    17.11 *********
  > ObjectHe  CSECT in *PATHNAM     6.49 ***
  > Concurre  CSECT in *PATHNAM     3.80 **
  > HeapMapI  CSECT in *PATHNAM     1.90 *
  > J9ZERZ10  CSECT in *PATHNAM     1.26 *
  > Scavenge  CSECT in *PATHNAM     0.95
  > CardTabl  CSECT in *PATHNAM     0.63

Half of the CPU time is spent in GC. Ironically most of this program is spent running C++ GC code in the VM! ParallelScavenger, ConcurrentScavenger and MarkingScheme which I assume is part of the mark-and-sweep GC engine.

What I really want for Christmas is to run C++ programs on a zIIP. But IBM won't let me :)

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to