From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <rolette@infinite.io>
Received: from mail-vk0-f44.google.com (mail-vk0-f44.google.com
 [209.85.213.44]) by dpdk.org (Postfix) with ESMTP id 9434F6944
 for <dev@dpdk.org>; Wed,  1 Jun 2016 17:58:42 +0200 (CEST)
Received: by mail-vk0-f44.google.com with SMTP id r140so33278361vkf.0
 for <dev@dpdk.org>; Wed, 01 Jun 2016 08:58:42 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=infinite-io.20150623.gappssmtp.com; s=20150623;
 h=mime-version:in-reply-to:references:date:message-id:subject:from:to
 :cc; bh=DMSXdWyhl9cwbXPHKyf4GtQy7mGPCL9KoimTsCkHFds=;
 b=2H9ueFwaxu/JcbiYRuabqny0DDvjar0pOeYWxHlnfIHBS7lB1zNeQErSjS1b42FnM9
 z8JOIrX2L/y4CyEFlOsqi5ghA+2j2IbkcmqcGvAGLQA3oBOp7VsMqLqIi3eHW56IL5WX
 0iwRFdxSkH75/y/UQRkSCXY/lVBrsGENSZlKJwwyZqb4JUKb3tvuDBE8r2DkdFubeU4D
 5WvOoQIoV586p3z9J8kXNaW24guXnUvYBOIN93/f2vwxdW3bA+c0alkAyjp4V4wvxZPm
 2nCldAOb6b0eHWNbVvfZyGWIjat4bdwGYjoIg3p+odHO+50kPTQnnI8By7SPIsU5mCeZ
 2kgA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20130820;
 h=x-gm-message-state:mime-version:in-reply-to:references:date
 :message-id:subject:from:to:cc;
 bh=DMSXdWyhl9cwbXPHKyf4GtQy7mGPCL9KoimTsCkHFds=;
 b=WuS1O4Se0m3AiVdqKMmM4rT2q4O0vOmT9B6iJsR9+oSaqaY3UxryQd2g8gor3j2Os6
 P3chv+5nWsSMNiRdDayp79hbV6+LQM8oeNxnZMMOEppLgHftO3/5CXME/ypEjtO7WrS6
 uEAKQxbZCKWpMDYFqVQu/fehI0FRhSjQfxD3mAA0qn1UMqIbbp4EXiPS7uq+EVZkPqgQ
 +OBp1QHdUwmfBfUlRvDeJx+2RYteJAQmgrGrQZW4Nd6mjkDaT5L662S4yQxCyx7IrIMM
 ihgNmaU7F5Vb7coZE6tUDAY/wNr83hSQlunzS1LfR85xF4r/AwELwO0X6BvsAdCwu0MW
 king==
X-Gm-Message-State: ALyK8tK+FS8eYqHlFKUfssBOVCDam4jEjs1kI9ek0TlEh4pm2FPpxTWVaNhoCZKVeZ3uaDH1FVuzSWCtQ0qMWw==
MIME-Version: 1.0
X-Received: by 10.176.1.52 with SMTP id 49mr2023020uak.54.1464796721894; Wed,
 01 Jun 2016 08:58:41 -0700 (PDT)
Received: by 10.103.4.195 with HTTP; Wed, 1 Jun 2016 08:58:41 -0700 (PDT)
In-Reply-To: <C508AAA8-E813-4F2D-A2A4-1E2D5E34BF66@intel.com>
References: <C508AAA8-E813-4F2D-A2A4-1E2D5E34BF66@intel.com>
Date: Wed, 1 Jun 2016 10:58:41 -0500
Message-ID: <CADNuJVp8oF9f4b6RpY8s3noCpt+hjF3ZZQkdcSjuEjvV7YNS_A@mail.gmail.com>
From: Jay Rolette <rolette@infinite.io>
To: "Wiles, Keith" <keith.wiles@intel.com>
Cc: Yuanhan Liu <yuanhan.liu@linux.intel.com>, 
 Thomas Monjalon <thomas.monjalon@6wind.com>, "dev@dpdk.org" <dev@dpdk.org>, 
 "Richardson, Bruce" <bruce.richardson@intel.com>, "Tan,
 Jianfeng" <jianfeng.tan@intel.com>, 
 Stephen Hemminger <stephen@networkplumber.org>, 
 Christian Ehrhardt <christian.ehrhardt@canonical.com>,
 Panu Matilainen <pmatilai@redhat.com>, 
 Olivier Matz <olivier.matz@6wind.com>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
X-Content-Filtered-By: Mailman/MimeDel 2.1.15
Subject: Re: [dpdk-dev] [RFC] Yet another option for DPDK options
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: patches and discussions about DPDK <dev.dpdk.org>
List-Unsubscribe: <http://dpdk.org/ml/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://dpdk.org/ml/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <http://dpdk.org/ml/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Wed, 01 Jun 2016 15:58:42 -0000

On Wed, Jun 1, 2016 at 10:00 AM, Wiles, Keith <keith.wiles@intel.com> wrote=
:

> Started from the link below, but did not want to highjack the thread.
> http://dpdk.org/ml/archives/dev/2016-June/040021.html
>
> I was thinking about this problem from a user perspective and command lin=
e
> options are very difficult to manage specifically when you have a large
> number of options as we have in dpdk. I see all of these options as a typ=
e
> of database of information for the DPDK and the application, because the
> application command line options are also getting very complex as well.
>
> I have been looking at a number of different options here and the
> direction I was thinking was using a file for the options and
> configurations with the data in a clean format. It could have been a INI
> file or JSON or XML, but they all seem to have some problems I do not lik=
e.
> The INI file is too flat and I wanted a hierarchy in the data, the JSON
> data is similar and XML is just hard to read. I wanted to be able to mana=
ge
> multiple applications and possible system the DPDK/app runs. The problem
> with the above formats is they are just data and not easy to make decisio=
ns
> about the system and applications at runtime.
>

INI format is simplest for users to read, but if you really need hierarchy,
JSON will do that just fine. Not sure what you mean by "JSON data is
similar"...


> If the =E2=80=9Cdatabase=E2=80=9D of information could be queried by the =
EAL, drivers and
> application then we do not need to try and create a complex command line.
> It would be nice to execute a DPDK applications like this:
>
> ./some_dpdk_app =E2=80=93config-file dpdk-config-filename
>

+1 much nicer than the mess that is EAL command line args today.


> The dpdk-config-filename could contain a lot of information and be able t=
o
> startup multiple different applications. The dpdk-config-file could also
> include other config files to complete the configuration. The format of t=
he
> data in the config file needs to be readable, but allow the user to put i=
n
> new options, needs to be hierarchical in nature and have some simple
> functions to execute if required.
>
> The solution I was thinking is the file information is really just a
> fragment of a scripting language, which the DPDK application contains thi=
s
> scripting language interpreter. I was looking at using Lua lua.org as the
> scripting language interpreter it is small and easy to understand. Python
> and others are very big and require a lot of resources and Lua requires
> very few system resources. Also I did not want to have to write a parser
> (lex/yacc). The other nice feature of Lua is you can create a sandbox for
> the code to run in and limit the type of system resources and APIs that c=
an
> be accessed by the application and configuration. Lua can be trimmed down
> to a fairly small size and builds on just about any system or we can just
> install Lua on the system without changes from a rpm or deb.
>

There are JSON and INI file parser libraries for pretty much any language
you care to use. That shouldn't be a factor in choosing file format.

The argument about "Python and others are very big and require a lot of
resources" doesn't end up mattering much since it is already required by a
couple of the DPDK tools (in particular, dpdk_nic_bind.py).


> I use Lua in pktgen at this time and the interface between =E2=80=98C=E2=
=80=99 and Lua is
> very simple and easy. Currently I include Lua in Pktgen, but I could have
> just used a system library.
>
> The data in the config file can be data statements along with some limite=
d
> code to make some data changes at run time without having to modify the
> real application. Here is a simple config file I wrote: Some of the optio=
ns
> do not make sense to be in the file at the same time, but wanted to see a=
ll
> of the options. The mk_lcore_list() and mk_coremap() are just Lua functio=
ns
> we can preload to help convert the simple strings into real data in this
> case tables of information. The application could be something like pktge=
n
> =3D { map =3D { =E2=80=A6 }, more_options =3D 1, } this allows the same f=
ile to possible
> contain many application configurations. Needs a bit more work.
>
> dpdk_default =3D {
>
<snip>

> }
>
> The EAL, driver, application, =E2=80=A6 would query an API to access the =
data and
> the application can change his options quickly without modifying the code=
.
>
> Anyway comments are welcome.
>
> Regards,
> Keith
>

I like the concept overall. I'd suggest separating out the Lua thing. Lua's
fine for scripting, but nothing here really requires it or saves a lot of
development work.

Jay