Raw disk I/O performance on FreeBSD

Author: Willem Jan Withagen (wjw@withagen.nl), date: 13 october 2005

Introduction

Driven by remarks on the FreeBSD mailing lists, some information in an article and my personal curriosity, I started to look into "evaluation" of the raw I/O performance of disks.

Tests

Simple dd(1)

In general dd(1) is considered a (very) poor test for disk IO-performance, but in this case it is used as a simple first approach to see what is all going on, and to get a first indication of what to expect. So I created a simple setup and ran the first initial tests.

Setup

On a server with 2 disks, the OS (FreeBSD 5.4) is installed on the first disk. The second disk is not partitioned, formatted, or anything else. So it is only available as the raw device. Then dd(1) is used to write blocks of fixed size (from /dev/zero) to subsequent parts of the disk. Just until this disk is filled. dd(1) is used since it reports the transferrate all by itself, and looking at the code this would be fairly accurate. (This removes the burden to modify dd(1), or to write a special tool.)

Results

Each graph is based on 10 runs for each of the memory block sample sizes (1,5,10,20 Mbyte).

Diskindex is the reference to the location on the disk. The disksize is divided by the size of the write blocksize, giving the max. blockcount. The index then counts from 0 to max. blockcount.

Block Reading



Block Writing



Other disks:

BigFoot
DiamondMax9
WD2500YD
st38421
twa-single
wd800-gmirror
wd800-sata

Observations:

Systems

  • Dual Opteron 244, 1Gb Ram
  • Harddisk: Western Digital WD800 SATA disk (WD800JD), 8Mb cache
  • On both the server and clients all processes which are not required for the tests are terminated, especially cron(1), syslog(1) and sendmail(1).

    Do it Yourself

    to be filled

    Interesting other reading