From: Yanteng Si <si.yanteng@linux.dev>
To: Kefan Bai <baikefan@leap-io-kernel.com>, alexs@kernel.org
Cc: dzm91@hust.edu.cn, corbet@lwn.net, linux-doc@vger.kernel.org,
doubled@leap-io-kernel.com
Subject: Re: [PATCH v4 6/8] docs/zh_CN: Add ehci.rst translation
Date: Thu, 4 Dec 2025 10:35:54 +0800 [thread overview]
Message-ID: <533fcca9-a059-4130-a997-e4cd117e1d14@linux.dev> (raw)
In-Reply-To: <6b20aeb2834f502ade56a7f20e8d585e73441d3b.1764674650.git.baikefan@leap-io-kernel.com>
在 2025/12/2 19:56, Kefan Bai 写道:
> Translate .../usb/ehci.rst into Chinese
>
> Update the translation through commit 570eb861243c
> ("docs: usb: replace some characters")
>
> Signed-off-by: Kefan Bai <baikefan@leap-io-kernel.com>
Reviewed-by: Yanteng Si <siyanteng@cqsoftware.com.cn>
Thanks,
Yanteng
> ---
> Documentation/translations/zh_CN/usb/ehci.rst | 216 ++++++++++++++++++
> 1 file changed, 216 insertions(+)
> create mode 100644 Documentation/translations/zh_CN/usb/ehci.rst
>
> diff --git a/Documentation/translations/zh_CN/usb/ehci.rst b/Documentation/translations/zh_CN/usb/ehci.rst
> new file mode 100644
> index 000000000000..492fc45341f4
> --- /dev/null
> +++ b/Documentation/translations/zh_CN/usb/ehci.rst
> @@ -0,0 +1,216 @@
> +.. SPDX-License-Identifier: GPL-2.0
> +.. include:: ../disclaimer-zh_CN.rst
> +
> +:Original: Documentation/usb/ehci.rst
> +:翻译:
> +
> + 白钶凡 Kefan Bai <baikefan@leap-io-kernel.com>
> +
> +:校译:
> +
> +
> +
> +=========
> +EHCI 驱动
> +=========
> +
> +2002年12月27日
> +
> +EHCI驱动用于支持USB 2.0的主机控制器硬件与高速USB 2.0设备通信。
> +USB 2.0兼容USB 1.1标准,它定义了三种传输速率:
> +
> + - 高速 480 Mbit/sec (60 MByte/sec)
> + - 全速 12 Mbit/sec (1.5 MByte/sec)
> + - 低速 1.5 Mbit/sec
> +
> +USB 1.1仅支持全速与低速。高速设备可以在USB 1.1系统上使用,
> +但速度会下降到USB 1.1的速度。
> +
> +USB 1.1设备也可以在USB 2.0系统上使用。
> +当它们插入EHCI控制器时,会被交由USB 1.1的伴随(companion)控制器处理,
> +该控制器通常为OHCI或UHCI。
> +
> +当USB 1.1设备插入USB 2.0集线器时,
> +它们通过集线器中的事务转换器(Transaction Translator,TT)与EHCI控制器交互,
> +该转换器将低速或全速事务转换为高速分割事务,从而避免浪费传输带宽。
> +
> +截至本文撰写时,该驱动已在以下EHCI实现上成功运行(按字母顺序):
> +Intel、NEC、Philips 和 VIA。
> +其他供应商的EHCI实现正在陆续问世;
> +预计该驱动在这些实现上也可正常运行。
> +
> +自2001年年中开始,usb存储设备已可使用(在2.4版EHCI驱动下性能良好),
> +集线器从2001年底开始可用,而其他类型的高速设备似乎因USB 2.0原生硬件
> +普及较慢而推迟上市。从2002年初开始,带USB 2.0的系统陆续上市,
> +并在2002年下半年变得更加普及。
> +
> +注意:USB 2.0的支持不仅仅包含EHCI,还需要对Linux-USB核心API进行一些修改,
> +包括Hub驱动,但这些修改通常不会影响USB核心对USB设备驱动暴露的基本API。
> +
> +- David Brownell
> + <dbrownell@users.sourceforge.net>
> +
> +
> +功能性
> +======
> +
> +该驱动会定期在x86硬件上进行测试,并已在PPC硬件上使用,因此大小端问题应已解决。
> +相信它已经处理好所有PCI相关的细节,
> +因此在具有特殊DMA映射问题的系统上I/O也应能正常运行。
> +
> +传输类型
> +--------
> +
> +截至本文撰写时,该驱动应该已经可以很好地处理所有的控制传输、批量传输和中断传输,
> +包括通过USB 2.0 Hub中的事务转换器与USB 1.1设备的通信,但仍可能存在bug。
> +
> +已经实现对高速等时ISO传输的支持,但截至本文撰写时,还没有Linux驱动程序使用该支持。
> +
> +通过事务转换器实现的全速等时传输目前尚未支持。
> +需要注意的是,用于全速设备的等时拆分事务与高速等时传输
> +在EHCI中采用完全不同的数据结构,因此相关代码几乎无
> +法共用。因此,即使连接到高速总线,目前大多数USB音频和视频类设备
> +也无法正常使用等时传输功能。
> +
> +驱动行为
> +--------
> +
> +所有类型的传输都可以排队。
> +这意味着来自不同接口(或通过 usbfs)的控制传输不会互相干扰,
> +并且中断传输可以使用1帧的周期,而无需担心由于中断处理成本导致的数据丢失。
> +
> +
> +EHCI根集线器代码会将USB 1.1设备交给其伴随控制器处理。
> +EHCI驱动无需了解其他控制器的驱动程序;
> +已经正常工作的OHCI或UHCI驱动,无需因为EHCI的存在而做任何修改。
> +
> +存在一些电源管理相关的问题;挂起/恢复行为目前不太正确。
> +
> +此外,在调度周期性事务(中断和等时传输)时采用了一些简化处理。
> +这些简化会限制可调度的周期性传输数量,并且无法使用小于1帧的轮询间隔。
> +
> +使用方式
> +=========
> +
> +假设你有一个EHCI控制器,并且已将此驱动编译为模块,可如下加载::
> +
> + # modprobe ehci-hcd
> +
> +卸载方式::
> +
> + # rmmod ehci-hcd
> +
> +你还应加载一个伴随控制器的驱动,例如ohci-hcd或uhci-hcd。
> +如果EHCI驱动出现问题,只需卸载对应模块,
> +伴随控制器驱动就会接手之前EHCI处理的所有设备(但速度更慢)。
> +
> +传递给modprobe的模块参数:
> +
> + log2_irq_thresh (默认 0):
> + 控制默认中断延迟的对数值(以微帧为单位)。
> + 默认值0表示1个微帧(125 微秒)。
> + 最大值6表示2^6=64个微帧。
> + 该值控制EHCI控制器发出中断的频率。
> +
> +如果你在2.5内核上使用此驱动,并且启用了USB调试支持,
> +你将在任何EHCI控制器的sysfs目录中看到三个文件:
> +
> +"async"
> +输出异步调度队列,用于控制传输和批量传输。
> +显示每个活动的qh和挂起的qtd,通常每个urb一个qtd。
> +(对usb存储进行磁盘I/O时看看,可看到请求队列!)
> +
> +"periodic"
> +输出周期性调度队列,用于中断传输和等时传输。不显示qtd。
> +
> +"registers"
> +显示控制器寄存器状态。
> +
> +
> +设备驱动程序通常不需要关心自己是否运行在EHCI上,
> +但可能需要检查usb_device->speed是否是USB_SPEED_HIGH。
> +高速设备可以执行全速(或低速)设备无法完成的操作,
> +例如高带宽的周期性传输(中断传输或等时传输)。
> +此外,设备描述符中的某些值(如周期性传输的轮询间隔)在高速模式下使用不同的编码方式。
> +
> +务必通过USB 2.0集线器测试设备驱动。
> +当使用事务转换器时,这些集线器会以不同方式报告某些故障(如断开连接)。
> +一些驱动在遇到与OHCI或UHCI报告不同的故障时可能会表现异常。
> +
> +软件性能
> +========
> +
> +USB 2.0吞吐量受两个主要因素制约:主机控制器处理请求的速度,以及设备响应请求的速度。
> +所有设备都遵循480Mbit/sec的原始传输速率,
> +但总吞吐量还会受到诸如单个高速数据包之间的延迟、驱动程序调度策略,
> +以及系统整体负载等因素的影响。
> +延迟也是性能考量因素。
> +
> +批量传输通常用于对吞吐量有严格要求的场景。
> +需要注意的是,批量传输总是以512字节的数据包为单位,
> +并且在一个USB 2.0微帧中最多可容纳13个这样的数据包。
> +八个USB 2.0微帧构成一个USB 1.1帧;
> +一个微帧的时间为1毫秒 ÷ 8 = 125微秒。
> +
> +因此,当硬件和设备驱动软件都允许时,
> +批量传输可提供超过50 MByte/sec的带宽。
> +周期性传输模式(等时传输和中断传输)允许使用更大的数据包,
> +从而使传输速率接近标称的480MBit/sec。
> +
> +硬件性能
> +--------
> +
> +截至本文撰写时,单个USB 2.0设备的最大传输速率通常约为20 MByte/sec。
> +这当然会随着时间改变:一些设备现在更快,一些更慢。
> +
> +第一代NEC EHCI实现似乎存在约28 MByte/sec的硬件瓶颈。
> +虽然这足以让单设备跑到20 MByte/sec,
> +但将三个此类设备放在同一总线上不能达到60 MByte/sec。
> +问题似乎在于控制器硬件无法同时进行USB与PCI访问,
> +因此每个微帧中只尝试6或7次USB事务,而不是13次。
> +(对一个比其他产品早上市一年的芯片来说,这是个合理的妥协!)
> +
> +
> +预计更新的实现会进一步优化这一点,
> +通过投入更多芯片面积来解决问题,
> +使新的主板芯片组更接近60 MByte/sec的目标。
> +这包括NEC的更新实现,以及其他厂商的实现。
> +
> +
> +主机接收来自EHCI控制器的请求,完成中断的最小延迟为一个微帧(125 微秒)。
> +该延迟可以通过模块参数进行调整设置。
> +默认情况下,ehci-hcd驱动使用最小延迟,
> +这意味着当你发出控制或批量请求时,
> +通常可以预期在不到250微秒内获知完成情况(具体取决于传输大小)。
> +
> +软件性能
> +--------
> +
> +即使要达到20 MByte/sec的传输速率,Linux-USB设备驱动也必须保持EHCI队列满。
> +这意味着发出较大的请求,或在需要发出一系列小请求时,使用批量排队(bulk queuing)。
> +如果驱动未做到这一点,那么会直接从性能结果上表现出来。
> +
> +
> +在典型场景下,使用usb_bulk_msg() 以4KB块循环写入,
> +会浪费超过一半的USB 2.0带宽。
> +I/O完成与驱动发出下一次请求之间的延迟通常比一次I/O操作所需的时间更长。
> +如果同样的循环改用16KB块,会有所改善;使用128KB块的序列则能大幅减少浪费。
> +
> +
> +与其依赖如此大的I/O缓冲区来提高同步I/O的效率,
> +不如直接向主机控制器队列多个(批量)请求,并等待它们全部完成,或在出错时取消。
> +这种URB排队方式对所有USB 1.1主机控制器驱动也适用。
> +
> +
> +在Linux 2.5内核中,定义了新的 usb_sg_*() API 调用;
> +它们会将scatterlist中的所有缓冲区排入队列。
> +它们还使用scatterlist的DMA映射(可能会使用IOMMU)并减少中断次数,
> +这些都有助于高速传输尽可能高效地运行。
> +
> +待办:
> + 中断传输和等时(ISO)传输的性能问题。
> + 这些周期性传输都是完全调度的,因此,主要问题可能在于如何触发高带宽模式。
> +
> +待办:
> + 通过sysfs的uframe_periodic_max参数,可以分配超过标准80%的周期性带宽。
> + 后续将对此进行说明。
> --
> 2.52.0
>
next prev parent reply other threads:[~2025-12-04 2:36 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-02 11:56 [PATCH v4 0/8] Add Chinese translation for USB subsystem Kefan Bai
2025-12-02 11:56 ` [PATCH v4 1/8] docs/zh_CN: Add index.rst translation Kefan Bai
2025-12-03 2:34 ` Yanteng Si
2025-12-05 7:24 ` BaiKefan
2025-12-02 11:56 ` [PATCH v4 2/8] docs/zh_CN: Add acm.rst translation Kefan Bai
2025-12-02 11:56 ` [PATCH v4 3/8] docs/zh_CN: Add authorization.rst translation Kefan Bai
2025-12-03 2:29 ` Yanteng Si
2025-12-02 11:56 ` [PATCH v4 4/8] docs/zh_CN: Add chipidea.rst translation Kefan Bai
2025-12-03 5:31 ` Yanteng Si
2025-12-02 11:56 ` [PATCH v4 5/8] docs/zh_CN: Add dwc3.rst translation Kefan Bai
2025-12-04 2:28 ` Yanteng Si
2025-12-02 11:56 ` [PATCH v4 6/8] docs/zh_CN: Add ehci.rst translation Kefan Bai
2025-12-04 2:35 ` Yanteng Si [this message]
2025-12-02 11:56 ` [PATCH v4 7/8] docs/zh_CN: Add usbmon.rst translation Kefan Bai
2025-12-04 2:47 ` Yanteng Si
2025-12-02 11:56 ` [PATCH v4 8/8] docs/zh_CN: Add CREDITS translation Kefan Bai
2025-12-04 2:51 ` Yanteng Si
2025-12-04 2:41 ` [PATCH v4 0/8] Add Chinese translation for USB subsystem Yanteng Si
2025-12-05 10:01 ` BaiKefan
2025-12-05 12:10 ` Alex Shi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=533fcca9-a059-4130-a997-e4cd117e1d14@linux.dev \
--to=si.yanteng@linux.dev \
--cc=alexs@kernel.org \
--cc=baikefan@leap-io-kernel.com \
--cc=corbet@lwn.net \
--cc=doubled@leap-io-kernel.com \
--cc=dzm91@hust.edu.cn \
--cc=linux-doc@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.