Further to the problems reported below from running a test application on a server class Solaris box (M4000) I re-ran the test but with the setting 'use_memory_mapped_buffers' set to false. This had the +ve effect of avoiding the warnings and nio exceptions mentioned before so clearly there's some additional magic required to run under Solaris using memory mapped buffers. I have enquired as to whether one needs setuid rights to use memory mapped files on Solaris and am told not btw...
The performance was woeful however - like walking thru' molasses in (a Swedish) mid-winter! The test comprises a relatively complex navigation of a domain model to derive some information. This is a re-implementation of a function that already exists in a production C++ application that uses an object database (based on a product called ObjectStore) - so I have something to compare the results against. I also have the results of running the same neo4j test on a low-end Windows PC - here are the comparative timings. Each test contains 2 executions of exactly the same function with the idea that the first execution will be the worst case scenario as the caches are stone-cold, but then the second execution, being exactly the same traversals, should be the best case scenario with the cache's red-hot... In all cases I'm using an Embedded neo4j database approach. Windows (3.2Ghz PC with 1Gb of heap, neo4j database on local disk):- - execution 1 ~ 41seconds - execution 2 1.6 seconds Solaris (Sun SPARC Enterprise M4000 Server System clock frequency: 1012 MHz Memory size: 32768 Megabytes with 3.5Gb heap; NEO4J database on nfs mounted filesystem...) - execution 1 ~ 27+ _minutes_ - execution 2 ~ 5.5 seconds Re-run with neo4j database on a local file system - execution 1 ~20 seconds - execution 2 1.56 seconds Existing C++/ObjectStore implementation on same Solaris box as above:- - execution 1 ~ 3.2 seconds - execution 2 ~ 0.1 seconds These results are disappointing. It appears that the first execution is extremely I/O bound with a local enterprise server disk only improving on a low-end Windows PC by a factor of 2, and nfs reducing performance by a factor of about x80. Once warmed, the low-end Windows PC is almost on par withe enterprise Solaris performance. The fastest neo4j execution 2 is 16x slower than the existing C++/Objectstore implementation. Any suggestions on how it might be possible to narrow the gap between the performance of C++/Objectstore implementation and the neo4j one would be most welcome, as otherwise this will be the end of the line for this approach.... I can accept the poor comparison of the first run if once the cache's are hot the second run comes somewhere reasonably comparable to what might expect from a comparison between a C++ and Java implementation of a CPU intensive application operation (say 2-3 times slower in Java...)? cheers, Paul On 30 Jun 2011, at 14:06, Paul Bandler wrote: > TEST:bandlerp@us2187$ uname -X > System = SunOS > Node = us2187 > Release = 5.10 > KernelID = Generic_138888-03 > Machine = sun4u > BusType = <unknown> > Serial = <unknown> > Users = <unknown> > OEM# = 0 > Origin# = 1 > NumCPU = 16 > > Sent from my iPhone > > On 30 Jun 2011, at 12:53, Michael Hunger <michael.hun...@neotechnology.com> > wrote: > >> Paul, >> >> what version of Solaris are you running that on? We don't have Solaris as >> part of our build-qa workflow (yet). So I would try to see if there is an >> ec2 instance that I could just use for that. >> >> Cheers >> >> Michael >> >> Am 30.06.2011 um 13:26 schrieb Paul Bandler: >> >>> A colleague has speculated that it maybe related to permissions. Im on a >>> shared solaris box with no setuid access - can anyone elaborate on whether >>> some specific access rights are required to use memory mapped IO? >>> >>> Sent from my iPhone >>> >>> On 30 Jun 2011, at 11:20, Paul Bandler <pband...@cseuk.co.uk> wrote: >>> >>>> Further to an earlier posting I also notice this warning from neo4j which >>>> sounds relevant..? Note that the application does continue and eventually >>>> complete successfully having taken orders of magnitude longer than when >>>> run on windows. This is running on solaris - any suggestions about what >>>> could be causing this behaviour most welcome . Are there issues with >>>> using neo4j on Solaris? >>>> >>>> Jun 30, 2011 10:58:59 AM >>>> org.neo4j.kernel.impl.nioneo.store.PersistenceWindowPool logWarn >>>> WARNING: >>>> [./neo4j-advanced-1.4.M05/data/graph.db/neostore.relationshipstore.db] >>>> Unable to memory map >>>> org.neo4j.kernel.impl.nioneo.store.MappedMemException: Unable to map >>>> pos=28593 recordSize=33 totalSize=104841 >>>> at >>>> org.neo4j.kernel.impl.nioneo.store.MappedPersistenceWindow.<init>(MappedPersistenceWindow.java:61) >>>> at >>>> org.neo4j.kernel.impl.nioneo.store.PersistenceWindowPool.allocateNewWindow(PersistenceWindowPool.java:603) >>>> at >>>> org.neo4j.kernel.impl.nioneo.store.PersistenceWindowPool.refreshBricks(PersistenceWindowPool.java:501) >>>> at >>>> org.neo4j.kernel.impl.nioneo.store.PersistenceWindowPool.acquire(PersistenceWindowPool.java:128) >>>> at >>>> org.neo4j.kernel.impl.nioneo.store.CommonAbstractStore.acquireWindow(CommonAbstractStore.java:526) >>>> at >>>> org.neo4j.kernel.impl.nioneo.store.RelationshipStore.getChainRecord(RelationshipStore.java:327) >>>> at >>>> org.neo4j.kernel.impl.nioneo.xa.ReadTransaction.getMoreRelationships(ReadTransaction.java:114) >>>> at >>>> org.neo4j.kernel.impl.nioneo.xa.ReadTransaction.getMoreRelationships(ReadTransaction.java:97) >>>> at >>>> org.neo4j.kernel.impl.persistence.PersistenceManager.getMoreRelationships(PersistenceManager.java:108) >>>> at >>>> org.neo4j.kernel.impl.core.NodeManager.getMoreRelationships(NodeManager.java:604) >>>> at >>>> org.neo4j.kernel.impl.core.NodeImpl.getMoreRelationships(NodeImpl.java:403) >>>> at >>>> org.neo4j.kernel.impl.core.IntArrayIterator.hasNext(IntArrayIterator.java:98) >>>> at >>>> com.nomura.smo.vcs.rdm.neo4j.AbstractBaseNeo4j.getSectorRelations(AbstractBaseNeo4j.java:42) >>>> >>>> Sent from my iPhone >>>> >>>> On 30 Jun 2011, at 07:40, Paul Bandler <pband...@cseuk.co.uk> wrote: >>>> >>>>> When running a test neo4j application on Solaris that I have previously >>>>> run successfully on Windows I'm encountering the following exception: >>>>> >>>>> Caused by: java.io.IOException: Resource temporarily unavailable >>>>> at sun.nio.ch.FileChannelImpl.map0(Native Method) >>>>> at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:747) >>>>> at >>>>> org.neo4j.kernel.impl.nioneo.store.MappedPersistenceWindow.<init>(MappedPersistenceWindow.java:53) >>>>> >>>>> Indeed this in turn is causing a huge knock-on effect but I've not >>>>> included that stack trace for clarity. The program appears to attempt to >>>>> continue, albeit at a snails pace. >>>>> >>>>> I'm running using the latest 1.4 milestone release, with a maximum heap >>>>> of 2G, and defaulting all other store parameters. >>>>> >>>>> Any suggestions as to what is happening would be most welcome. >>>>> _______________________________________________ >>>>> Neo4j mailing list >>>>> User@lists.neo4j.org >>>>> https://lists.neo4j.org/mailman/listinfo/user >>>> _______________________________________________ >>>> Neo4j mailing list >>>> User@lists.neo4j.org >>>> https://lists.neo4j.org/mailman/listinfo/user >>> _______________________________________________ >>> Neo4j mailing list >>> User@lists.neo4j.org >>> https://lists.neo4j.org/mailman/listinfo/user >> >> _______________________________________________ >> Neo4j mailing list >> User@lists.neo4j.org >> https://lists.neo4j.org/mailman/listinfo/user > _______________________________________________ > Neo4j mailing list > User@lists.neo4j.org > https://lists.neo4j.org/mailman/listinfo/user _______________________________________________ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user