Performance problem wrapping a java library in jruby - twice as bad as jruby 
1.6.2
----------------------------------------------------------------------------------

                 Key: JRUBY-6003
                 URL: https://jira.codehaus.org/browse/JRUBY-6003
             Project: JRuby
          Issue Type: Bug
          Components: Performance
    Affects Versions: JRuby 1.7
         Environment: jruby 1.7.0.dev (ruby-1.8.7-p330) (2011-08-15 401bb15) 
(OpenJDK Client VM 1.7.0) [linux-i386-java]
Patch open java - "1.7.0" Java(TM) SE Runtime Environment (build 1.7.0-b147) 
OpenJDK Server VM (build 22.0-b01-internal, mixed mode)
ubuntu 10.10 linux kernel: 2.6.35-28-generic-pae (i686).
            Reporter: Andreas Ronge


The following performance test is about twice as slow as in jruby 1.6.2.
The performance test calculates the total size of all the files in the given 
folder and subfolders by using the Java graph database Neo4j library.

{code:xml} 

include Java

require "jars/neo4j-kernel-1.2-1.2.M03.jar"
require "jars/geronimo-jta_1.1_spec-1.1.1.jar"


DB_PATH                 = "tmp/neo4j"

DynamicRelationshipType = org.neo4j.graphdb.DynamicRelationshipType
Direction               = org.neo4j.graphdb.Direction


class RubyTraversal
  attr_reader :traversed

  def initialize
    @db = org.neo4j.kernel.EmbeddedGraphDatabase.new(DB_PATH)
  end

  def visit_ref_node
    @traversed = 1
    rel        = 
@db.getReferenceNode().getSingleRelationship(DynamicRelationshipType.withName("root"),
 Direction::OUTGOING)
    root       = rel.getEndNode
    visit_folder(root)
  end

  def visit_folder(folder)
    size       = 0
    @traversed += 1
    folder.getRelationships(DynamicRelationshipType.withName("folder")).each do 
|rel|
      size += visit_file(rel.getOtherNode(folder))
    end

    folder.getRelationships(DynamicRelationshipType.withName("parent_folder"), 
Direction::INCOMING).each do |rel|
      size += visit_folder(rel.getOtherNode(folder))
    end
    size
  end

  def visit_file(file)
    @traversed += 1
    file.getProperty("size")
  end
end

trav = RubyTraversal.new
TIMES = 10

total_time = 0
TIMES.times.each do |i|
  start_time = Time.now
  size       = trav.visit_ref_node
  delta = Time.now - start_time
  puts "#{i+1} -- traversed #{trav.traversed} nodes #{size} bytes, in #{delta} 
seconds"
  total_time += delta
end

trav.shutdown


{code}

How to reproduce this performance test
* git clone http://github.com/andreasronge/neo4j-perf.git
* cd neo4j-perf
* bundle
* rake create  
  The rake task will ask for a folder where from to create an database 
containing >= 400.000 files and sub folders
* rake jruby # will start the performance test running the script below with 
flags: -J-Xms2048m -J-Xmx2048m -J-Xmn512m

Notice, I have also tried running it with 
-J-XX:CompileCommand=dontinline,org.jruby.runtime.invokedynamic.InvokeDynamicSupport::invocationFallback
 flags but it did not change anything.


--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


Reply via email to