Addonics SIS3124 Controller and T
dieterbsd at engineer.com
dieterbsd at engineer.com
Thu Feb 10 00:36:25 UTC 2011
Jose Amengual writes:
> Strangely enough just switching drives now I can see all ten, weird
> but is working now.
Perhaps there was a loose conection or something.
> I'm confused why you are referring to a JMB393s if my card has a
> siis3124 chip....or are you referring o the PMs?
If I'm reading
http://www.addonics.com/products/raid_tower/raid_rack.asp
correctly, it comes with 4 SATA Port Multipliers based on
the JMB393 chip.
Do you get something like
PM Product ID: 37261095
in dmesg? I just got a PM based on the Sil3726. So far so good.
I've been running some simple speed tests on it and various
controllers. If you and your machine have a few minutes to spare,
I'd love to see similar numbers for the siis3124 controller and the
JMB393 PM.
First I ran one disk at a time:
nforce4-ultra controller chipset ata(4)
ad4 249.404517 MB/s
ad6 250.143419 MB/s
ad8 239.214086 MB/s
ad10 249.628334 MB/s
SiI 3132 PCIe-x1 siis(4)
ada0 127.737664 MB/s
ada1 110.236024 MB/s
ada2 110.210423 MB/s
JMB363 PCIe-x1 ahci(4)
ada3 131.443644 MB/s
Sil3726 Port Multiplier
ada4 130.895997 MB/s
ada5 130.259701 MB/s
ada6 132.400908 MB/s
ada7 114.306864 MB/s
ada8 130.986963 MB/s
I need to rerun the tests (machine is busy right now) and see if the
results are consistant. Some of the differences may be due to the
different make & model drives.
2 disks at once - port multiplier drives ada4, ada5
48.034694 MB/s and 48.034701 MB/s
Total: 96.069395 MB/s
2 disks at once - same card (jmb363) ada3 direct connection, ada5 via PM
86.059754 MB/s and 85.664682 MB/s
Total: 171.724436 MB/s
3 disks at once - port multiplier drives ada4, ada5, ada6
31.728884 MB/s, 31.727878 MB/s, and 31.727715 MB/s
Total: 95.184477 MB/s
4 disks at once - port multiplier drives ada4, ada5, ada6, ada8
23.657665 MB/s 23.657404 MB/s 23.657416 MB/s 23.657436 MB/s
Total: 94.629921 MB/s
5 port multiplier disks at once
18.660235 MB/s 18.659920 MB/s 18.659928 MB/s 18.659925 MB/s
18.665027 MB/s
5 port multiplier disks at once plus the other port of the jmb363
105.348778 MB/s 17.821848 MB/s 17.821214 MB/s 17.821113 MB/s
17.821120 MB/s 17.821458 MB/s
PM total (5 drives): 89.106753 MB/s
Card total (6 drives): 194.455531 MB/s
Neither the 3132 nor the 363 controllers can max out the PCIe-x1 link
(250 MB/s each direction). Previous testing indicates that both
achive a higher total with one disk reading and the other writing.
(not sure why) Port multipliers may be the same, I haven't had time
to test that case yet. I also want to test the PM with the 3132.
Silicon Image SATA controllers are not the fastest. The JMB363 is
faster than the 3132, so I wonder if the JMB393 port multiplier is
faster than the Sil3726? I've read that the 3124 controller is
fast, the question is how fast?
Below is the small C program I used. It just reads a small amount
of data over and over again from the drive's RAM cache. This avoids
limitations of data density on the platters, rpm, seek time, etc.
/*
* read_disk_cache_speed.c
*
* Read data from a disk's RAM cache buffer.
* Useful for testing the speed of controllers and port multipliers
* without the limitation of how fast the disk can read data from the
* platters. Note that the drive's electronics could still be the
* limiting factor.
*
* Syntax: read_disk_cache_speed device readsize iterations
* FreeBSD:
* read_disk_cache_speed /dev/ada0 65536 10000
* NetBSD:
* read_disk_cache_speed /dev/rwd0c 65536 10000
*
* Original program was by:
* Manuel Bouyer <bouyer at antioche.eu.org>
* NetBSD: 26 ans d'experience feront toujours la difference
* Updated by:
* Dieter <dieterbsd at engineer.com>
* Added command line argument for buffer/read size.
* (originally hard coded at 64 KiB)
* Read data into drive's RAM buffer before beginning timing.
*
*/
#include <fcntl.h>
#include <unistd.h>
#include <sys/time.h>
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char **argv)
{
int fd; /* file descriptor */
int i; /* loop counter */
struct timeval tv0, tv1;
long t; /* elapsed time */
char *buffer;
long buffer_size;
if ( argc != 4 )
{
fprintf(stderr, "Syntax: %s device readsize iterations\n",
argv[0]);
fprintf(stderr, "Example: %s /dev/ada4 65536 10000\n", argv[0]);
exit(1);
}
buffer_size = atoi(argv[2]);
buffer = malloc(buffer_size);
if ( buffer == NULL )
{
perror("malloc failed");
exit(1);
}
fd = open(argv[1], O_RDONLY, 0);
if (fd < 0)
{
perror("open failed");
exit(1);
}
/* Get the data from the platter into the drive's RAM buffer
* before we start timing.
*/
if (read(fd, (void *)buffer, buffer_size) != buffer_size)
{
perror("read failed");
exit(1);
}
if (lseek(fd, 0, SEEK_SET) < 0)
{
perror("lseek failed");
exit(1);
}
if (gettimeofday(&tv0, NULL) < 0)
{
perror("gettimeofday failed");
exit(1);
}
for (i = 0; i < atoi(argv[3]); i++)
{
if (read(fd, (void *)buffer, buffer_size) != buffer_size)
{
perror("read failed");
exit(1);
}
if (lseek(fd, 0, SEEK_SET) < 0)
{
perror("lseek failed");
exit(1);
}
}
if (gettimeofday(&tv1, NULL) < 0)
{
perror("gettimeofday failed");
exit(1);
}
t = (tv1.tv_sec - tv0.tv_sec) * 1000000;
t = t + tv1.tv_usec - tv0.tv_usec;
printf("%ld us, %f MB/s\n", t,
((double)buffer_size * (double)i / 1000000) / ((double)t / 1000000));
exit(0);
}
Total: 93.305028 MB/s
More information about the freebsd-hardware
mailing list