From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jay Rolette Subject: Re: [RFC] Yet another option for DPDK options Date: Wed, 1 Jun 2016 10:58:41 -0500 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Cc: Yuanhan Liu , Thomas Monjalon , "dev@dpdk.org" , "Richardson, Bruce" , "Tan, Jianfeng" , Stephen Hemminger , Christian Ehrhardt , Panu Matilainen , Olivier Matz To: "Wiles, Keith" Return-path: 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 ; Wed, 1 Jun 2016 17:58:42 +0200 (CEST) Received: by mail-vk0-f44.google.com with SMTP id r140so33278361vkf.0 for ; Wed, 01 Jun 2016 08:58:42 -0700 (PDT) In-Reply-To: List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On Wed, Jun 1, 2016 at 10:00 AM, Wiles, Keith 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 { > > } > > 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