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).
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) |
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!