Addonics SIS3124 Controller and T

Jose Amengual jose.amengual at gmail.com
Thu Feb 10 07:18:25 UTC 2011


On 2011-02-09, at 4:36 PM, dieterbsd at engineer.com wrote:

> Jose Amengual writes:
>> Strangely enough just switching drives now I can see all ten, weird
>> but is working now.
> 
> Perhaps there was a loose connection or something.

I think so 
> 
>> 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.

I see....
> 
> Do you get something like
> 
>  PM Product ID: 37261095

I will check
> 
> 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.
> 
> 
I check the raid controler and it doesn't have anything to enable any level of caching but I have a Supermicro sata controller with cache memory and and Intel chip that I will use for some testings.
> /*
> * 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);
> }
I will use your program to test my hds and I will let you know.
> 
> Total: 93.305028 MB/s
> 
> 
> _______________________________________________
> freebsd-hardware at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hardware
> To unsubscribe, send any mail to "freebsd-hardware-unsubscribe at freebsd.org"



More information about the freebsd-hardware mailing list