Differences between revisions 5 and 6
Revision 5 as of 2007-11-15 23:17:50
Size: 3211
Editor: PhilipJenvey
Comment: some more notes
Revision 6 as of 2007-11-15 23:19:20
Size: 15
Editor: PhilipJenvey
Comment: FreeBSD's java doesn't give me a good read() benchmark, have to redo these
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
Some PyFile benchmarks, mostly to show off the PyFile nio

Tests done on FreeBSD 6.2-RELEASE, Java 1.5.0_13 in server mode and Python 2.5.1

(If anyone's worried about FreeBSD Java, the times are in line with OS X's Java 1.5)

Preparations: 100

Test iterations (average taken of): 5

Notes:

* This page is made for a larger browser window so that the small and big graphs lie on the same row

* jython's file iter is roughly the same code as its readline, whereas CPython's readline is not as optimized as its iter. So the fact that our readline speed is very close to CPython's isn't totally fair, CPython's iter still beats us

* The few anomalies in the smaller benchmarks are probably due to JIT kicking in. Ideally we would run more preparations and iterations

* why is read slower than iter? profiling showed a lot of time being spent in allocating read's ByteBuffer, whereas iter uses a pre-allocated, smaller ByteBuffer. This still surprises me a bit, though. A PyString backed by bytes would help this particular benchmark a lot

* i don't have text mode benchmarks because they're only applicable to windows. their read times would be a little slower than 'U' mode. write times would probably lag behind CPython's

Reading:

{{{#!python
    def test_read(self, fp):
        fp.read()
    test_read = bench(test_read)
}}}
[http://underboss.org/~pjenvey/jython/pyfile-nio/small/test_read.jpg]
[http://underboss.org/~pjenvey/jython/pyfile-nio/big/test_read.jpg]

{{{#!python
    def test_iter(self, fp):
        for line in fp:
            pass
}}}
[http://underboss.org/~pjenvey/jython/pyfile-nio/small/test_iter.jpg]
[http://underboss.org/~pjenvey/jython/pyfile-nio/big/test_iter.jpg]

{{{#!python
    def test_readline(self, fp):
        while fp.readline():
            pass
}}}
[http://underboss.org/~pjenvey/jython/pyfile-nio/small/test_readline.jpg]
[http://underboss.org/~pjenvey/jython/pyfile-nio/big/test_readline.jpg]

{{{#!python
    def test_readline_with_tell(self, fp):
        while fp.readline():
            fp.tell()
}}}
[http://underboss.org/~pjenvey/jython/pyfile-nio/small/test_readline_with_tell.jpg]
[http://underboss.org/~pjenvey/jython/pyfile-nio/big/test_readline_with_tell.jpg]

{{{#!python
    def test_readlines(self, fp):
        fp.readlines()
}}}
[http://underboss.org/~pjenvey/jython/pyfile-nio/small/test_readlines.jpg]
[http://underboss.org/~pjenvey/jython/pyfile-nio/big/test_readlines.jpg]

Writing:

{{{#!python
MSG = ('abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz123456789'
       '0abcdefgh\r\n')
}}}

{{{#!python
    def test_write(self, fp, lines):
        write = fp.write
        for i in range(lines):
            write(MSG)
}}}
[http://underboss.org/~pjenvey/jython/pyfile-nio/small/test_write.jpg]
[http://underboss.org/~pjenvey/jython/pyfile-nio/big/test_write.jpg]

{{{#!python
    def test_writelines(self, fp, lines):
        lines = [MSG for i in range(lines)]
        fp.writelines(lines)
}}}
[http://underboss.org/~pjenvey/jython/pyfile-nio/small/test_writelines.jpg]
[http://underboss.org/~pjenvey/jython/pyfile-nio/big/test_writelines.jpg]
Coming soon..

Coming soon..

PyFileBenchmarks (last edited 2009-02-24 20:53:52 by PhilipJenvey)