Date: Tue, 22 Aug 1995 22:24:50 -0700 From: John Dyson <dyson> To: hackers@freebsd.org Subject: Here are my benchmark results, so far Message-ID: <199508230524.WAA10428@freefall.FreeBSD.org>
next in thread | raw e-mail | index | archive | help
I hesitate to post this to the mailing list, but I don't have time
to refine these numbers. Permission is granted to use this information
in any way that you see fit. Note that I don't warrantee this information
at all. However, I have tried to be as fair and complete as I could be.
Caveat Emptor.... Here goes!!!!
Note that unless otherwise stated, all of these runs were done on the
FreeBSD stable tree as of about 20 Aug 95. The Linux runs were done with
the Slackware 2.3 binaries and the Linux 1.3.20 kernel. It appears that
the performance of 1.3.20 is roughly the same as the 1.2.8 kernel. The
Multi-block I/O mode was not enabled on the FreeBSD-stable kernel, and the
kernel built was the standard GENERIC. The Linux kernel was stripped
down to that which would run on my machine (no extra drivers, but the
hard-disk driver was the IDE one.)
These results are not cooked in any way and quite raw. The runs on
the FreeBSD-V2.1 stable kernel were done with a kernel as directly
checked out of CVS and the kernel was not hacked on. Any modifications
to the tests have been outlined below, and every attempt has been made
to make sure that the results are presented fairly. In some cases the
results are in error, and instead of trying to present "corrected" info,
the actual results with annotation are given. Some results with more
current or differently tuned FreeBSD kernels have been provided for
comparison purposes.
Note that Linux was compiled with:
"-O2 -fomit-frame-pointer -fno-strength-reduce -m486"
And unless otherwise noted FreeBSD was compiled with:
"-O"
MACHINE:
486/66 DX2 Micronics ISA MB 20MB -- stock, no mods.
IDE drives: WD540H (128K cache version), IDE interface is
a cheap paddleboard.
---------------------------------------------------------
The following benchmarks measure the page fault performance
of a UNIX-like OS. The performance measured includes the fault
code itself and the paging-in code.
Checking fault performance on FreeBSD (gaussian)
Memory is now initialized, starting test
100 mmaps, 512 pages, 2560 pages touched per mmap
REAL TIME:
paging in time: 1695.8500 ms
average time: 49.4660 us
average time exc. paging in time: 16.5090 us
SYSTEM & USER TIME:
system time: 581.3000 ms
user time: 175.4230 ms
Checking fault performance on Linux (gaussian)
Memory is now initialized, starting test
100 mmaps, 512 pages, 2560 pages touched per mmap
REAL TIME:
paging in time: 8192.3850 ms
average time: 381.9265 us
average time exc. paging in time: 224.1606 us
SYSTEM & USER TIME:
system time: 9610.0000 ms
user time: 250.0000 ms
Checking fault performance on FreeBSD (backwards)
Memory is now initialized, starting test
100 mmaps, 512 pages, 2560 pages touched per mmap
REAL TIME:
paging in time: 2381.1970 ms
average time: 60.2987 us
average time exc. paging in time: 13.9302 us
SYSTEM & USER TIME:
system time: 614.2340 ms
user time: 210.0920 ms
Checking fault performance on Linux (gaussian)
Memory is now initialized, starting test
100 mmaps, 512 pages, 2560 pages touched per mmap
REAL TIME:
paging in time: 8192.3850 ms
average time: 381.9265 us
average time exc. paging in time: 224.1606 us
SYSTEM & USER TIME:
system time: 9610.0000 ms
user time: 250.0000 ms
Note that Linux has much slower paging and also
much slower page faulting than FreeBSD.
---------------------------------------------------------------
The following is the well-known IOZONE benchmark, with fsync
enabled:
FREEBSD V2.1-stable (no MULTI-BLOCK, normal config and build):
IOZONE: Performance Test of Sequential File I/O -- V2.01 (10/21/94)
By Bill Norcott
Operating System: POSIX 1003.1-1990 -- using fsync()
IOZONE: auto-test mode
MB reclen bytes/sec written bytes/sec read
1 512 1220161 6100805
1 1024 1508064 8388608
1 2048 1560671 11184810
1 4096 1290555 12201611
1 8192 1597830 13421772
2 512 1348921 5965232
2 1024 1626881 8659208
2 2048 1698958 10324440
2 4096 1731841 12201611
2 8192 1698958 13421772
4 512 1332185 5478274
4 1024 1516584 7354396
4 2048 1593088 8801162
4 4096 1579032 9942053
4 8192 1612224 10956549
8 512 1319093 5506368
8 1024 1569797 7405116
8 2048 1619520 8947848
8 4096 1612224 9942053
8 8192 1593088 10956549
16 512 1372194 1626881
16 1024 1544952 1607397
16 2048 1654455 1770390
16 4096 1668596 1837026
16 8192 1653182 1824540
Completed series of tests
FreeBSD V2.2-experimental compiled with
"-O2 -fomit-frame-pointer -fno-strength-reduce -m486, and MULTI-BLOCK"
(This is similar to the way Linux 1.3.20 is compiled)
IOZONE: Performance Test of Sequential File I/O -- V2.01 (10/21/94)
By Bill Norcott
Operating System: POSIX 1003.1-1990 -- using fsync()
IOZONE: auto-test mode
MB reclen bytes/sec written bytes/sec read
1 512 1458888 5592405
1 1024 1720740 6391320
1 2048 1890390 12201611
1 4096 2033601 14913080
1 8192 2033601 16777216
2 512 1533916 5835553
2 1024 1864135 8947848
2 2048 2130440 12201611
2 4096 2218474 14913080
2 8192 2255760 17895697
4 512 1529546 5263440
4 1024 1877171 7780737
4 2048 2122019 10129639
4 4096 2265278 12201611
4 8192 2462710 13421772
8 512 1529546 5289368
8 1024 1731841 7780737
8 2048 1992099 10129639
8 4096 2060924 11930464
8 8192 2134675 13256071
16 512 1495462 1870630
16 1024 1846503 2078880
16 2048 2062904 2184622
16 4096 2191309 2246321
16 8192 2138927 2282129
Completed series of tests
Linux 1.3.20:
IOZONE: Performance Test of Sequential File I/O -- V2.01 (10/21/94)
By Bill Norcott
Operating System: POSIX 1003.1-1990 -- using fsync()
IOZONE: auto-test mode
MB reclen bytes/sec written bytes/sec read
1 512 1565038 4559026
1 1024 1777247 6990506
1 2048 1691251 7489828
1 4096 1718977 8065969
1 8192 1718977 8065969
2 512 1436405 4462025
2 1024 1407484 6765006
2 2048 1487341 7231558
2 4096 1446311 7767229
2 8192 1487341 8065969
4 512 1536375 4369066
4 1024 1651300 6657625
4 2048 1600879 7358428
4 4096 1594792 7626007
4 8192 1644825 7767229
8 512 1613193 4279902
8 1024 1607013 6657625
8 2048 1553445 7294441
8 4096 1594792 7626007
8 8192 1701543 7839820
16 512 1585748 922839
16 1024 1556328 1179003
16 2048 1614746 1290555
16 4096 1662756 1305619
16 8192 1638400 1246449
Completed series of tests
Linux 1.3.20 with MULTI-BLOCK 16 enabled:
IOZONE: Performance Test of Sequential File I/O -- V2.01 (10/21/94)
By Bill Norcott
Operating System: POSIX 1003.1-1990 -- using fsync()
IOZONE: auto-test mode
MB reclen bytes/sec written bytes/sec read
1 512 1691251 4559026
1 1024 1807889 6990506
1 2048 1872457 7489828
1 4096 1839607 7489828
1 8192 1807889 8065969
2 512 1664406 4369066
2 1024 1855886 6553600
2 2048 1855886 7489828
2 4096 1664406 7767229
2 8192 1889326 8065969
4 512 1607013 4324024
4 1024 1565038 6765006
4 2048 1588751 7358428
4 4096 1607013 7767229
4 8192 1542023 7108989
8 512 1628855 4324024
8 1024 1740375 6657625
8 2048 1784810 7358428
8 4096 1804001 7626007
8 8192 1788615 7839820
16 512 1747626 954335
16 1024 1760463 985156
16 2048 1798201 1040770
16 4096 1777247 1213103
16 8192 1798201 1493964
Completed series of tests
NOTE:
Linux appears to have less overhead on write system calls, but
significantly higher overhead in reading buffer cache data. Note also, that
when Linux actually has to read from the disk drive, the performance suffers
significantly. Note also, that MULTI-BLOCK I/O doesn't appear to help
the performance of the Linux disk I/O quite as much as it helps FreeBSD.
------------------------------------------------------------
Below are the Bonnie results:
FreeBSD V2.1 - stable
File './Bonnie.4152', size: 20971520
Writing with putc()...done
Rewriting...done
Writing intelligently...done
Reading with getc()...done
Reading intelligently...done
Seeker 1...Seeker 2...Seeker 3...start 'em...done...done...done...
-------Sequential Output-------- ---Sequential Input-- --Random--
-Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --Seeks---
Machine MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU /sec %CPU
20 949 63.0 1711 16.6 819 14.5 946 61.5 1833 15.4 111.8 10.5
FreeBSD V2.2 - experimental running on J. Dyson's machine, with MULTI-BLOCK
enabled "-O2 -fno-strength-reduce":
File './Bonnie.417', size: 20971520
Writing with putc()...done
Rewriting...done
Writing intelligently...done
Reading with getc()...done
Reading intelligently...done
Seeker 1...Seeker 2...Seeker 3...start 'em...done...done...done...
-------Sequential Output-------- ---Sequential Input-- --Random--
-Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --Seeks---
Machine MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU /sec %CPU
20 1035 71.3 2221 18.9 1050 14.7 1023 63.8 2233 16.9 59.9 6.9
Linux 1.3.20:
File './Bonnie.7210', size: 20971520
Writing with putc()...done
Rewriting...done
Writing intelligently...done
Reading with getc()...done
Reading intelligently...done
Seeker 3...Seeker 2...Seeker 1...start 'em...done...done...done...
-------Sequential Output-------- ---Sequential Input-- --Random--
-Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --Seeks---
Machine MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU /sec %CPU
20 1055 89.5 2066 64.8 695 43.6 626 65.1 1326 68.7 235.1 47.1
NOTE: The very high random seeks and the sequential output perf are probably
due to the asynchronous writes that Linux uses. Note also that Linux appears
to use much more CPU for I/O operations. (It is probable, however, that the
FreeBSD version of bonnie does not properly measure the overhead of IDE PIO
operations.) If MULTI-BLOCK I/O is enabled, FreeBSD can easily surpass
the write performance of the Linux results above, but
the MULTI-BLOCK I/O mode has not been enabled for this Linux test.
------------------------------------------------------------------
FreeBSD Linux
Null syscall: 20 8 usecs
^^ Really a write system call to /dev/null,
not really null.
Getpid syscall: 7.99 5.57 usecs
Pipe latency: 284 79 usecs
UDP latency: 613 643 usecs
TCP latency: 689 1353 usecs
RPC/udp latency: 1117 1088 usecs
RPC/tcp latency: 1181 1967 usecs
TCP/IP connection: 1108 1550 usecs
Socket using localhost: 5.11 2.08 MB/sec
(A minor mod needed to be made to the socket using localhost benchmark
for FreeBSD to run the test correctly.)
USING STATIC PROGRAMS:
Process fork+exit: 3249 4380 usecs
Process fork+execve: 6838 9365 usecs
Process fork+/bin/sh -c: 27156 44115 usecs
USING STATIC PROGRAMS, FreeBSD compiled with -fomit-frame-pointer:
Process fork+exit: 2821 usecs
Process fork+execve: 5917 usecs
Process fork+/bin/sh -c: 25382 usecs
LINKED WITH SUNOS STYLE SHARED LIBS:
FreeBSD Linux
Process fork+exit: 6162 usecs -----
Process fork+execve: 27716 usecs -----
Process fork+/bin/sh -c: 49842 usecs -----
FreeBSD Compiled with -fomit-frame-pointer
Process fork+exit: 5716 usecs -----
Process fork+execve: 26356 usecs -----
Process fork+/bin/sh -c: 48124 usecs -----
LINKED WITH OLD-STYLE JUMP-TABLE SHARED LIBS
FreeBSD Linux
Process fork+exit: ------ 6629 usecs
Process fork+execve: ------ 19877 usecs
Process fork+/bin/sh -c: ------ 58735 usecs
Pipe bandwidth: 6.82 12.33 MB/sec
^^^^ Pipe buffer size being increased in V2.2,
this result will be close to 8-9MB.
File bandwidth: 1730 1734 KB/sec
Pagefaults on /tmp/XXX: 67 228 usecs
It appears that compiling FreeBSD with -fomit-frame-pointer doesn't help
much, but people in very time critical applications might want to compile
the kernel with this flag. However, by supplying this flag, kernel tracebacks
are frustrating.
---------------------------------------------------
mmap times in microseconds:
FreeBSD Linux
0.01 132 78
0.25 536 78
0.50 749 77
1.00 1092 77
2.00 1845 78
^^^^ Freebsd doesn't preload segments > 2MB (most shared libs
are smaller than that.)
3.00 117 75
4.00 114 77
5.00 125 79
6.00 147 79
7.00 117 80
8.00 133 79
Mmap times are not that critical, and the future pagefault times are spead
up signficantly by the methods used in FreeBSD.
-------------------------------------------------------------
File read bandwidth
FreeBSD Linux
0.02 2.35 2.25
0.03 5.09 4.58
0.06 9.93 9.35
0.12 12.37 10.18
0.19 7.96 10.12
^^^^^ GLITCH
0.25 13.33 9.80
0.38 12.68 8.95
0.50 10.27 8.61
0.75 10.60 8.29
1.00 13.91 8.15
1.50 13.85 8.06
2.00 12.59 8.03
2.50 13.04 8.03
3.00 10.02 7.96
3.50 10.36 7.94
4.00 11.16 7.94
5.00 11.18 7.91
6.00 10.38 7.95
7.00 11.34 7.95
8.00 11.25 7.94
Mmap read bandwidth:
FreeBSD Linux
0.02 26.66 7.88
0.03 27.70 8.44
0.06 26.65 7.91
0.12 27.04 7.58
0.19 25.34 7.38
0.25 24.64 7.07
0.38 21.48 6.64
0.50 21.42 6.48
0.75 21.66 6.35
1.00 22.74 6.31
1.50 22.61 6.63
2.00 22.23 6.60
2.50 15.43 6.82
3.00 15.43 6.69
3.50 15.61 6.59
4.00 15.64 6.75
5.00 15.40 6.11
6.00 15.94 6.07
7.00 15.36 5.85
8.00 15.59 5.58
Libc bcopy aligned
FreeBSD Linux
0.0625 28.05 19.33
0.1250 21.36 24.10
0.5000 16.17 16.57
1.0000 15.27 15.41
2.0000 15.17 15.45
4.0000 15.25 15.49
8.0000 2.57 0.17
Libc bcopy unaligned
FreeBSD Linux
0.0625 27.26 24.32
0.1250 23.61 21.08
0.5000 16.97 17.57
1.0000 16.37 16.64
2.0000 16.33 16.64
4.0000 16.33 16.50
8.0000 2.84 0.18
Unrolled bcopy aligned
FreeBSD Linux
0.0625 11.93 26.68
0.1250 11.83 21.33
0.5000 11.54 16.78
^^^^^ DATA PROBLEM, PROBABLY SOME DAEMON DECIDED TO DO SOMETHING
ADDITIONAL MEASUREMENTS HAVEN'T SHOWN THIS PROBLEM.
1.0000 15.41 15.58
2.0000 15.37 15.58
4.0000 14.78 15.56
8.0000 1.34 0.18
Unrolled bcopy unaligned
FreeBSD Linux
0.0625 25.48 7.34
0.1250 21.44 7.46
0.5000 16.50 6.61
1.0000 15.41 6.53
2.0000 15.13 6.50
4.0000 14.73 6.51
^^^^ REALLY ODD... I DON'T KNOW ABOUT
THESE NUMBERS..., SHOULD BE ABOUT
15MB/sec. Subsequent runs verify
that these measurements are wrong.
8.0000 1.29 0.18
Note that Linux does not appear to be able to run as nicely when memory starved.
The 8MB cp results show the effects of paging (thrashing.) FreeBSD can
manifest similar behaviour, but usually at a higher memory load.
-----------------------------------------------------------
File system latency
FreeBSD:
0k 1000 39 90
1k 1000 35 36
4k 1000 34 36
10k 1000 27 36
FreeBSD-2.2-experimental with async meta-writes turned on, much safer than
pure async in Linux case below:
0k 1000 219 228
1k 1000 133 86
4k 1000 99 186
10k 1000 59 161
Linux:
0k 1000 243 2065
1k 1000 197 2265
4k 1000 163 2025
10k 1000 117 1637
Note that the ASYNC METADATA and FILE I/O REALLY SHOWS UP HERE!!!!
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199508230524.WAA10428>
