Sent from my iPhone

> On Nov 30, 2018, at 10:01 AM, Wiles, Keith <keith.wi...@intel.com> wrote:
> 
> Plain text format is a real pain unless I time travel to the 1990’s :-(
> 
>> On Nov 30, 2018, at 7:13 AM, Zhang, Qi Z <qi.z.zh...@intel.com> wrote:
>> 
>> Hi Keith:
>> 
>> 
>>> -----Original Message-----
>>> From: dev [mailto:dev-boun...@dpdk.org] On Behalf Of Wiles, Keith
>>> Sent: Tuesday, November 27, 2018 11:00 PM
>>> To: dpdk-dev <dev@dpdk.org>
>>> Cc: Richardson, Bruce <bruce.richard...@intel.com>; Yigit, Ferruh
>>> <ferruh.yi...@intel.com>; Thomas Monjalon <tho...@monjalon.net>;
>>> Ananyev, Konstantin <konstantin.anan...@intel.com>
>>> Subject: Re: [dpdk-dev] [RFC] DFS (DPDK Filesystem)
>>> 
>>> 
>>> 
>>>> On Oct 8, 2018, at 5:42 PM, Wiles, Keith <keith.wi...@intel.com> wrote:
>>>> 
>>>> Hi Everyone,
>>>> 
>>>> I would like to request comments on DFS as I presented at the DPDK summit
>>> in Ireland.
>>>> 
>>>> As we know DPDK can be difficult to manage at run time and as DPDK
>>> becomes more dynamic we need to address how to configure and monitor
>>> DPDK and DPDK-based applications. A possible solution is to use FUSE file
>>> system support already in the Linux kernel through a DPDK library to expose 
>>> a
>>> directory structure for anyone to be able to monitor and control the app by
>>> reading/writing files.
>>>> 
>>>> Primarily DPDK runs on Linux based systems, where FUSE is well supported.
>>> FUSE was added to FreeBSD 10 which appears to be the same design as Linux.
>>> Windows does not support FUSE directly from MS, but a open source design
>>> has a FUSE based set of wrapper APIs to help port FUSE based file systems.
>>>> 
>>>> Today the only way to get information out of DPDK is to use log files or a
>>> command line within DPDK to display the information. The information is not
>>> easy for an external application to collect or monitor. Using DFS any 
>>> application
>>> can read and write into this virtual file system (FUSE) and retrieve 
>>> information
>>> from DPDK/Application via a raw ASCII text file and/or JSON formatted text.
>>>> 
>>>> Data read from DFS can be static or dynamic e.g. version/copyright text
>>> would be static, but port stats would be dynamic and generated when the user
>>> requests the information. Writing new configuration data into DPDK can be a
>>> simple number or text or a JSON data structure. Writing simple ASCII text 
>>> data
>>> is simple, but writing a long JSON or configuration file may some care, 
>>> i.e. write
>>> a path to a file in DFS to the location of the configuration and use that 
>>> file path
>>> for the configuration.
>>>> 
>>>> DPDK command line is getting to be very complex and long, but we can
>>> eliminate or greatly reduce the command line by using DFS to configure DPDK
>>> at startup along with the application configuration. Having DPDK start up 
>>> with
>>> minimum resources and allow updating/creating a file in the DPDK file system
>>> to configure DPDK would be easier.
>>>> 
>>>> The DFS is a FUSE filesystem anchored at /dpdk in the host file system, 
>>>> then a
>>> directory is created under /dpdk for each DPDK instance or application using
>>> <name>-<PID> as a directory name format. Then it is up to DPDK/Application 
>>> to
>>> create the directory structures, permissions and files within the directory
>>> mount point.
>>>> 
>>>> Currently I have a directory and files layout for DPDK, that needs more
>>> attention as I was focusing on FUSE then the layout as it can be changed 
>>> fairly
>>> easily. I can email the working documentation for DFS if needed please send 
>>> me
>>> a short email or I can post to the dev list. The docs also try to explain 
>>> the design
>>> and APIs used by the developer for creating files/directories. The docs are 
>>> still a
>>> work in progress and more attention needs to be done as we progress.
>>>> 
>>>> DFS is just a library and not required to be used plus it does not modify 
>>>> DPDK
>>> APIs or structures except for adding a few new dump routines for features 
>>> that
>>> do not have one today. The file system or FUSE backend in DPDK is a free
>>> floating thread at this time, but could be affinitized to a core if 
>>> required.
>>>> 
>>>> The FUSE protocol to the backend code (in DPDK) has a large number of
>>> operations, but we have simplified the interface for developers to 5-6. The
>>> interface on top of libfuse3 is very simple and currently provides most of 
>>> the
>>> needed APIs for managing the files and directories. The FUSE file system 
>>> with
>>> the added simpler API is dynamic and can be changed at runtime. The
>>> directory/files can be constructed via APIs at startup or anytime after 
>>> startup.
>>>> 
>>>> I would like to put a repo someplace with DPDK/DFS say on GitHub to allow
>>> others to play with the design in the short term. I also have a doc file 
>>> for DFS if
>>> anyone wants to learn more information and will be in the repo as well. If 
>>> we
>>> agree I can then create a set of patches for DPDK.
>>> 
>>> Well the 18.11 release is out the door, this one seemed pretty big and I 
>>> lot of
>>> hard work was put into this one, thanks to everyone.
>>> 
>>> 
>>> It is time to try and get some feedback on this RFC. I know the code in the 
>>> repo
>>> is not finished, but I would like to get some folks to give it a try and 
>>> give
>>> feedback. I would like to submit the basic DFS code with some low hanging
>>> items mostly readonly information for the 19.02 release.
>>> 
>>> Here is the repo again you can look at and play with. The code is mostly 
>>> ready
>>> for upstream but still more work needs to be done. I will try to update the 
>>> repo
>>> to the 18.11 release code based soon.
>>> 
>>> https://github.com/pktgen/dfs-dpdk
>>> 
>>> Thanks for giving this a review.
>> 
>> Some thoughts base on a quick test and review.
>> 
>> Overall, I think this is a very handy feature. I really hope it can be 
>> merged quickly :)
>> 
>> Below are some captures:
>> 
>> 1) when I try to test dfs with exist application (say testpmd), I need to 
>> replace rte_eal_init with dfs_eal_init, 
>> I think a better way is by using args like --dfs which can avoid the code 
>> change, but please let me know if I missed the point.
> 
> This is a good idea, let me look into what that would take. I do not want to 
> require DFS to be linked into the image in this case so —dfs need to be a 
> noop if not present.

I did change the code to use the —dfs option and it looks like it will work out 
well. Will update the repo soon with changes. 
>> 
>> 2) Is PMD allowed to use dfs to expose device specific information (private 
>> API access, utilities for diagnose purpose ...) ? if it is 
>> I think dfs could provide more standard way for PMD to add content to a sub 
>> directory , It could be 
>>    struct dfs_ops {
>>        mount(dfs_node parent...);   /* create content of in the sub 
>> directory */
>>        unmount(dfs_node parent...); /* destroy the content. */
>>    }    
>> 
>> PMD is responsible for creating a dfs_ops instance and setup the callback 
>> functions during initialization.(probe)
>> An API rte_eth_dev_get_dfs_ctx(port_id) can be used to get the context that 
>> wrapped dfs_ops and related ethdev instance. (similar for cryptodev and 
>> others )
>> So during dfs init, after we create folder for a port, we can do additional 
>> step to create a parent node for PMD then call its's dev_ops->mount, then 
>> all the device specific information will be popped in that folder
>> 
> 
> This seems like a reasonable option, it sounds like a callback from the DFS 
> init or possible a constructor method.
> 
> PMD is responsible for creating a dfs_ops instance and setup the callback 
> functions during initialization.(probe)
> An API rte_eth_dev_get_dfs_ctx(port_id) can be used to get the context that 
> wrapped dfs_ops and related ethdev instance. (similar for cryptodev and 
> others )
> So during dfs init, after we create folder for a port, we can do additional 
> step to create a parent node for PMD then call its's dev_ops->mount, then all 
> the device specific information will be popped in that folder
>> 3) For primary-secondary model, dfs should works well, but the missing part 
>> is there is no link between primary and secondary process, 
>> it will be nature if we can list all secondary process in a primary folder 
>> or even better if we can jump to secondary folder by some soft link and same 
>> thing in the reverse direction. 
> 
> I think this can be done, but each secondary would have its own dfs file 
> system. Adding the links could be reasonable if we could assume the secondary 
> processes are always up.
> 
>> 
>> Thanks
>> Qi
>> 
>>> 
>>>> 
>>>> Regards,
>>>> Keith
>>>> 
>>> 
>>> Regards,
>>> Keith
> 
> Regards,
> Keith
> 

Reply via email to