Re: [PATCH net v2 1/2] docs: networking: convert DIM to RST

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 2020-04-09 at 14:21 -0700, Jakub Kicinski wrote:
> Convert the Dynamic Interrupt Moderation doc to RST and
> use the RST features like syntax highlight, function and
> structure documentation, enumerations, table of contents.
> 
> Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>
> Reviewed-by: Randy Dunlap <rdunlap@xxxxxxxxxxxxx>
> ---
> v2:
>  - remove the functions/type definition markup
>  - change the contents definition (the :local: seem to
>    not work too well with kdoc)
> ---
>  Documentation/networking/index.rst            |  1 +
>  .../networking/{net_dim.txt => net_dim.rst}   | 90 +++++++++------
> ----
>  MAINTAINERS                                   |  1 +
>  3 files changed, 45 insertions(+), 47 deletions(-)
>  rename Documentation/networking/{net_dim.txt => net_dim.rst} (79%)
> 
> diff --git a/Documentation/networking/index.rst
> b/Documentation/networking/index.rst
> index 50133d9761c9..6538ede29661 100644
> --- a/Documentation/networking/index.rst
> +++ b/Documentation/networking/index.rst
> @@ -22,6 +22,7 @@ Linux Networking Documentation
>     z8530book
>     msg_zerocopy
>     failover
> +   net_dim

net_dim is a performance feature, i would move further down the list
where the perf features such as scaling and offloads are .. 

>     net_failover
>     phy
>     sfp-phylink
> diff --git a/Documentation/networking/net_dim.txt
> b/Documentation/networking/net_dim.rst
> similarity index 79%
> rename from Documentation/networking/net_dim.txt
> rename to Documentation/networking/net_dim.rst
> index 9bdb7d5a3ba3..1de1e3ec774b 100644
> --- a/Documentation/networking/net_dim.txt
> +++ b/Documentation/networking/net_dim.rst
> @@ -1,28 +1,20 @@
> +======================================================
>  Net DIM - Generic Network Dynamic Interrupt Moderation
>  ======================================================
>  
> -Author:
> -	Tal Gilboa <talgi@xxxxxxxxxxxx>
> -
> -
> -Contents
> -=========
> +:Author: Tal Gilboa <talgi@xxxxxxxxxxxx>
>  
> -- Assumptions
> -- Introduction
> -- The Net DIM Algorithm
> -- Registering a Network Device to DIM
> -- Example
> +.. contents:: :depth: 2
>  
> -Part 0: Assumptions
> -======================
> +Assumptions
> +===========
>  
>  This document assumes the reader has basic knowledge in network
> drivers
>  and in general interrupt moderation.
>  
>  
> -Part I: Introduction
> -======================
> +Introduction
> +============
>  
>  Dynamic Interrupt Moderation (DIM) (in networking) refers to
> changing the
>  interrupt moderation configuration of a channel in order to optimize
> packet
> @@ -41,14 +33,15 @@ number of wanted packets per event. The Net DIM
> algorithm ascribes importance to
>  increase bandwidth over reducing interrupt rate.
>  
>  
> -Part II: The Net DIM Algorithm
> -===============================
> +Net DIM Algorithm
> +=================
>  
>  Each iteration of the Net DIM algorithm follows these steps:
> -1. Calculates new data sample.
> -2. Compares it to previous sample.
> -3. Makes a decision - suggests interrupt moderation configuration
> fields.
> -4. Applies a schedule work function, which applies suggested
> configuration.
> +
> +#. Calculates new data sample.
> +#. Compares it to previous sample.
> +#. Makes a decision - suggests interrupt moderation configuration
> fields.
> +#. Applies a schedule work function, which applies suggested
> configuration.
>  
>  The first two steps are straightforward, both the new and the
> previous data are
>  supplied by the driver registered to Net DIM. The previous data is
> the new data
> @@ -89,19 +82,21 @@ manoeuvre as it may provide partial data or
> ignore the algorithm suggestion
>  under some conditions.
>  
>  
> -Part III: Registering a Network Device to DIM
> -==============================================
> +Registering a Network Device to DIM
> +===================================
>  
> -Net DIM API exposes the main function net_dim(struct dim *dim,
> -struct dim_sample end_sample). This function is the entry point to
> the Net
> +Net DIM API exposes the main function net_dim().
> +This function is the entry point to the Net
>  DIM algorithm and has to be called every time the driver would like
> to check if
>  it should change interrupt moderation parameters. The driver should
> provide two
> -data structures: struct dim and struct dim_sample. Struct dim
> +data structures: :c:type:`struct dim <dim>` and
> +:c:type:`struct dim_sample <dim_sample>`. :c:type:`struct dim <dim>`
>  describes the state of DIM for a specific object (RX queue, TX
> queue,
>  other queues, etc.). This includes the current selected profile,
> previous data
>  samples, the callback function provided by the driver and more.
> -Struct dim_sample describes a data sample, which will be compared to
> the
> -data sample stored in struct dim in order to decide on the
> algorithm's next
> +:c:type:`struct dim_sample <dim_sample>` describes a data sample,
> +which will be compared to the data sample stored in :c:type:`struct
> dim <dim>`
> +in order to decide on the algorithm's next
>  step. The sample should include bytes, packets and interrupts,
> measured by
>  the driver.
>  
> @@ -110,9 +105,10 @@ main net_dim() function. The recommended method
> is to call net_dim() on each
>  interrupt. Since Net DIM has a built-in moderation and it might
> decide to skip
>  iterations under certain conditions, there is no need to moderate
> the net_dim()
>  calls as well. As mentioned above, the driver needs to provide an
> object of type
> -struct dim to the net_dim() function call. It is advised for each
> entity
> -using Net DIM to hold a struct dim as part of its data structure and
> use it
> -as the main Net DIM API object. The struct dim_sample should hold
> the latest
> +:c:type:`struct dim <dim>` to the net_dim() function call. It is
> advised for
> +each entity using Net DIM to hold a :c:type:`struct dim <dim>` as
> part of its
> +data structure and use it as the main Net DIM API object.
> +The :c:type:`struct dim_sample <dim_sample>` should hold the latest
>  bytes, packets and interrupts count. No need to perform any
> calculations, just
>  include the raw data.
>  
> @@ -124,19 +120,19 @@ the data flow. After the work is done, Net DIM
> algorithm needs to be set to
>  the proper state in order to move to the next iteration.
>  
>  
> -Part IV: Example
> -=================
> +Example
> +=======
>  
>  The following code demonstrates how to register a driver to Net DIM.
> The actual
>  usage is not complete but it should make the outline of the usage
> clear.
>  
> -my_driver.c:
> +.. code-block:: c
>  
> -#include <linux/dim.h>
> +  #include <linux/dim.h>
>  
> -/* Callback for net DIM to schedule on a decision to change
> moderation */
> -void my_driver_do_dim_work(struct work_struct *work)
> -{
> +  /* Callback for net DIM to schedule on a decision to change
> moderation */
> +  void my_driver_do_dim_work(struct work_struct *work)
> +  {
>  	/* Get struct dim from struct work_struct */
>  	struct dim *dim = container_of(work, struct dim,
>  				       work);
> @@ -145,11 +141,11 @@ void my_driver_do_dim_work(struct work_struct
> *work)
>  
>  	/* Signal net DIM work is done and it should move to next
> iteration */
>  	dim->state = DIM_START_MEASURE;
> -}
> +  }
>  
> -/* My driver's interrupt handler */
> -int my_driver_handle_interrupt(struct my_driver_entity *my_entity,
> ...)
> -{
> +  /* My driver's interrupt handler */
> +  int my_driver_handle_interrupt(struct my_driver_entity *my_entity,
> ...)
> +  {
>  	...
>  	/* A struct to hold current measured data */
>  	struct dim_sample dim_sample;
> @@ -162,13 +158,13 @@ int my_driver_handle_interrupt(struct
> my_driver_entity *my_entity, ...)
>  	/* Call net DIM */
>  	net_dim(&my_entity->dim, dim_sample);
>  	...
> -}
> +  }
>  
> -/* My entity's initialization function (my_entity was already
> allocated) */
> -int my_driver_init_my_entity(struct my_driver_entity *my_entity,
> ...)
> -{
> +  /* My entity's initialization function (my_entity was already
> allocated) */
> +  int my_driver_init_my_entity(struct my_driver_entity *my_entity,
> ...)
> +  {
>  	...
>  	/* Initiate struct work_struct with my driver's callback
> function */
>  	INIT_WORK(&my_entity->dim.work, my_driver_do_dim_work);
>  	...
> -}
> +  }
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 9271068bde63..46a3a01b54b9 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -5961,6 +5961,7 @@ M:	Tal Gilboa <talgi@xxxxxxxxxxxx>
>  S:	Maintained
>  F:	include/linux/dim.h
>  F:	lib/dim/
> +F:	Documentation/networking/net_dim.rst
>  
>  DZ DECSTATION DZ11 SERIAL DRIVER
>  M:	"Maciej W. Rozycki" <macro@xxxxxxxxxxxxxx>




[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux