linux-doc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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
>

  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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).