Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
linux:benchmark [2008/05/05 18:04] a |
linux:benchmark [2010/08/18 14:57] (current) a |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | apt-get install contest dbench stress tiobench | + | ====== Benchmarking process / IO / latency ====== |
+ | |||
+ | links: | ||
+ | * [[http:// | ||
+ | |||
+ | |||
+ | apt-get install contest dbench stress tiobench | ||
FIXME | FIXME | ||
Line 15: | Line 21: | ||
Please download and run it on your dedicated or VPS. Then post your result here for discussion. Thanks! | Please download and run it on your dedicated or VPS. Then post your result here for discussion. Thanks! | ||
+ | |||
+ | ===== IO test ===== | ||
+ | |||
+ | * [[http:// | ||
+ | |||
+ | < | ||
+ | / | ||
+ | \--(# | ||
+ | /dev/sda3, 23 GB, 512B blocks: 66.1 IOs/s, 33 kB/s | ||
+ | /dev/sda3, 23 GB, 1024B blocks: 65.7 IOs/s, 65 kB/s | ||
+ | /dev/sda3, 23 GB, 2 kB blocks: 64.9 IOs/s, 129 kB/s | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | <code python|f iotest-2008-10-15.py> | ||
+ | # | ||
+ | # | ||
+ | # Copyright (c) 2008 Benjamin Schweizer. All rights reserved. | ||
+ | # | ||
+ | # Redistribution and use in source and binary forms, with or without | ||
+ | # modification, | ||
+ | # met: | ||
+ | # | ||
+ | # * Redistributions of source code must retain the above copyright | ||
+ | # | ||
+ | # * Redistributions in binary form must reproduce the above copyright | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # * Neither the name of Benjamin Schweizer nor the names of its | ||
+ | # | ||
+ | # from this software without specific prior written permission. | ||
+ | # | ||
+ | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS | ||
+ | # IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED | ||
+ | # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A | ||
+ | # PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||
+ | # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
+ | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||
+ | # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||
+ | # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||
+ | # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
+ | # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||
+ | # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
+ | # | ||
+ | # | ||
+ | # Abstract | ||
+ | # ~~~~~~~~ | ||
+ | # Benchmark disk IOs | ||
+ | # | ||
+ | # Authors | ||
+ | # ~~~~~~~ | ||
+ | # Benjamin Schweizer, http:// | ||
+ | # | ||
+ | # Changes | ||
+ | # ~~~~~~~ | ||
+ | # 2008-10-16, benjamin: initial release | ||
+ | # | ||
+ | # Todo | ||
+ | # ~~~~ | ||
+ | # - we'll see | ||
+ | # | ||
+ | |||
+ | import sys | ||
+ | import random | ||
+ | import time | ||
+ | |||
+ | def usage(): | ||
+ | print """ | ||
+ | |||
+ | usage: | ||
+ | |||
+ | iostat < | ||
+ | |||
+ | device | ||
+ | time := time in seconds | ||
+ | |||
+ | example: | ||
+ | |||
+ | iostat /dev/sda | ||
+ | |||
+ | """ | ||
+ | |||
+ | |||
+ | def greek(size): | ||
+ | """ | ||
+ | # Copyright (c) 1999 Martin Pohl, copied from | ||
+ | # http:// | ||
+ | _abbrevs = [ | ||
+ | (1<< | ||
+ | (1<< | ||
+ | (1<< | ||
+ | (1<< | ||
+ | (1<< | ||
+ | (1, '' | ||
+ | ] | ||
+ | |||
+ | for factor, suffix in _abbrevs: | ||
+ | if size > factor: | ||
+ | break | ||
+ | |||
+ | return `int(size/ | ||
+ | |||
+ | |||
+ | def iotest(dev, blocksize=512, | ||
+ | """ | ||
+ | fh = open(dev, ' | ||
+ | bof = 0 | ||
+ | fh.seek(0, | ||
+ | eof = fh.tell() | ||
+ | |||
+ | io_num = 0 | ||
+ | start_ts = time.time() | ||
+ | while time.time() < start_ts+t: | ||
+ | io_num += 1 | ||
+ | pos = random.randint(bof, | ||
+ | fh.seek(pos) | ||
+ | blockdata = fh.read(blocksize) | ||
+ | end_ts = time.time() | ||
+ | |||
+ | total_ts = end_ts - start_ts | ||
+ | |||
+ | print "%s, %sB, %sB blocks: %.1f IOs/s, %sB/s" % (dev, greek(eof), greek(blocksize), | ||
+ | |||
+ | return io_num/ | ||
+ | |||
+ | if __name__ == ' | ||
+ | if len(sys.argv) < 2: | ||
+ | usage() | ||
+ | raise SystemExit | ||
+ | |||
+ | device = sys.argv[1] | ||
+ | t = 10 | ||
+ | if len(sys.argv) == 3: | ||
+ | t = int(sys.argv[2]) | ||
+ | |||
+ | blocksize = 512 | ||
+ | try: | ||
+ | iops = 2 | ||
+ | while iops > 1: | ||
+ | iops = iotest(device, | ||
+ | blocksize *= 2 | ||
+ | except IOError, (err_no, err_str): | ||
+ | raise SystemExit(err_str) | ||
+ | except KeyboardInterrupt: | ||
+ | print " | ||
+ | |||
+ | # eof. | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Measuring Disk IO Performance (alternative) ==== | ||
+ | |||
+ | see: http:// | ||
+ | |||
+ | files: http:// | ||
+ | \\ | ||
+ | **Performance on AWS** | ||
+ | < | ||
+ | EBS blocks .. | ||
+ | |||
+ | root@api:~# ./ | ||
+ | /dev/sdf, 107.37 GB, 1 threads: | ||
+ | | ||
+ | 1 KiB blocks: | ||
+ | 2 KiB blocks: | ||
+ | 4 KiB blocks: | ||
+ | 8 KiB blocks: | ||
+ | 16 KiB blocks: | ||
+ | 32 KiB blocks: | ||
+ | 64 KiB blocks: | ||
+ | 128 KiB blocks: | ||
+ | 256 KiB blocks: | ||
+ | 512 KiB blocks: | ||
+ | 1 MiB blocks: | ||
+ | 2 MiB blocks: | ||
+ | 4 MiB blocks: | ||
+ | 8 MiB blocks: | ||
+ | 16 MiB blocks: | ||
+ | 32 MiB blocks: | ||
+ | |||
+ | MNT default device | ||
+ | |||
+ | [root@process3 ~]# ./ | ||
+ | /dev/sdb, 440.20 GB, 1 threads: | ||
+ | | ||
+ | 1 KiB blocks: 1216.9 IO/s, 1.2 MiB/s ( 10.0 Mbit/s) | ||
+ | 2 KiB blocks: 1441.9 IO/s, 2.8 MiB/s ( 23.6 Mbit/s) | ||
+ | 4 KiB blocks: | ||
+ | 8 KiB blocks: 1384.7 IO/s, 10.8 MiB/s ( 90.7 Mbit/s) | ||
+ | 16 KiB blocks: 1109.9 IO/s, 17.3 MiB/s (145.5 Mbit/s) | ||
+ | 32 KiB blocks: 1161.7 IO/s, 36.3 MiB/s (304.5 Mbit/s) | ||
+ | 64 KiB blocks: 1068.0 IO/s, 66.7 MiB/s (559.9 Mbit/s) | ||
+ | 128 KiB blocks: | ||
+ | 256 KiB blocks: | ||
+ | 512 KiB blocks: | ||
+ | 1 MiB blocks: | ||
+ | 2 MiB blocks: | ||
+ | 4 MiB blocks: | ||
+ | 8 MiB blocks: | ||
+ | 16 MiB blocks: | ||
+ | 32 MiB blocks: | ||
+ | 64 MiB blocks: | ||
+ | 128 MiB blocks: | ||
+ | 256 MiB blocks: | ||
+ | 512 MiB blocks: | ||
+ | 1 GiB blocks: | ||
+ | </ | ||