armbian上的uas问题解决

  |   0 评论   |   0 浏览

背景

上文中用到了SSD硬盘做为N1盒子的外接磁盘。使用中会遇到卡顿的问题,即连接几十秒没有反应,然后又恢复正常的现象。

调查

通过vmstat可以看到,卡顿时,cpu的wa值为25~75,正常值为0,如下:

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 3  0 167680 1258412   7088 169088    0    1    34     5  146   71  1  0 98  1  0
 4  0 167680 1257908   7224 169892    0    0     0     0 2292 3621 77  4 19  0  0
 3  0 167680 1256648   7348 170732    0    0     0     0 2415 3961 71  4 25  0  0
 1  0 167680 1248080   7640 179308    0    0     0     0 1739 2556 79  4 16  0  0
 0  0 167680 1239764   7868 186908    0    0     0     0  513  676  6  2 92  0  0
 0  0 167680 1239764   7868 186908    0    0     0     0  345  538  0  0 99  0  0
 0  0 167680 1239764   7880 186920    4    0     4   449  579  884  1  0 95  4  0
 0  0 167680 1239764   7880 186920    0    0     0     0  468  716  2  0 98  0  0
 0  0 167680 1239764   7880 186920    0    0     0     0  391  603  0  0 99  0  0
 0  0 167680 1239764   7880 186920    0    0     0   363  385  582  0  0 100  0  0
 0  0 167680 1239796   7880 186920    0    0     0     0  495  788  0  0 99  0  0
 0  0 167680 1239732   7880 186920    0    0     0   467  425  650  0  0 99  0  0
 0  0 167680 1239480   7880 186920    0    0     0     0  440  672  2  0 98  0  0
 1  0 167680 1238972   7880 186924    0    0     0   457  373  535  2  0 97  0  0
 0  1 167680 1238560   7880 186928    0    0     0   313  385  596  0  0 95  5  0
 0  1 167680 1238560   7880 186928    0    0     0     0  510  828  0  0 75 25  0
 0  1 167680 1238560   7880 186928    0    0     0     0  476  756  1  0 74 25  0
 0  1 167680 1238560   7880 186928    0    0     0     0  347  543  0  0 75 25  0
 0  2 167680 1238560   7880 186920    3    0     3     0  373  591  0  0 68 32  0
 0  2 167680 1238560   7880 186928    0    0     0     0  338  536  0  0 50 50  0
 0  2 167680 1238056   7880 186928    0    0     0     0  585  939  0  0 50 50  0
 0  3 167680 1238056   7880 186924    1    0     1     0  434  680  1  0 50 50  0
 0  3 167680 1238056   7880 186928    0    0     0     0  369  578  0  0 50 50  0
 0  4 167680 1238056   7880 186928    1    0     1     0  346  542  0  0 29 70  0
 0  4 167680 1238056   7880 186928    0    0     0     0  579  955  0  0 25 75  0
 0  0 167680 1238536   7880 186904   17    0    17  5313  596  848  0  1 81 17  0

同时,在dmesg中可见:

[Apr 6 17:52] sd 0:0:0:0: [sda] tag#7 uas_eh_abort_handler 0 uas-tag 2 inflight: CMD
[  +0.000014] sd 0:0:0:0: [sda] tag#7 CDB: opcode=0x2a 2a 00 01 c9 d2 00 00 00 30 00
[  +0.023985] scsi host0: uas_eh_device_reset_handler start
[  +0.000059] usb 1-2: cmd cmplt err -2
[  +0.128099] usb 1-2: reset high-speed USB device number 2 using xhci-hcd
[  +0.151516] scsi host0: uas_eh_device_reset_handler success

初步判断出是linux内核对uas移动硬盘支持的不好。

USB驱动

确认使用了uas驱动。

# lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/0p, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/2p, 480M
    |__ Port 2: Dev 2, If 0, Class=Mass Storage, Driver=uas, 480M

由于N1盒子不支持USB3.0,但是还是使用了uas驱动。所以可能是这个原因,我们来禁用掉UAS。

禁用UAS

编辑文件 /boot/uEnv.ini,修改如下:

dtb_name=/dtb/amlogic/meson-gxl-s905d-phicomm-n1-new.dtb
bootargs=root=LABEL=ROOTFS rootflags=data=writeback rw console=ttyAML0,115200n8 console=tty0 no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 usb-storage.quirks=1d6b:0003:u,152d:0578:u,1d6b:0002:u

其中末尾的 usb-storage.quirks=1d6b:0003:u,152d:0578:u,1d6b:0002:u为新加入的,其中的A1:A2:u, A3:A4:u, A5:A6:u中的Axx系统,对应于 lsusb中的结果

$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 152d:0578 JMicron Technology Corp. / JMicron USA Technology Corp. JMS567 SATA 6Gb/s bridge
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

重启后,可以发现已经不现使用uas驱动了。

$ lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/0p, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/2p, 480M
    |__ Port 2: Dev 2, If 0, Class=Mass Storage, Driver=usb-storage, 480M

参考