分享

Raspberry Pi 4 USB3.0 SSD 之间传输数据的速度很慢

 zip11 2022-06-19 发布于湖北

https://forums./viewtopic.php?f=28&t=245931

我们已经看到使用多种类型的 USB3.0 到 SSD 适配器或使用原生 USB3.0 磁盘驱动器时性能极度下降的报告。这篇文章详细说明了为什么与 Pi 4 之前的模型的行为存在差异以及推荐的解决方法。

在 Pi 4 之前,USB 主机控制器软件不支持 DMA 分散-收集操作。由于此限制,未启用 USB 附加 SCSI (UAS) 驱动程序。在 Pi 4 中,由于 xHCI 驱动程序确实支持分散收集,并且为了从连接 USB3.0 的 SSD/磁盘中获得最大性能,我们默认启用了 UAS。

与 USB 大容量存储相比,UAS 是一种升级的传输协议——命令和数据被分离到不同的队列中,多个未完成的命令可以同时运行,这与 USB 大容量存储在命令和数据之间的锁步关系相反。这允许 4GBps USB3.0 传输更好地饱和,因为可以有连续的数据流进出设备。

很少见支持 UAS 的 USB2.0 设备。目前市场上几乎所有的 USB3.0 设备都支持 UAS。应该注意的是,如果您将 USB3.0 UAS 设备插入 Pi 4 上的 USB2.0 端口,仍将使用 UAS 驱动程序 - 但最高速度较慢。

UAS 很棒,直到您遇到未完全实现 UAS 规范的 UAS 设备。通常,这些设备会在发出它们不喜欢的 UAS 命令时停止响应,或者在极少数情况下可能会丢弃可能导致文件系统损坏的写入数据。

Linux 内核有一个内置的黑名单,用于在使用 UAS 时已知不可靠的设备。这不是一个详尽的列表 - 如果制造商发布具有不同产品 ID 的新版本控制器,黑名单将不再匹配。

行为不端的 UAS 设备最常见的症状是
- 性能极慢 - 在每秒千字节范围内
- 设备频繁断开连接 - 与桌面重复显示“插入的可移动媒体”对话框
- 内核消息日志 (dmesg) 报告与 UAS 设备相关的错误,



这些错误也可能由于电源质量差或 Pi 的最大 1.2A 下行 USB 端口电流过载而出现,但如果在使用有源集线器时仍然存在,则它们是真正的 UAS 问题。

所有 UAS 驱动器都必须支持大容量存储作为备用选项。可以告诉内核忽略设备的 UAS 接口而只使用大容量存储 - 为此目的,usb-storage 驱动程序有一个“怪癖”选项。由于 UAS 内置在内核中以允许将根文件系统安装在 SSD 上,因此该怪癖需要作为模块参数进入 cmdline.txt。此参数与 USB 供应商 ID (vid)、产品 ID (pid) 匹配,并覆盖了禁用此设备特定功能的指定怪癖。

1. 找到你的 USB SSD 的 VID 和 PID
断开 USB SSD。在终端窗口中,运行命令sudo dmesg -C
现在,插入 SSD 并运行不带参数的dmesg 

idVendor 和 idProduct 是您需要记下的两个十六进制数字。

1a。多个 SSD
如果您将多个 USB SSD 设备插入单个 Pi 4,则对于遇到问题的每个设备,重复上面的步骤 1 并记下每个 idVendor 和 idProduct 对。

2. 将 quirks 添加到 /boot/cmdline.txt
以 root 身份运行文本编辑器 -从控制台执行 sudo nano /boot/cmdline.txt或从桌面执行 sudo leafpad /boot/cmdline.txt
在参数行的开头,添加文本usb-storage.quirks=aaaa:bbbb:u其中aaaa是您设备的 idVendor,bbbb是 idProduct。因此,字符串上方的设备将是usb-storage.quirks=2109:0715:u

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多