DeLock 10x SATA AHCI controller not working properly

D. E cipher_nl at hotmail.com
Thu Oct 27 17:39:31 UTC 2016


Dear list,

I hope you guys can help me with my new AHCI controller that doesn't work well with FreeBSD yet.


*** Introduction

I have bought this very neat $80 SATA AHCI controller: http://www.delock.com/produkte/G_89384/merkmale.html
This controller is PCI-express 2.0 with 2 lanes, so 1GB/s bandwidth shared across 10 ports. For just $80 this is a great deal! It is also VERY power efficient, unlike SAS adapters which can use up to 8W when doing nothing. The controller itself it a 2-port Asmedia AHCI SATA controller with two port multipliers on it. Thus, each 5 ports are sharing one SATA/600 link. It pushes beyond 900MB/s when fully utilised.
The controller is detected by FreeBSD 11.0-RELEASE-p1 amd64 as a regular AHCI controller. It appears to work, in that it detects the disks that are connected to it and it can do I/O.


*** The problem

This controller generates various I/O errors and timeouts. But only in specific circumstances, where I think that NCQ or simultaneous access is a factor. Because when i start a simple dd read command for each harddrive connected to the controller, there are no errors or timeouts in the dmesg. But when importing a pool, creating a pool or scrubbing a pool that is empty, timeouts and I/O errors are 100% reproducable in just a few seconds. This is after dd commands have been running for hours straight without any hickup.

In other words, I believe this controller needs some kind of quirk. The controller is reported to be working properly on Linux.


*** What I already tried

I tried disabling MSI and MSI-X interrupts. I tried disabling NCQ although with limited effect: ZFS can be tuned to use one outstanding I/O, but I still got errors now and then.
Is there any way of doing some easy quirks to localize the problem and also get this controller working reliably, albeit slower?


*** Example errors when working with ZFS:

ahcich7: Timeout on slot 23 port 0
ahcich7: is 00000000 cs 00000000 ss 00000000 rs 00800000 tfd 50 serr 00000000 cmd 0004cf17
(ada9:ahcich7:0:0:0): READ_DMA. ACB: c8 00 00 ff 02 40 00 00 00 00 00 00
(ada9:ahcich7:0:0:0): CAM status: Command timeout
(ada9:ahcich7:0:0:0): Retrying command
ahcich17: Timeout on slot 30 port 0
ahcich17: is 00000000 cs 00000000 ss 00000000 rs 40000000 tfd 50 serr 00000000 cmd 0004c317
(aprobe0:ahcich17:0:0:0): SETFEATURES SET TRANSFER MODE. ACB: ef 03 00 00 00 40 00 00 00 00 46 00
(aprobe0:ahcich17:0:0:0): CAM status: Command timeout
(aprobe0:ahcich17:0:0:0): Retrying command


*** Detection logs:

# pciconf -lv
ahci1 at pci0:4:0:0:       class=0x010601 card=0x10601b21 chip=0x06251b21 rev=0x01 hdr=0x00
    vendor     = 'ASMedia Technology Inc.'
    class      = mass storage
    subclass   = SATA

# dmesg
pci4: <ACPI PCI bus> on pcib4
ahci1: <AHCI SATA controller> mem 0xfdafe000-0xfdafffff irq 16 at device 0.0 on pci4
ahci1: AHCI v1.31 with 12 6Gbps ports, Port Multiplier not supported
ahcich6: <AHCI channel> at channel 0 on ahci1
ahcich7: <AHCI channel> at channel 1 on ahci1
ahcich10: <AHCI channel> at channel 4 on ahci1
ahcich11: <AHCI channel> at channel 5 on ahci1
ahcich12: <AHCI channel> at channel 6 on ahci1
ahcich13: <AHCI channel> at channel 7 on ahci1
ahcich14: <AHCI channel> at channel 8 on ahci1
ahcich15: <AHCI channel> at channel 9 on ahci1
ahcich16: <AHCI channel> at channel 10 on ahci1
ahcich17: <AHCI channel> at channel 11 on ahci1

# devinfo -r
          pci4
              pcib4 bus numbers:
                  4
            ahci1
                Interrupt request lines:
                    0x109
                pcib4 memory window:
                    0xfdafe000-0xfdafffff
              ahcich6
                  I/O memory addresses:
                      0xfdafe100-0xfdafe17f
              ahcich7
                  I/O memory addresses:
                      0xfdafe180-0xfdafe1ff
              ahcich10
                  I/O memory addresses:
                      0xfdafe300-0xfdafe37f
              ahcich11
                  I/O memory addresses:
                      0xfdafe380-0xfdafe3ff
              ahcich12
                  I/O memory addresses:
                      0xfdafe400-0xfdafe47f
              ahcich13
                  I/O memory addresses:
                      0xfdafe480-0xfdafe4ff
              ahcich14
                  I/O memory addresses:
                      0xfdafe500-0xfdafe57f
              ahcich15
                  I/O memory addresses:
                      0xfdafe580-0xfdafe5ff
              ahcich16
                  I/O memory addresses:
                      0xfdafe600-0xfdafe67f
              ahcich17
                  I/O memory addresses:
                      0xfdafe680-0xfdafe6ff


PS. please click 'Reply All' when replying, since I am not subscribed to the list, meaning that I cannot easily reply on your reply unless you also send it to my email directly, using 'Reply All'. Thanks!


More information about the freebsd-current mailing list