마벨 sata controller (88se91xx, 88se92xx)에 사람 피곤하게 만드는 벌레가 있네요.

Necromancer의 이미지

데이터서버로 쓰기 위해 스카이레이크 업그레이드한 시스템에 SATA가 부족해서 SATA 확장카드를 달았습니다. 국내에서는 2port밖에 없어서 아마존에서 4port 확장카드 직배송 시켰는데, 주문 후 1주일만에 통관까지 다 끝나고 제손에 들어 왔습니다 ㄷㄷㄷ. 아마존 직배가 보통 2~3주 정도 걸렸는데 ㄷㄷㄷ

컨트롤러 칩셋이 88se9230이었는데 이런저런 머리아프게 만드는 문제가 있더군요.

1) IOMMU 관련 버그...
커널에서 IOMMU 기능이 활성화되어 있을 경우 커널 로그에 다음 에러 메시지가 무지막지하게 떨어지고, 컨트롤러에 연결된 하드들은 모두 인식 안됩니다. 에러 메시지 패턴은 아래와 같은데, 에러메시지에 있는 qc timeout으로 구글 검색하면 외국 사람들 경험담 쏟아져 나옵니다. ㄷㄷㄷ

Jun 23 01:25:24 main kernel: ata8.00: qc timeout (cmd 0xec)
Jun 23 01:25:24 main kernel: ata8.00: failed to IDENTIFY (I/O error, err_mask=0x4)
Jun 23 01:25:24 main kernel: ata14.00: qc timeout (cmd 0xa1)
Jun 23 01:25:24 main kernel: ata14.00: failed to IDENTIFY (I/O error, err_mask=0x4)

찾아보니 마벨 칩셋 모두가 IOMMU가 활성화된 상태에서 DMA 전송할때 문제를 일으킨다고 합니다.
해결방법은 다음과 같습니다.
1. 커널의 IOMMU 옵션 끄기 혹은 커널 파라미터에 iommu=off 추가
2. BIOS에서 가상화 관련 기능 모두 OFF(CPU쪽의 VT-d도 꺼야 하고, PCIe 설정 쪽에도 IOV 등 가상화 가속 기능들이 있는데 이거 전부 다 OFF)
하나만 해도 되지만 둘 다 하세요.

2) 무지막지하게 쏟아지는 PCIe AER 에러
에러메시지는 다음과 같은 형태입니다. 외국에서도 이게 messages 파일에 수백메가 단위로 쌓여서 골머리 썩이는 분들이 있더군요.

pcieport 0000:00:1c.4: AER: Corrected error received: id=00e4
pcieport 0000:00:1c.4: PCIe Bus Error: severity=Corrected, type=Data Link Layer, id=00e4(Transmitter ID)
pcieport 0000:00:1c.4:   device [8086:a114] error status/mask=00001000/00002000

외국 사이트에서 권장하는 해결방법은 커널 컴파일할때 PCIe AER 드라이버를 아예 빼버리거나 pci=noaer 등을 넣어서 저거 안나오게 하는 겁니다.
근데 저는 CSM 모드 활성화라는 이상한(?) 방법으로 해결했습니다.
CSM모드 활성화되면서 구형 BIOS와 호환되는 모드로 동작하면서 해당 카드의 BIOS가 동작하게 되면 문제가 안 생기는 것 같습니다.
참고로 RAID 기능이 들어간 모든 SATA Controller는 자체 BIOS가 있고 RAID 등을 설정하는 셋업화면도 나옵니다.
이게 BIOS 방식이 많아서 요즘 보드에 달려있는 EFI와 문제 많이 일으키더군요.

3) 하드 장시간
이건 확인중 입니다.
echo "scsi remove-single-device x x x x" 로 해당 컨트롤러에 연결된 하드를 모두 OFF시킨 후 나중에 echo "scsi add-single-device"로 하드를 다시 가동시키면 앞 1번의 에러메시지가 쏟아지면서 하드가 인식이 안되는 증상입니다.
=> 이건 뭐 답이 없네요.
밤에는 하드 off하고 ssd만으로 돌아가는데, 전날밤 off 후 다음날 on 할려할때 이런일 떨어지면 리부팅밖에 답이 없다는.
검색하기도 애매 하고..
ahci 드라이버 업뎃 기대해 봅니다.

** Xen 등등 하이퍼바이저로 가상머신 여럿 돌리실 분들은 SATA 모자라도 마벨만큼은 무조건 피하세요. IOMMU 문제를 우회하는 조치들은 다 가상화 가속을 끄는거라서 퍼포먼스에서 손해 클겁니다.
** 마벨 sata 칩셋 중 88se91xx는 거의 다 지원되지만 88se92xx는 9230만 지원됩니다. 커널 드라이버 소스 보면 9230밖에 없음. 최악의 경우 찝찝한 제조사 드라이버 써야 하는 상황이 ㅠㅠ

하드 추가하는데 이렇게 힘들 줄이야