Feb 062013
 

Tonight I received a TOSHIBA DT01ACA300 3TB HDD. This is a 7200 RPM SATA III drive. Tests were run with FreeBSD 9.1 in the hardware listed below.

The hardware

We are testing on the following hardware:

  1. motherboard – SUPERMICRO MBD-H8SGL-O ATX Server Motherboard (Supermicro link): $224.99
  2. CPU – AMD Opteron 6128 Magny-Cours 2.0GHz 8 x 512KB L2 Cache 12MB L3 Cache Socket G34 115W 8-Core Server : $284.99
  3. RAM – Kingston 8GB 240-Pin DDR3 SDRAM ECC Registered DDR3 1600 Server Memory : 4 x $64.99 = $259.96
  4. PSU – PC Power and Cooling Silencer MK III 600W power supply : $99.99
  5. SATA card – LSI Internal SATA/SAS 9211-8i 6Gb/s PCI-Express 2.0 RAID Controller Card, Kit (LSI page): $319.99
  6. HDD for ZFS – Seagate Barracuda ST2000DM001 2TB 7200 RPM 64MB : 8 x $109.99 = $879.92

The drive being tested is not part of the base OS.

The devices

The LSI card:

mps0: <LSI SAS2008> port 0x8000-0x80ff mem 0xfde3c000-0xfde3ffff,0xfde40000-0xfde7ffff irq 28 at device 0.0 on pci1
mps0: Firmware: 14.00.01.00, Driver: 14.00.00.01-fbsd
mps0: IOCCapabilities: 185c<ScsiTaskFull,DiagTrace,SnapBuf,EEDP,TransRetry,IR>

The drives:

da0 at mps0 bus 0 scbus0 target 4 lun 0
da0: <ATA TOSHIBA DT01ACA3 ABB0< Fixed Direct Access SCSI-6 device 
da0: 600.000MB/s transfers
da0: Command Queueing enabled
da0: 2861588MB (5860533168 512 byte sectors: 255H 63S/T 364801C)

dd to raw device

root@heckler:/home/dan # dd if=/dev/zero of=/dev/da0 bs=32k count=300000
300000+0 records in
300000+0 records out
9830400000 bytes transferred in 53.709288 secs (183029796 bytes/sec)

root@heckler:/home/dan # dd if=/dev/zero of=/dev/da0 bs=64k count=300000
300000+0 records in
300000+0 records out
19660800000 bytes transferred in 106.232741 secs (185072887 bytes/sec)

root@heckler:/home/dan # dd if=/dev/zero of=/dev/da0 bs=128k count=300000
300000+0 records in
300000+0 records out
39321600000 bytes transferred in 212.234953 secs (185273912 bytes/sec)

root@heckler:/home/dan # dd if=/dev/zero of=/dev/da0 bs=256k count=300000
300000+0 records in
300000+0 records out
78643200000 bytes transferred in 423.508192 secs (185694637 bytes/sec)

root@heckler:/home/dan # dd if=/dev/zero of=/dev/da0 bs=1024k count=300000
300000+0 records in
300000+0 records out
314572800000 bytes transferred in 1695.812390 secs (185499765 bytes/sec)


That’s 177 MB/s.

The diskinfo

Here’s diskinfo:

# diskinfo -tv /dev/da0
/dev/da0
	512         	# sectorsize
	3000592982016	# mediasize in bytes (2.7T)
	5860533168  	# mediasize in sectors
	4096        	# stripesize
	0           	# stripeoffset
	364801      	# Cylinders according to firmware.
	255         	# Heads according to firmware.
	63          	# Sectors according to firmware.
	           Z2T5TSSAS	# Disk ident.

Seek times:
	Full stroke:	  250 iter in   6.302236 sec =   25.209 msec
	Half stroke:	  250 iter in   4.395477 sec =   17.582 msec
	Quarter stroke:	  500 iter in   7.240961 sec =   14.482 msec
	Short forward:	  400 iter in   1.999334 sec =    4.998 msec
	Short backward:	  400 iter in   2.338969 sec =    5.847 msec
	Seq outer:	 2048 iter in   0.163964 sec =    0.080 msec
	Seq inner:	 2048 iter in   0.172619 sec =    0.084 msec
Transfer rates:
	outside:       102400 kbytes in   0.580453 sec =   176414 kbytes/sec
	middle:        102400 kbytes in   0.652515 sec =   156931 kbytes/sec
	inside:        102400 kbytes in   1.098502 sec =    93218 kbytes/sec

phybs

Next, we run phybs:

# ./phybs -rw -l 1024 /dev/da0
   count    size  offset    step        msec     tps    kBps

  131072    1024       0    4096       59527    2201    2201
  131072    1024     512    4096       59320    2209    2209

   65536    2048       0    8192       31212    2099    4199
   65536    2048     512    8192       31780    2062    4124
   65536    2048    1024    8192       31896    2054    4109

   32768    4096       0   16384       11575    2830   11322
   32768    4096     512   16384       26017    1259    5037
   32768    4096    1024   16384       26197    1250    5003
   32768    4096    2048   16384       26188    1251    5004

   16384    8192       0   32768        9464    1731   13849
   16384    8192     512   32768       21142     774    6199
   16384    8192    1024   32768       23422     699    5595
   16384    8192    2048   32768       22764     719    5757
   16384    8192    4096   32768       10493    1561   12491

dd to the filesystem

After partitioning and newfs’ing, we have:

# gpart show da0 da0s1
=>        63  4294967232  da0  MBR  (2.7T)
          63         945       - free -  (472k)
        1008  4294966221    1  freebsd  (2T)
  4294967229          66       - free -  (33k)

=>         0  4294966221  da0s1  BSD  (2T)
           0  4294966216      1  freebsd-ufs  (2T)
  4294966216           5         - free -  (2.5k)

You’ll notice that this is a 2TB slice. I suspect that it the maximum for MBR.

Next, the dd:

[dan@heckler:/mnt/dan] $ dd if=/dev/zero of=testing32 bs=32k count=300000
300000+0 records in
300000+0 records out
9830400000 bytes transferred in 61.175199 secs (160692571 bytes/sec)

[dan@heckler:/mnt/dan] $ dd if=/dev/zero of=testing64 bs=64k count=300000
300000+0 records in
300000+0 records out
19660800000 bytes transferred in 122.130356 secs (160982091 bytes/sec)

[dan@heckler:/mnt/dan] $ dd if=/dev/zero of=testing128 bs=128k count=300000
300000+0 records in
300000+0 records out
39321600000 bytes transferred in 253.067559 secs (155379853 bytes/sec)

[dan@heckler:/mnt/dan] $ dd if=/dev/zero of=testing256 bs=256k count=300000
300000+0 records in
300000+0 records out
78643200000 bytes transferred in 536.249214 secs (146654201 bytes/sec)

[dan@heckler:/mnt/dan] $ dd if=/dev/zero of=testing512 bs=512k count=300000
300000+0 records in
300000+0 records out
157286400000 bytes transferred in 989.688996 secs (158925077 bytes/sec)

$ dd if=/dev/zero of=testing1024 bs=1024k count=300000
300000+0 records in
300000+0 records out
314572800000 bytes transferred in 1923.917453 secs (163506391 bytes/sec)

That ranges from 139-153 MB/s.

bonnie++

And finally, a quick bonnie++:

[dan@heckler:/mnt/dan] $ bonnie++ -s 66000
Writing a byte at a time...done
Writing intelligently...done
Rewriting...done
Reading a byte at a time...done
Reading intelligently...done
start 'em...done...done...done...done...done...
Create files in sequential order...done.
Stat files in sequential order...done.
Delete files in sequential order...done.
Create files in random order...done.
Stat files in random order...done.
Delete files in random order...done.
Version  1.97       ------Sequential Output------ --Sequential Input- --Random-
Concurrency   1     -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
heckler.unix 66000M   530  99 152464  29 58137  45  1036  98 154698  24 197.2  12
Latency             39965us     284ms    8428ms   67529us     883ms    2959ms
Version  1.97       ------Sequential Create------ --------Random Create--------
heckler.unixathome. -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16 +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++
Latency             43000us      58us      41us   46987us      36us      41us
1.97,1.97,heckler.unixathome.org,1,1360161593,66000M,,530,99,152464,29,58137,45,1036,98,154698,24,197.2,12,16,,,,,+++++,+++,+++++,+++,+++++,+++,+++++,+++,+++++,+++,+++++,+++,39965us,284ms,8428ms,67529us,883ms,2959ms,43000us,58us,41us,46987us,36us,41us

Trying a different partitioning

After running those tests, and not being happy with them, I tried again.

I created a small script to automate these tests:

$ cat ~/ddtest
#!/bin/sh

SIZES="32 64 128 256 1024 2048"

for size in ${SIZES}
do
  CMD="dd if=/dev/zero of=testing${size} bs=${size}k count=10k"
  echo ${CMD}
  `${CMD}`
done

The disk looks like this:

# gpart show da0
=>        34  5860533101  da0  GPT  (2.7T)
          34           6       - free -  (3.0k)
          40  5860533088    1  freebsd  (2.7T)
  5860533128           7       - free -  (3.5k)

Now for the first set of dd test?

$ time ~/ddtest
dd if=/dev/zero of=testing32 bs=32k count=10k
10240+0 records in
10240+0 records out
335544320 bytes transferred in 1.804411 secs (185957793 bytes/sec)
dd if=/dev/zero of=testing64 bs=64k count=10k
10240+0 records in
10240+0 records out
671088640 bytes transferred in 3.559059 secs (188557878 bytes/sec)
dd if=/dev/zero of=testing128 bs=128k count=10k
10240+0 records in
10240+0 records out
1342177280 bytes transferred in 7.622590 secs (176078906 bytes/sec)
dd if=/dev/zero of=testing256 bs=256k count=10k
10240+0 records in
10240+0 records out
2684354560 bytes transferred in 15.043288 secs (178442011 bytes/sec)
dd if=/dev/zero of=testing1024 bs=1024k count=10k
10240+0 records in
10240+0 records out
10737418240 bytes transferred in 61.112390 secs (175699531 bytes/sec)
dd if=/dev/zero of=testing2048 bs=2048k count=10k
10240+0 records in
10240+0 records out
21474836480 bytes transferred in 122.675087 secs (175054585 bytes/sec)

real    3m32.239s
user    0m0.072s
sys     1m1.035s

That is 166-180 MB/s and much faster than the previous partitioning scheme.

And for completeness:

$ df -h /mnt
Filesystem    Size    Used   Avail Capacity  Mounted on
/dev/da0      2.7T     69G    2.4T     3%    /mnt
Website Pin Facebook Twitter Myspace Friendfeed Technorati del.icio.us Digg Google StumbleUpon Premium Responsive

  3 Responses to “Benchmarking the TOSHIBA DT01ACA300”

  1. You might want to add to your benchmarks the tests I did with dd, use ‘iseek’ and read from 1TB and 2TB in to the disk, disks are faster at the start of the drive, and slower at the end of the drive

  2. Does that come out in the diskinfo output? Not quite….?

  3. After the fact, I realized, I’m doing this in the file system, not to a raw device.

    $  ~/ddtest1TB
    dd if=/dev/zero of=testing32 bs=32k count=10k iseek=1m
    10240+0 records in
    10240+0 records out
    335544320 bytes transferred in 1.748474 secs (191906941 bytes/sec)
    dd if=/dev/zero of=testing64 bs=64k count=10k iseek=1m
    10240+0 records in
    10240+0 records out
    671088640 bytes transferred in 3.830048 secs (175216777 bytes/sec)
    dd if=/dev/zero of=testing128 bs=128k count=10k iseek=1m
    10240+0 records in
    10240+0 records out
    1342177280 bytes transferred in 7.743439 secs (173330905 bytes/sec)
    dd if=/dev/zero of=testing256 bs=256k count=10k iseek=1m
    10240+0 records in
    10240+0 records out
    2684354560 bytes transferred in 15.310266 secs (175330367 bytes/sec)
    dd if=/dev/zero of=testing1024 bs=1024k count=10k iseek=1m
    10240+0 records in
    10240+0 records out
    10737418240 bytes transferred in 62.765609 secs (171071681 bytes/sec)
    dd if=/dev/zero of=testing2048 bs=2048k count=10k iseek=1m
    10240+0 records in
    10240+0 records out
    21474836480 bytes transferred in 127.189135 secs (168841753 bytes/sec)