John the Ripper benchmarks

Initially, this page will be the place to collect and share trivial john –test benchmarks on different systems. At a later time, it may make sense to turn it into a namespace with sub-pages for john –test benchmarks (only c/s rate matters) and actual cracking runs (lots of things matter). Also, the underlying data may be uploaded/collected (e.g., exact john –test outputs, /proc/cpuinfo off of Linux systems, john.log files).

Collected "john --test" benchmarks

Please add your benchmark results to the table. Please make sure to run the benchmarks on an otherwise idle system (the real vs. virtual time results should be almost the same, so it should not matter which of these two you pick).

For multi-CPU systems and multi-core CPUs, the c/s rates given are for one CPU core. For example, the Q6700 CPU achieves an equivalent of just over 2.5 million of traditional DES-based crypt(3) checks per second per core, but since this CPU is quad-core, this translates to just over 10 million of checks per second per CPU chip, with proper parallelization.

Please keep this table sorted by performance at DES-based crypt() for “many salts”, better results listed first, best results for each hash type shown in bold, best results for CPUs operating at their rated frequencies (non-overclocked) shown in bold-italics.

DES crypt() MD5 crypt() bcrypt x32 Windows LanMan CPU & clock rate JtR OS compiler make target tweaks
3486K / 2989K
128/128 BS SSE2-16
15580
32/64 X2
943
32/64 X2
17754K
128/128 BS SSE2-16
E6750
o/c to 3.6 GHz
1.7.3.1 Linux gcc 4.2.3
4.2.3-2ubuntu7
linux-x86-64
2537K / 2200K
128/128 BS SSE2-16
11200
32/64 X2
537
32/64 X2
13306K
128/128 BS SSE2-16
Q6700
2.66 GHz
1.7.3.1 Linux gcc 4.1.2
Red Hat 4.1.2-14
linux-x86-64
2300K / 1940K
128/128 BS SSE2-16
8600
32/64 X2
568
32/64 X2
12851K
128/128 BS SSE2-16
Q6600
2.4 GHz
1.7.3.1 Linux gcc 3.4.5 linux-x86-64
2271K / 1929K
128/128 BS SSE2
7300
32/32
450
32/32
12530K
128/128 BS SSE2
Q6700
2.66 GHz
1.7.3.1 Linux gcc 4.1.2
Red Hat 4.1.2-14
linux-x86-64-32-sse2
(non-optimal)
2229K / 1914K
128/128 BS SSE2-16
10034
32/64 X2
603
32/64 X2
11407K
128/128 BS SSE2-16
E5410
2.33 GHz
1.7.3.1 Linux gcc 4.2.3
Ubuntu 4.2.3
linux-x86-64
2222K / 1880K
128/128 BS SSE2-16
8277
32/64 X2
550
32/64 X2
12458K
128/128 BS SSE2-16
E5410
2.33 GHz
1.7.3.1 Linux gcc 3.4.5 linux-x86-64
1902K / 1590K
128/128 BS SSE2-16
8140
32/64 X2
464
32/64 X2
8580K
128/128 BS SSE2-16
Core 2 Duo
2.0 GHz
1.7.3.1 Mac OS X 10.5 gcc (Xcode 3.0) macosx-x86-64
1888K / 1601K
128/128 BS SSE2-16
7080
32/64 X2
468
32/64 X2
10640K
128/128 BS SSE2-16
E5405
2.0 GHz
1.7.3.1 Linux gcc 3.4.5 linux-x86-64
1883K / 1630K
128/128 BS SSE2-16
11723
32/64 X2
747
32/64 X2
10509K
128/128 BS SSE2-16
Phenom 9950
2.6 GHz
1.7.3.1 Linux gcc 4.3.1 linux-x86-64
1695K / 1398K
128/128 BS SSE2
5520
32/32
336
32/32
7814K
128/128 BS SSE2
Core 2 Duo
2.0 GHz
1.7.3.1 Mac OS X 10.5 gcc (Xcode 3.0) macosx-x86-sse2
1215K / 1091K
128/128 BS SSE2-16
11020
32/64 X2
700
32/64 X2
9426K
128/128 BS SSE2-16
Opteron
2.6 GHz
1.7.3.1 Solaris 10 Sun Studio 12 solaris-x86-64-cc
1211K / 1105K
128/128 BS SSE2-16
9692
32/64 X2
683
32/64 X2
9240K
128/128 BS SSE2-16
Opteron
2.6 GHz
1.7.3.1 Solaris 10 gcc 3.4.3 solaris-x86-64-gcc
1136K/1055K
64/64 BS MMX
7300
32/32
450
32/32
9710K
64/64 BS MMX
Q6700
2.66 GHz
1.7.3.1 Linux gcc 4.1.2
Red Hat 4.1.2-14
linux-x86-64-32-mmx
(non-optimal)
940K / 853K
128/128 BS SSE2-16
7477
32/64 X2
331
32/64
7113K
128/128 BS SSE2-16
Athlon 64 3000+
2.0 GHz
1.7.2 Linux gcc 3.4.5 linux-x86-64
937K / 847K
128/128 BS SSE2-16
8971
32/64 X2
579
32/64 X2
6609K
128/128 BS SSE2-16
Athlon 64 3000+
2.0 GHz
1.7.3.1 Linux gcc 4.3.1 linux-x86-64
796K / 757K
64/64 BS
11200
32/64 X2
537
32/64 X2
10230K
64/64 BS
Q6700
2.66 GHz
1.7.3.1 Linux gcc 4.1.2
Red Hat 4.1.2-14
generic
(non-optimal)
626K / 505K
128/128 BS AltiVec
3415
32/32 X2
236
32/32
4217K
128/128 BS AltiVec
PowerPC 7450
1.3 GHz
1.7.2 Mac OS X 10.5 gcc (Xcode 3.0) macosx-ppc32-altivec
435K / 370K
64/64 BS
1484
32/64 X2
98.3
32/64
4417K
64/64 BS
Alpha 21264A
667 MHz
1.6.17 Linux egcs 1.1.2 linux-alpha -mev6
333K / 300K
24/32 4K
7698
32/32
466
32/32
3966K
32/32 BS
Opteron
2.6 GHz
1.7.2 Solaris 10 gcc 3.4.3 solaris-x86-any
(non-optimal)
328K / 300K
64/64 BS MMX
2460
32/32
171
32/32
2683K
64/64 BS MMX
Pentium 3
1.0 GHz
1.7.2 Linux gcc 3.4.5 linux-x86-mmx
216K / 173K
64/64 BS
1123
32/64 X2
84.7
32/64
1110K
64/64 BS
Alpha 21164PC
533 MHz
1.7.3.1 Linux gcc 2.95.3 linux-alpha
139K / 119K
64/64 BS
507
32/64 X2
80.3
32/64
1002K
64/64 BS
Alpha 21164PC
533 MHz
1.7.3.1 Linux gcc 3.4.5 linux-alpha
122K / 107K
64/64 BS
1016
32/64 X2
70.6
32/64
1036K
64/64 BS
Alpha 21164PC
533 MHz
1.7.3.1 Linux Compaq C
V6.2-002
linux-alpha-ccc
108K / 97K
64/64 BS
675
32/64 X2
58.1
32/64
765K
64/64 BS
UltraSPARC IIi
333 MHz
1.7.3.1 NetBSD gcc 3.3.3
nb3 20040520
netbsd-sparc64
107K / 97K
64/64 BS MMX
868
32/32
60.0
32/32
945K
64/64 BS MMX
Pentium II
350 MHz
1.7.3.1 Linux gcc 2.7.2.3 linux-x86-mmx
66K / 63K
32/32 BS
804
32/32 X2
76.8
32/32
876K
32/32 BS
UltraSPARC IIi
400 MHz
1.7-owl2
package
Linux gcc 3.4.5 linux-sparc
(32-bit userland)
CFLAGS
61K / 56K
32/32 BS
706
32/32 X2
56.2
32/32
696K
32/32 BS
UltraSPARC IIi
400 MHz
1.7.3.1 Linux gcc 3.4.5 linux-sparc
(32-bit userland)
45K / 43K
32/32 BS
740
32/32
53.5
32/32
600K
32/32 BS
Pentium II
350 MHz
1.7.3.1 Linux gcc 2.7.2.3 generic
(non-optimal)
39K / 36K
24/32 4K
868
32/32
60.0
32/32
600K
32/32 BS
Pentium II
350 MHz
1.7.3.1 Linux gcc 2.7.2.3 linux-x86-any
(non-optimal)
13K / 12K
32/32x8V BS
119
32/32 X2
13.8
32/32
138K
32/32x8V BS
PA-RISC 7100LC
80 MHz
1.7.3.1 HP-UX 10.20 gcc 2.95.2 hpux-pa-risc-gcc
1679 / 1632
32/32 BS
74
32/32
4.0
32/32
33.4K
32/32 BS
PP5021C (x2)
80 MHz
1.7.2 Linux-iPod2
(1st Gen. iPod Nano)
gcc 3.4.3 linux-arm
(custom target)
992 / 972
32/32 BS
35
32/32
2.0
32/32
19K
32/32 BS
PP5002 (x2)
90 MHz
1.7.2 Linux-iPod2
(3G iPod)
gcc 3.4.3 linux-arm
(custom target)

What to (not) submit

Please note that for 32-bit x86 targets (those with x86-any, x86-mmx, and x86-sse2 in their names), the C compiler and its version are largely irrelevant, because almost all of the performance-critical code is written in assembly language anyway. The above table specifies the compiler and version in all cases, but for these targets there's no need to submit multiple almost identical results that differ only in compiler choice and/or version.

For x86-64 targets there should be almost no performance difference across compilers/versions for DES-based crypt(3) hashes, for the same reason. However, other hash types may actually be affected by C compiler and its version, so multiple entries may be submitted.

Windows LanMan hashes are so very fast that their performance is significantly affected by various types of overhead, and you should not be surprised if performance changes by as much as 10% or even more between JtR builds and even between invocations (e.g., because of different code placement in caches), even though JtR tries to mitigate this effect to some extent. Thus, benchmarks that differ from existing ones for the same CPU and clock rate only at LanMan hashes are generally of little value, unless the difference is well over 10% and/or it is for a specific (known) reason (such as a relevant code change between JtR versions).

With few exceptions, the operating system should not significantly affect JtR performance, however it affects what JtR versions and make targets you may use and what compilers and versions are available. Hence, it makes sense to list it and also to include benchmarks on the same hardware, but with different operating systems (and thus with different make targets). Luckily, there are not as many different operating systems as there are different gcc versions. Multiple benchmarks for different versions of the same operating system flavor, with everything else staying the same as well, should not be listed. If desired, for clarity, listings with obsolete operating system versions may be replaced with those for currently maintained ones.

That said, if in doubt whether your benchmark results are of value, please do submit them, and please do not be offended if they are moved to another table or sub-page meant to hold likely insignificant results (yet to be created, if the need arises).

If you feel that a benchmark result is insignificant (given the criteria above) or incorrect, please move it into another table (create one) and indicate the reason for your decision in the “edit summary” for your change to this wiki page.

Thank you!

Back to John the Ripper user community resources.

 
john/benchmarks.txt · Last modified: 2008/08/05 17:21 by tcoppi
 
Recent changes RSS feed Creative Commons License Donate to DokuWiki Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki Powered by OpenVZ Powered by Openwall GNU/*/Linux