Date: Wed, 09 Feb 2011 19:36:08 -0500 From: dieterbsd@engineer.com To: freebsd-hardware@freebsd.org Subject: Re: Addonics SIS3124 Controller and T Message-ID: <8CD96D1A47516BC-11A8-283B@web-mmc-d01.sysops.aol.com>
next in thread | raw e-mail | index | archive | help
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@antioche.eu.org> * NetBSD: 26 ans d'experience feront toujours la difference * Updated by: * Dieter <dieterbsd@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 !=3D 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 =3D atoi(argv[2]); buffer =3D malloc(buffer_size); if ( buffer =3D=3D NULL ) { perror("malloc failed"); exit(1); } fd =3D 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) !=3D 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 =3D 0; i < atoi(argv[3]); i++) { if (read(fd, (void *)buffer, buffer_size) !=3D 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 =3D (tv1.tv_sec - tv0.tv_sec) * 1000000; t =3D 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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?8CD96D1A47516BC-11A8-283B>