Benchmarking FreeBSD
Benchmarking FreeBSD
● Mostly developers
– The results are decent, but not rosy
– Significant space for improvement
● Some system administrator material
– What to do, what not to do
– Tuning?
● “Avoid benchmarking?”
– Do you need it?
Purpose of benchmarking...
● 2x IBM x3250 M3
● Xeon E3-1220 3.1 GHz, 4-core (no HTT)
● 32 GB RAM
● 4x SATA drive
RAID0
● 1 Gbps
NIC (2 ports)
Directly connected NICs
Test software
●
Accurate = if it
measures what we
think it measures
(or is it off the
mark)
●
Precise = is the
measured value
good
approximation of
the “real” one (or is
it affected by noise)
Systematic and random errors
300
250
MB/s 200
150
100
50
0
outside middle inside
diskinfo -vt /dev/da0
File systems are hard to measure
● Noise 400
350
300
100
50
0
1 2 3 4 5 6 7 8
Speaking of noise...
Reducing the difference
300
250
200 outside
MB/s middle
inside
150
100
50
0
partition whole drive
bonnie++
500
400
MB/s
300
200
100
0
Write Rewrite Read
4500
4000
3500
3000
2500
2000
1500
1000
500
0
Linux write FreeBSD 9.1 write FreeBSD 10 write
Blogbench FreeBSD 9.1 vs 10
x read-91
+ read-10
+----------------------------------------------------------------------+
|xx x * x x*x + * x +* + + + + +|
| |__________AM|________|______M__A_________________| |
+----------------------------------------------------------------------+
N Min Max Median Avg Stddev
x 11 509450 695303 600394 593580.45 60234.934
+ 11 577355 893889 695303 708560.45 102923.93
Difference at 95.0% confidence
114980 +/- 75005.3
19.3706% +/- 12.6361%
(Student's t, pooled s = 84325.5)
x write-91
+ write-10
+----------------------------------------------------------------------+
| + |
|+ + + ++* * x+ x x x x * x x+ x|
| |__________M_______A|_________________|M_________________| |
+----------------------------------------------------------------------+
N Min Max Median Avg Stddev
x 11 1299 2173 1734 1716.6364 287.0642
+ 11 1111 2104 1299 1416 296.7814
Difference at 95.0% confidence
-300.636 +/- 259.694
-17.5131% +/- 15.128%
(Student's t, pooled s = 291.963)
Why is Blogbench slow on
FreeBSD?
● A multithreaded mix of file operations
● On FreeBSD (UFS):
– open(O_WRITE)
– write()
– rename()
– etc ... block each other (exclusive lock)
– + writers block readers
● So called “write bias” of FreeBSD
Why is Blogbench slow on
FreeBSD?
884 100130 blogbench 1.472372 CALL open(0x7ffffebf5770,0x601<O_WRONLY|O_CREAT|O_TRUNC>,0x180<S_IRUSR|S_IWUSR>)
884 100190 blogbench 1.472381 CALL close(0x2a)
884 100162 blogbench 1.472382 CALL read(0x31,0x602f60,0x10000)
884 100141 blogbench 1.472386 CALL read(0x32,0x602f60,0x10000)
884 100190 blogbench 1.472387 CALL open(0x7ffff73b9ba0,0<O_RDONLY>,<unused>0)
884 100162 blogbench 1.472395 CALL read(0x31,0x602f60,0x10000)
884 100130 blogbench 1.472398 CALL write(0x2a,0x612f60,0x1df2)
884 100141 blogbench 1.472402 CALL read(0x32,0x602f60,0x10000)
884 100162 blogbench 1.472407 CALL close(0x31)
884 100130 blogbench 1.472412 CALL close(0x2a)
884 100190 blogbench 1.472403 CALL open(0x7ffff73b9ba0,0<O_RDONLY>,<unused>0)
884 100162 blogbench 1.472418 CALL open(0x7ffffabd5ba0,0<O_RDONLY>,<unused>0)
884 100130 blogbench 1.472421 CALL rename(0x7ffffebf5770,0x7ffffebf5ba0)
884 100141 blogbench 1.472415 CALL close(0x32)
884 100190 blogbench 1.472423 CALL read(0x2a,0x602f60,0x10000)
884 100141 blogbench 1.472430 CALL open(0x7ffffd5eaba0,0<O_RDONLY>,<unused>0)
884 100162 blogbench 1.472433 CALL read(0x31,0x602f60,0x10000)
884 100190 blogbench 1.472438 CALL read(0x2a,0x602f60,0x10000)
884 100130 blogbench 1.472442 CALL open(0x7ffffebf5770,0x601<O_WRONLY|O_CREAT|O_TRUNC>,0x180<S_IRUSR|S_IWUSR>)
884 100190 blogbench 1.472443 CALL close(0x2a)
884 100141 blogbench 1.472451 CALL open(0x7ffffd5eaba0,0<O_RDONLY>,<unused>0)
884 100162 blogbench 1.472451 CALL read(0x31,0x602f60,0x10000)
884 100190 blogbench 1.472450 CALL open(0x7ffff73b9ba0,0<O_RDONLY>,<unused>0)
884 100141 blogbench 1.472460 CALL read(0x2a,0x602f60,0x10000)
884 100130 blogbench 1.472464 CALL write(0x32,0x612f60,0x13f2)
884 100190 blogbench 1.472465 CALL open(0x7ffff73b9ba0,0<O_RDONLY>,<unused>0)
884 100162 blogbench 1.472461 CALL close(0x31)
884 100190 blogbench 1.472475 CALL read(0x31,0x602f60,0x10000)
884 100162 blogbench 1.472477 CALL open(0x7ffffabd5ba0,0<O_RDONLY>,<unused>0)
884 100141 blogbench 1.472480 CALL read(0x2a,0x602f60,0x10000)
884 100130 blogbench 1.472478 CALL close(0x32)
Why is Blogbench slow on
FreeBSD?
800000
close()
(not distinguishing
700000 between open(O_RD)
read() and open(O_WR) )
600000
500000 open()
400000
300000
write()
200000
100000
0
PostgreSQL pgbench
60000
50000
40000
30000
20000
10000
0
1 2 4 8 12 16 24 32 48 64 128
tmpfs is 40000
faster
30000
20000
10000
0
1 2 4 8 12 16 24 32 48 64 128
1200
1000
800
600
400
200
0
1 2 4 8 12 16 24 32 48 64 128
50000
40000
30000
20000
Scheduler issue
10000
0
1 2 4 8 12 16 24 32 48 64 128
Linux ramfs RO avg Linux remote ramfs RO avg FreeBSD tmpfs RO avg FreeBSD remote tmpfs RO avg
However...
160000
140000
120000
100000
80000
60000
40000
Linux wins
after 32 threads
20000
0
Threads 2 Threads 4 Threads 8 Threads 10 Threads 16 Threads 20 Threads 24 Threads 32
900
800
700
600
300
200
100
Linux – local MB/s Linux – NFSv3 MB/s Linux – NFSv4 MB/s FreeBSD – local MB/s FreeBSD – NFSv3 MB/s FreeBSD – NFSv4 MB/s
webproxy profile
800
700
600
500
Possible,
but improbable
400
300
200
100
Linux – local MB/s Linux – NFSv3 MB/s Linux – NFSv4 MB/s FreeBSD – local MB/s FreeBSD – NFSv3 MB/s FreeBSD – NFSv4 MB/s
Bullet Cache
500000
400000
300000
200000
100000
0
CentOS 6.3 FreeBSD 9.1 FreeBSD 10
100 conn 200 conn 300 conn 400 conn 500 conn
Result notes
GCC 4.7.2
39.35
SE +/- 0.00
GCC 4.8.0
37.91
SE +/- 0.00
15 30 45 60 75
Powered By Phoronix Test Suite 4.4.1
1. (CXX) g++ options: -m64 -ldl -lpthread -lrt
Why NOT benchmark?
Benchmarking FreeBSD
Ivan Voras <[email protected]>