[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT PATCH v3 8/8] lib/uklibparam: Add documentation for parameters
Hi Sharan, this patch looks good. I might fix a few minor grammatical errors in the documentation on upstream. -- Felipe Reviewed-by: Felipe Huici <felipe.huici@xxxxxxxxx> On 21.08.19, 17:54, "Sharan Santhanam" <Sharan.Santhanam@xxxxxxxxx> wrote: This patch adds documentation for Unikraft library argument library. The patch adds help text to configure the heap size argument in the linuxu platform. Signed-off-by: Sharan Santhanam <sharan.santhanam@xxxxxxxxx> --- doc/guides/developers-app.rst | 107 ++++++++++++++++++++++++++++++++++ plat/linuxu/Config.uk | 6 +- 2 files changed, 111 insertions(+), 2 deletions(-) diff --git a/doc/guides/developers-app.rst b/doc/guides/developers-app.rst index 29db81d7..26a57a54 100644 --- a/doc/guides/developers-app.rst +++ b/doc/guides/developers-app.rst @@ -367,6 +367,113 @@ syscall``. Namely: :: general, a 0 return value indicates success. A -1 return value indicates an error, and an error code is stored in errno. +================================== +Command line arguments in Unikraft +================================== +A library within Unikraft may need to be configured while deploying it with an +application or the default value of a configuration option may vary based on +the application use case. It is necessary to overwrite this value at the time +an application is run. The command line arguments provided by a user shall be +used to overwrite the default configuration values. Thus a Unikraft command line +arguments could either belong to an application or to a library. These two +classes of argument are separated by ``--``;. The arguments for a Unikraft +library precedes the ``--``, followed by the application arguments. + +Type of parameters in a library +-------------------------------- +Unikraft provides support to pass arguments of the following data type: + +======== ======================== +Type Description +======== ======================== +char Single character value and it is an alias for __s8. +__s8 Same as char +__u8 Single byte value +__s16 Short signed integer +__u16 Short unsigned integer +int Integer and it is an alias for __s32. +__s32 Signed integer +__u32 Unsigned integer +__s64 Signed long integer +__u64 Unsigned long integer +charp C strings. +======== ======================== + +Register a library parameter to Unikraft +----------------------------------------- +In order for a library to configure options at execution time, the library needs +to select the library `uklibparam` while configuring the Unikraft build. +The library should also be registered with the `uklibparam` library using +`addlib_paramprefix` in the Makefile.uk of your library. + +There are three interfaces through which a library registers a variable as a +parameter that maybe altered while executing an application. These are: + +* UK_LIB_PARAM - Pass a scalar value of the above type to a variable. +* UK_LIB_PARAM_STR - Pass a null terminated string to a variable. +* UK_LIB_PARAM_ARR - Pass space separated list of values of the above type. + +Each library parameter is identified by the following format :: + + [library name].[variable name] + + where, + library name is the name registered with Unikraft build system. + variable name is the name of the global or static variable in the program. + +Examples +-------- +If the library needs to configure variable at execution time, it needs some +configuration to be performed while building the library. A Unikraft library can +be specific to a particular platform or common across all the platform. +For the common library, one has to edit the Makefile.uk with + +.. code-block:: bash + + $(eval $(call addlib_paramprefix,libukalloc,alloc)) + where, + libukalloc is the name of the library + alloc is the alias for the library name. + +As the next step, we define a variable and register it with the `uk_libparam` +library. The example below a simple code snippet. + +.. code-block:: c + + static __u32 heap_size = CONFIG_LINUXU_DEFAULT_HEAPMB; + UK_LIB_PARAM(heap_size, __u32); + +We can override the default value using the following command line + +.. code-block:: bash + + ./unikraft_linuxu-x86_64 linuxu.heap_size=10 -- + +We demonstrate a examples for parameters that are defined as string. We define a char pointer pointing to a default value and register it with the `uk_libparam` library using the UK_LIB_PARAM_STR helper function. The code snippet below demonstrate this. + +.. code-block:: c + + static const char \*test_string = "Hello World"; + UK_LIB_PARAM_STR(test_string); + +We can override the default value using the following command + +.. code-block:: bash + + ./unikraft_linuxu-x86_64 linuxu.test_string="Hello Unikraft!" -- + +The example below demonstrate a scheme to pass list of scalar datatype as a parameter to a library. As in the previous example, we define an array variable and register it with the `uk_libparam` library using the UK_LIB_PARAM_ARR helper function. + +.. code-block:: c + + static int test_array[5] = {0}; + UK_LIB_PARAM_ARR(test_array, int); + +The element in an array are delimited by ' '. The following command demonstrate the way to overwrite the default element in an array. + +.. code-block:: bash + + ./unikraft_linuxu-x86_64 linuxu.test_array="1 2 3 4 5" -- ============================ Make Targets diff --git a/plat/linuxu/Config.uk b/plat/linuxu/Config.uk index 132758eb..ede9589a 100644 --- a/plat/linuxu/Config.uk +++ b/plat/linuxu/Config.uk @@ -12,6 +12,8 @@ if (PLAT_LINUXU) int "Default heap size (MB)" default 4 help - Default size of heap memory to be allocated when no - '-m' parameter was given to the linuxu executable + Default size of heap memory to be allocated. The heap size may also be + changed by using linuxu.heap_size as a command line argument. For more + information refer to "Command line arguments in Unikraft" sections in + the developers guide endif -- 2.20.1 _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |