요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
.. SPDX-License-Identifier: GPL-2.0
===================================
Linux NVMe feature and quirk policy
===================================
This file explains the policy used to decide what is supported by the
Linux NVMe driver and what is not.
Introduction
============
NVM Express is an open collection of standards and information.
The Linux NVMe host driver in drivers/nvme/host/ supports devices
implementing the NVM Express (NVMe) family of specifications, which
currently consists of a number of documents:
- the NVMe Base specification
- various Command Set specifications (e.g. NVM Command Set)
- various Transport specifications (e.g. PCIe, Fibre Channel, RDMA, TCP)
- the NVMe Management Interface specification
See https://nvmexpress.org/developers/ for the NVMe specifications.
Supported features
==================
NVMe is a large suite of specifications, and contains features that are only
useful or suitable for specific use-cases. It is important to note that Linux
does not aim to implement every feature in the specification. Every additional
feature implemented introduces more code, more maintenance and potentially more
bugs. Hence there is an inherent tradeoff between functionality and
maintainability of the NVMe host driver.
Any feature implemented in the Linux NVMe host driver must support the
following requirements:
1. The feature is specified in a release version of an official NVMe
specification, or in a ratified Technical Proposal (TP) that is
available on NVMe website. Or if it is not directly related to the
on-wire protocol, does not contradict any of the NVMe specifications.
2. Does not conflict with the Linux architecture, nor the design of the
NVMe host driver.
3. Has a clear, indisputable value-proposition and a wide consensus across
the community.
Vendor specific extensions are generally not supported in the NVMe host
driver.
It is strongly recommended to work with the Linux NVMe and block layer
maintainers and get feedback on specification changes that are intended
to be used by the Linux NVMe host driver in order to avoid conflict at a
later stage.
Quirks
======
Sometimes implementations of open standards fail to correctly implement parts
of the standards. Linux uses identifier-based quirks to work around such
implementation bugs. The intent of quirks is to deal with widely available
hardware, usually consumer, which Linux users can't use without these quirks.
Typically these implementations are not or only superficially tested with Linux
by the hardware manufacturer.
The Linux NVMe maintainers decide ad hoc whether to quirk implementations
based on the impact of the problem to Linux users and how it impacts
maintainability of the driver. In general quirks are a last resort, if no
firmware updates or other workarounds are available from the vendor.
Quirks will not be added to the Linux kernel for hardware that isn't available
on the mass market. Hardware that fails qualification for enterprise Linux
distributions, ChromeOS, Android or other consumers of the Linux kernel
should be fixed before it is shipped instead of relying on Linux quirks.
3. 한국어 전문 번역
영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.
문서 목적
1-10이 문서는 Linux NVMe driver가 어떤 기능을 지원하고 어떤 기능을 지원하지 않을지 결정하는 정책을 설명합니다.
.. SPDX-License-Identifier: GPL-2.0
===================================
Linux NVMe feature and quirk policy
===================================
This file explains the policy used to decide what is supported by the
Linux NVMe driver and what is not.
NVMe specification 범위
11-27NVM Express는 공개된 표준과 정보의 모음입니다. `drivers/nvme/host/`의 Linux NVMe host driver는 NVM Express specification family를 구현한 device를 지원합니다.
Host driver가 대상으로 삼는 specification 문서군입니다.
NVMe specification은 `https://nvmexpress.org/developers/`에서 확인할 수 있습니다.
Introduction
============
NVM Express is an open collection of standards and information.
The Linux NVMe host driver in drivers/nvme/host/ supports devices
implementing the NVM Express (NVMe) family of specifications, which
currently consists of a number of documents:
- the NVMe Base specification
- various Command Set specifications (e.g. NVM Command Set)
- various Transport specifications (e.g. PCIe, Fibre Channel, RDMA, TCP)
- the NVMe Management Interface specification
See https://nvmexpress.org/developers/ for the NVMe specifications.
지원 기능의 요건
28-58NVMe specification은 방대하며 특정 use case에서만 유용하거나 적합한 기능도 포함합니다. Linux는 specification의 모든 기능을 구현하는 것을 목표로 하지 않습니다.
기능을 하나 추가할 때마다 code와 유지관리 부담, 잠재적 bug가 늘어나므로 NVMe host driver의 기능성과 유지관리성 사이에는 본질적인 tradeoff가 있습니다.
구현되는 모든 기능이 만족해야 하는 세 조건입니다.
Vendor-specific extension은 일반적으로 NVMe host driver에서 지원하지 않습니다.
나중의 충돌을 피하려면 Linux NVMe host driver에서 사용할 specification 변경을 추진할 때 Linux NVMe와 block layer maintainer와 협력하고 미리 feedback을 받는 것이 강하게 권장됩니다.
Supported features
==================
NVMe is a large suite of specifications, and contains features that are only
useful or suitable for specific use-cases. It is important to note that Linux
does not aim to implement every feature in the specification. Every additional
feature implemented introduces more code, more maintenance and potentially more
bugs. Hence there is an inherent tradeoff between functionality and
maintainability of the NVMe host driver.
Any feature implemented in the Linux NVMe host driver must support the
following requirements:
1. The feature is specified in a release version of an official NVMe
specification, or in a ratified Technical Proposal (TP) that is
available on NVMe website. Or if it is not directly related to the
on-wire protocol, does not contradict any of the NVMe specifications.
2. Does not conflict with the Linux architecture, nor the design of the
NVMe host driver.
3. Has a clear, indisputable value-proposition and a wide consensus across
the community.
Vendor specific extensions are generally not supported in the NVMe host
driver.
It is strongly recommended to work with the Linux NVMe and block layer
maintainers and get feedback on specification changes that are intended
to be used by the Linux NVMe host driver in order to avoid conflict at a
later stage.
Quirk 허용 기준
59-77Open standard 구현이 표준의 일부를 올바르게 구현하지 못할 때 Linux는 identifier 기반 quirk로 해당 bug를 우회합니다.
Quirk의 목적은 널리 판매되는 hardware, 대개 consumer device가 이 우회 없이는 Linux에서 동작하지 않는 문제를 처리하는 것입니다. 이런 구현은 제조사가 Linux에서 시험하지 않았거나 피상적으로만 시험한 경우가 많습니다.
Linux NVMe maintainer는 Linux 사용자에게 미치는 영향과 driver 유지관리성에 미치는 영향을 바탕으로 구현별 quirk 수용 여부를 개별 판단합니다. Vendor가 firmware update나 다른 workaround를 제공할 수 없을 때 선택하는 최후 수단이 원칙입니다.
대중 시장에 판매되지 않는 hardware를 위한 quirk는 Linux kernel에 추가하지 않습니다. Enterprise Linux distribution, ChromeOS, Android 또는 다른 Linux kernel 사용자의 qualification을 통과하지 못한 hardware는 Linux quirk에 의존하지 말고 출하 전에 수정해야 합니다.
Quirks
======
Sometimes implementations of open standards fail to correctly implement parts
of the standards. Linux uses identifier-based quirks to work around such
implementation bugs. The intent of quirks is to deal with widely available
hardware, usually consumer, which Linux users can't use without these quirks.
Typically these implementations are not or only superficially tested with Linux
by the hardware manufacturer.
The Linux NVMe maintainers decide ad hoc whether to quirk implementations
based on the impact of the problem to Linux users and how it impacts
maintainability of the driver. In general quirks are a last resort, if no
firmware updates or other workarounds are available from the vendor.
Quirks will not be added to the Linux kernel for hardware that isn't available
on the mass market. Hardware that fails qualification for enterprise Linux
distributions, ChromeOS, Android or other consumers of the Linux kernel
should be fixed before it is shipped instead of relying on Linux quirks.
요약·해설
feature-and-quirk-policy.rst:1-77NVMe 기능은 공식 specification, Linux 설계 적합성, 명확한 가치와 community 합의를 모두 만족해야 하며 vendor-specific extension은 원칙적으로 받지 않습니다.
Quirk는 대중적으로 판매된 hardware의 표준 구현 결함을 위한 최후 수단이며, 출하 전 고칠 수 있는 제품의 qualification 실패를 대신하지 않습니다.