On Apr 4, 2006, at 10:23 AM, Tatu Saloranta wrote:
So in this case, what would give more comparable results (assuming
you are interested in measuring likely server-side
usage scenario, which is usually what Lucene is used for)

My main interest with these tests is algorithmic performance. How much time it takes to start up or warm up a JVM isn't something I want to be measuring. There are startup issues I'm concerned about, but they mostly relate to file format design. The load time for field norms is a significant concern. So is the IndexInterval, which is set to 1024 by default instead of 128 as in Lucene. So is the locality of reference issue for where the term vector data gets stored. All of those things affect the total time it takes for a KinoSearch app to launch, load, search, and return results, which needs to be as small as possible so that e.g. website search apps indexing up to [some large number of] documents can be run as simple CGI scripts. I'm considering further modifications to the file format to keep that total time down...

Actually, I think the benchmark results illustrate that everyone should be at least mildly concerned about where the Term Vector data gets stored. KinoSearch only writes that data once. Lucene, however, has to read/write that data during each merge, and the more streams you have, the more complex the merge. It stands to reason that storing term vector data with the stored fields data would speed up the merge process.

I brought this issue up a few weeks ago, but in a search-time context. The two primary applications for Term Vector data that I am aware of are excerpting/highlighting and "more like this" searches, both of which would benefit from having the term vectors stored with the documents, because each search would require fewer disk seeks. Term Vectors might also be used to build a pure vector space search engine, like the one described in this article <http://www.perl.com/ pub/a/2003/02/19/engine.html>, but that's impractical for indexes larger than a handful of documents and of academic interest only. Are there any other significant applications? If not, I submit that term vectors belong in the .fdx file.

would be to run all runs within same JVM / execution (for Perl),

Thanks for the critique. I've updated the indexer apps to accept two command line arguments. They're now run like so:

    java [ARGS] LuceneIndexer -reps 6 -docs 1000
    perl indexers/kinosearch_indexer.plx --reps=6 --docs=1000

With the new methodology, the numbers are slightly better for Lucene. They're actually worse for KinoSearch. I've isolated the code that's responsible for the slowdown that and I speculate that it's a memory fragmentation issue, as I can solve it by forcing KinoSearch to consume more memory at that point. However, having established that KinoSearch is in Lucene's league with regards to indexing speed, I'm not worried about absolute numbers, and the new benchmarker interface is slightly more stable, allowing more accurate comparative analysis of algorithmic efficiency. The trends are still apparent: KinoSearch gains ground when there's stored and vectorized content.

Raw data is below.

and either take the fastest runs, or discard the first one and take median or
average.

As you'll see in the raw data, the apps now produce two aggregate numbers: a mean, and a truncated mean <http://en.wikipedia.org/wiki/ Truncated_mean>.

ps. Regarding memory usage: it is also quite tricky to measure
 reliably, since Garbage Collection only kicks in when it has to...
 so Java uses as much memory as it can (without expanding heap)...
 plus, JVMs do not necessarily (or even usually) return unused
 chunks later on.

Yes. Still, there is a correlation between maxBufferedDocs and max memory consumption by the process. So Java must be reusing something...

    maxBufferedDocs   max memory (1 rep)   truncated mean time (6 reps)
    -------------------------------------------------------------------
        10                69 MB                124.89 secs
       100                91 MB                 88.17 secs
      1000               169 MB                 84.80 secs

Marvin Humphrey
Rectangular Research
http://www.rectangular.com/

RAW DATA - JVM warmup / truncated mean experiment
===================================================

slothbear:~/Desktop/ks/t/benchmarks marvin$ java -server -Xmx500M - XX:CompileThreshold=100 LuceneIndexer -reps 6
---------------------------------------------------
1   Secs: 87.02  Docs: 19043
2   Secs: 84.56  Docs: 19043
3   Secs: 85.04  Docs: 19043
4   Secs: 83.83  Docs: 19043
5   Secs: 84.75  Docs: 19043
6   Secs: 84.84  Docs: 19043
---------------------------------------------------
Lucene 1.9.1
JVM 1.4.2_09 (Apple Computer, Inc.)
Mac OS X 10.4.5 ppc
Mean: 85.01 secs
Truncated mean (4 kept, 2 discarded): 84.80 secs
---------------------------------------------------
slothbear:~/Desktop/ks/t/benchmarks marvin$ cd ~/Desktop/ks588/t/ benchmarks/ slothbear:~/Desktop/ks588/t/benchmarks marvin$ /usr/local/perl588/bin/ perl -Mblib indexers/kinosearch_indexer.plx --reps 6
------------------------------------------------------------
1    Secs: 75.51  Docs: 19043
2    Secs: 80.79  Docs: 19043
3    Secs: 81.12  Docs: 19043
4    Secs: 84.68  Docs: 19043
5    Secs: 81.78  Docs: 19043
6    Secs: 79.65  Docs: 19043
------------------------------------------------------------
KinoSearch 0.09_03
Perl 5.8.8
Thread support: no
Darwin 8.5.0 Power Macintosh
Mean: 80.59 secs
Truncated mean (4 kept, 2 discarded): 80.83 secs
------------------------------------------------------------
slothbear:~/Desktop/ks588/t/benchmarks marvin$


RAW DATA - mergefactor experiment
============================================================

slothbear:~/Desktop/ks/t/benchmarks marvin$ java -server -Xmx500M - XX:CompileThreshold=100 LuceneIndexer -reps 6
---------------------------------------------------
1   Secs: 127.05  Docs: 19043
2   Secs: 125.50  Docs: 19043
3   Secs: 125.44  Docs: 19043
4   Secs: 124.53  Docs: 19043
5   Secs: 124.10  Docs: 19043
6   Secs: 121.57  Docs: 19043
---------------------------------------------------
Lucene 1.9.1
JVM 1.4.2_09 (Apple Computer, Inc.)
Mac OS X 10.4.5 ppc
Mean: 124.70 secs
Truncated mean (4 kept, 2 discarded): 124.89 secs
---------------------------------------------------
slothbear:~/Desktop/ks/t/benchmarks marvin$ vim indexers/ LuceneIndexer.java slothbear:~/Desktop/ks/t/benchmarks marvin$ javac -d . indexers/ LuceneIndexer.java slothbear:~/Desktop/ks/t/benchmarks marvin$ java -server -Xmx500M - XX:CompileThreshold=100 LuceneIndexer -reps 6
---------------------------------------------------
1   Secs: 89.91  Docs: 19043
2   Secs: 87.59  Docs: 19043
3   Secs: 88.51  Docs: 19043
4   Secs: 88.59  Docs: 19043
5   Secs: 87.97  Docs: 19043
6   Secs: 86.75  Docs: 19043
---------------------------------------------------
Lucene 1.9.1
JVM 1.4.2_09 (Apple Computer, Inc.)
Mac OS X 10.4.5 ppc
Mean: 88.22 secs
Truncated mean (4 kept, 2 discarded): 88.17 secs
---------------------------------------------------
slothbear:~/Desktop/ks/t/benchmarks marvin$

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to