diff mbox series

[v1,net-next,3/3] net: ena: Add PHC documentation

Message ID 20241021052011.591-4-darinzon@amazon.com (mailing list archive)
State Superseded
Delegated to: Netdev Maintainers
Headers show
Series PHC support in ENA driver | expand

Checks

Context Check Description
netdev/series_format success Posting correctly formatted
netdev/tree_selection success Clearly marked for net-next
netdev/ynl success Generated files up to date; no warnings/errors; no diff in generated;
netdev/fixes_present success Fixes tag not required for -next series
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 5 this patch: 5
netdev/build_tools success No tools touched, skip
netdev/cc_maintainers warning 3 maintainers not CCed: linux-doc@vger.kernel.org corbet@lwn.net richardcochran@gmail.com
netdev/build_clang success Errors and warnings before: 3 this patch: 3
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/deprecated_api success None detected
netdev/check_selftest success No net selftest shell script
netdev/verify_fixes success No Fixes tag
netdev/build_allmodconfig_warn success Errors and warnings before: 3 this patch: 3
netdev/checkpatch success total: 0 errors, 0 warnings, 0 checks, 90 lines checked
netdev/build_clang_rust success No Rust files in patch. Skipping build
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/source_inline success Was 0 now: 0
netdev/contest fail net-next-2024-10-21--06-00 (tests: 777)

Commit Message

Arinzon, David Oct. 21, 2024, 5:20 a.m. UTC
Provide the relevant information and guidelines
about the feature support in the ENA driver.

Signed-off-by: Amit Bernstein <amitbern@amazon.com>
Signed-off-by: David Arinzon <darinzon@amazon.com>
---
 .../device_drivers/ethernet/amazon/ena.rst    | 78 +++++++++++++++++++
 1 file changed, 78 insertions(+)

Comments

Stanislav Fomichev Oct. 21, 2024, 2:32 p.m. UTC | #1
On 10/21, David Arinzon wrote:
> Provide the relevant information and guidelines
> about the feature support in the ENA driver.
> 
> Signed-off-by: Amit Bernstein <amitbern@amazon.com>
> Signed-off-by: David Arinzon <darinzon@amazon.com>
> ---
>  .../device_drivers/ethernet/amazon/ena.rst    | 78 +++++++++++++++++++
>  1 file changed, 78 insertions(+)
> 
> diff --git a/Documentation/networking/device_drivers/ethernet/amazon/ena.rst b/Documentation/networking/device_drivers/ethernet/amazon/ena.rst
> index 4561e8ab..9f490bb8 100644
> --- a/Documentation/networking/device_drivers/ethernet/amazon/ena.rst
> +++ b/Documentation/networking/device_drivers/ethernet/amazon/ena.rst
> @@ -56,6 +56,7 @@ ena_netdev.[ch]     Main Linux kernel driver.
>  ena_ethtool.c       ethtool callbacks.
>  ena_xdp.[ch]        XDP files
>  ena_pci_id_tbl.h    Supported device IDs.
> +ena_phc.[ch]        PTP hardware clock infrastructure (see `PHC`_ for more info)
>  =================   ======================================================
>  
>  Management Interface:
> @@ -221,6 +222,83 @@ descriptor it was received on would be recycled. When a packet smaller
>  than RX copybreak bytes is received, it is copied into a new memory
>  buffer and the RX descriptor is returned to HW.
>  
> +.. _`PHC`:
> +
> +PTP Hardware Clock (PHC)
> +======================
> +.. _`ptp-userspace-api`: https://docs.kernel.org/driver-api/ptp.html#ptp-hardware-clock-user-space-api
> +.. _`testptp`: https://elixir.bootlin.com/linux/latest/source/tools/testing/selftests/ptp/testptp.c

nit:
Documentation/networking/device_drivers/ethernet/amazon/ena.rst:228: WARNING: Title underline too short.

---
pw-bot: cr
Arinzon, David Oct. 21, 2024, 2:45 p.m. UTC | #2
> > Provide the relevant information and guidelines about the feature
> > support in the ENA driver.
> >
> > Signed-off-by: Amit Bernstein <amitbern@amazon.com>
> > Signed-off-by: David Arinzon <darinzon@amazon.com>
> > ---
> >  .../device_drivers/ethernet/amazon/ena.rst    | 78
> +++++++++++++++++++
> >  1 file changed, 78 insertions(+)
> >
> > diff --git
> > a/Documentation/networking/device_drivers/ethernet/amazon/ena.rst
> > b/Documentation/networking/device_drivers/ethernet/amazon/ena.rst
> > index 4561e8ab..9f490bb8 100644
> > ---
> a/Documentation/networking/device_drivers/ethernet/amazon/ena.rst
> > +++
> b/Documentation/networking/device_drivers/ethernet/amazon/ena.rst
> > @@ -56,6 +56,7 @@ ena_netdev.[ch]     Main Linux kernel driver.
> >  ena_ethtool.c       ethtool callbacks.
> >  ena_xdp.[ch]        XDP files
> >  ena_pci_id_tbl.h    Supported device IDs.
> > +ena_phc.[ch]        PTP hardware clock infrastructure (see `PHC`_ for more
> info)
> >  =================
> ======================================================
> >
> >  Management Interface:
> > @@ -221,6 +222,83 @@ descriptor it was received on would be recycled.
> > When a packet smaller  than RX copybreak bytes is received, it is
> > copied into a new memory  buffer and the RX descriptor is returned to HW.
> >
> > +.. _`PHC`:
> > +
> > +PTP Hardware Clock (PHC)
> > +======================
> > +.. _`ptp-userspace-api`:
> > +https://docs.kernel.org/driver-api/ptp.html#ptp-hardware-clock-user-s
> > +pace-api .. _`testptp`:
> > +https://elixir.bootlin.com/linux/latest/source/tools/testing/selftest
> > +s/ptp/testptp.c
> 
> nit:
> Documentation/networking/device_drivers/ethernet/amazon/ena.rst:228:
> WARNING: Title underline too short.
> 
> ---
> pw-bot: cr

Thanks for raising this, will fix in the next revision
David Woodhouse Oct. 21, 2024, 4:24 p.m. UTC | #3
On Mon, 2024-10-21 at 08:20 +0300, David Arinzon wrote:
> 
> +  testptp -d /dev/ptp$(ethtool -T <interface> | awk '/PTP Hardware Clock:/ {print $NF}') -k 1
> +

Does udev create a stable symlink for this, like it does for e.g.
/dev/ptp_kvm ? 

I note the EC2 documentation *still* tells users to use /dev/ptp0
without even checking which device that is, so they could get something
*very* different to what they expect, if they accidentally start using
the KVM PTP clock instead!
Arinzon, David Oct. 22, 2024, 2:17 p.m. UTC | #4
> > +  testptp -d /dev/ptp$(ethtool -T <interface> | awk '/PTP Hardware
> Clock:/ {print $NF}') -k 1
> > +
> 
> Does udev create a stable symlink for this, like it does for e.g.
> /dev/ptp_kvm ?
> 

Yes, you can add a specific rule for the ena ptp device

SUBSYSTEM=="ptp", ATTR{clock_name}=="ena-ptp-*", SYMLINK += "ena-ptp"

> I note the EC2 documentation *still* tells users to use /dev/ptp0
> without even checking which device that is, so they could get something
> *very* different to what they expect, if they accidentally start using
> the KVM PTP clock instead!
David Woodhouse Oct. 22, 2024, 2:25 p.m. UTC | #5
On Tue, 2024-10-22 at 14:17 +0000, Arinzon, David wrote:
> > > +  testptp -d /dev/ptp$(ethtool -T <interface> | awk '/PTP
> > > Hardware
> > Clock:/ {print $NF}') -k 1
> > > +
> > 
> > Does udev create a stable symlink for this, like it does for e.g.
> > /dev/ptp_kvm ?
> > 
> 
> Yes, you can add a specific rule for the ena ptp device
> 
> SUBSYSTEM=="ptp", ATTR{clock_name}=="ena-ptp-*", SYMLINK += "ena-ptp"

I don't see it here yet though:

https://github.com/systemd/systemd/blob/main/rules.d/50-udev-default.rules.in#L33
Arinzon, David Oct. 22, 2024, 2:39 p.m. UTC | #6
> > > > +  testptp -d /dev/ptp$(ethtool -T <interface> | awk '/PTP
> > > > Hardware
> > > Clock:/ {print $NF}') -k 1
> > > > +
> > >
> > > Does udev create a stable symlink for this, like it does for e.g.
> > > /dev/ptp_kvm ?
> > >
> >
> > Yes, you can add a specific rule for the ena ptp device
> >
> > SUBSYSTEM=="ptp", ATTR{clock_name}=="ena-ptp-*", SYMLINK += "ena-
> ptp"
> 
> I don't see it here yet though:
> 
> https://github.com/systemd/systemd/blob/main/rules.d/50-udev-
> default.rules.in#L33

We will add a pull request to systemd which adds the above suggested rule.
diff mbox series

Patch

diff --git a/Documentation/networking/device_drivers/ethernet/amazon/ena.rst b/Documentation/networking/device_drivers/ethernet/amazon/ena.rst
index 4561e8ab..9f490bb8 100644
--- a/Documentation/networking/device_drivers/ethernet/amazon/ena.rst
+++ b/Documentation/networking/device_drivers/ethernet/amazon/ena.rst
@@ -56,6 +56,7 @@  ena_netdev.[ch]     Main Linux kernel driver.
 ena_ethtool.c       ethtool callbacks.
 ena_xdp.[ch]        XDP files
 ena_pci_id_tbl.h    Supported device IDs.
+ena_phc.[ch]        PTP hardware clock infrastructure (see `PHC`_ for more info)
 =================   ======================================================
 
 Management Interface:
@@ -221,6 +222,83 @@  descriptor it was received on would be recycled. When a packet smaller
 than RX copybreak bytes is received, it is copied into a new memory
 buffer and the RX descriptor is returned to HW.
 
+.. _`PHC`:
+
+PTP Hardware Clock (PHC)
+======================
+.. _`ptp-userspace-api`: https://docs.kernel.org/driver-api/ptp.html#ptp-hardware-clock-user-space-api
+.. _`testptp`: https://elixir.bootlin.com/linux/latest/source/tools/testing/selftests/ptp/testptp.c
+
+ENA Linux driver supports PTP hardware clock providing timestamp reference to achieve nanosecond accuracy.
+
+**PHC support**
+
+PHC depends on the PTP module, which needs to be either loaded as a module or compiled into the kernel.
+
+Verify if the PTP module is present:
+
+.. code-block:: shell
+
+  grep -w '^CONFIG_PTP_1588_CLOCK=[ym]' /boot/config-`uname -r`
+
+- If no output is provided, the ENA driver cannot be loaded with PHC support.
+
+- ``CONFIG_PTP_1588_CLOCK=y``: the PTP module is already compiled and loaded inside the kernel binary file.
+
+- ``CONFIG_PTP_1588_CLOCK=m``: the PTP module needs to be loaded prior to loading the ENA driver:
+
+Load PTP module:
+
+.. code-block:: shell
+
+  sudo modprobe ptp
+
+All available PTP clock sources can be tracked here:
+
+.. code-block:: shell
+
+  ls /sys/class/ptp
+
+PHC support and capabilities can be verified using ethtool:
+
+.. code-block:: shell
+
+  ethtool -T <interface>
+
+**PHC timestamp**
+
+To retrieve PHC timestamp, use `ptp-userspace-api`_, usage example using `testptp`_:
+
+.. code-block:: shell
+
+  testptp -d /dev/ptp$(ethtool -T <interface> | awk '/PTP Hardware Clock:/ {print $NF}') -k 1
+
+PHC get time requests should be within reasonable bounds,
+avoid excessive utilization to ensure optimal performance and efficiency.
+The ENA device restricts the frequency of PHC get time requests to a maximum
+of 125 requests per second. If this limit is surpassed, the get time request
+will fail, leading to an increment in the phc_err statistic.
+
+**PHC statistics**
+
+PHC can be monitored using :code:`ethtool -S` counters:
+
+=================   ======================================================
+**phc_cnt**         Number of successful retrieved timestamps (below expire timeout).
+**phc_exp**         Number of expired retrieved timestamps (above expire timeout).
+**phc_skp**         Number of skipped get time attempts (during block period).
+**phc_err**         Number of failed get time attempts (entering into block state).
+=================   ======================================================
+
+PHC timeouts:
+
+=================   ======================================================
+**expire**          Max time for a valid timestamp retrieval, passing this threshold will fail
+                    the get time request and block new requests until block timeout.
+**block**           Blocking period starts once get time request expires or fails, all get time
+                    requests during block period will be skipped.
+=================   ======================================================
+
 Statistics
 ==========