[Accel-config] Re: [RFC] Provide library API to read and write raw sysfs attributes
Dave Jiang <dave.jiang at intel.com> Mon, 07 Feb 2022 16:24:48 -0700
| Newsgroups | dev.linux.lists.accel-config |
|---|---|
| Message-ID | <[email protected]> |
On 2/7/2022 4:18 PM, Ramesh Thomas wrote:
> On 2/7/2022 3:05 PM, Dave Jiang wrote:
>>
>> On 2/7/2022 2:54 PM, Ramesh Thomas wrote:
>>> On 2/7/2022 1:43 PM, Dave Jiang wrote:
>>>>
>>>> On 2/7/2022 2:34 PM, Ramesh Thomas wrote:
>>>>> On 2/4/2022 3:26 PM, Dave Jiang wrote:
>>>>>>
>>>>>> On 2/4/2022 2:03 PM, Ramesh Thomas wrote:
>>>>>>> On 2/4/2022 12:42 PM, Dave Jiang wrote:
>>>>>>>>
>>>>>>>> On 2/4/2022 12:15 PM, Ramesh Thomas wrote:
>>>>>>>>> I am thinking of providing some generic functions to read and
>>>>>>>>> write sysfs attributes without much processing. This will be
>>>>>>>>> useful where raw reads and writes are required e.g. listing
>>>>>>>>> values of attributes or initializing attributes in a loop.
>>>>>>>>> This will open up possibilities of advanced use cases where
>>>>>>>>> user can do custom batch configurations in addition to the
>>>>>>>>> load and save configuration option.
>>>>>>>>>
>>>>>>>>> There will be a get and set function for devices, groups, wqs
>>>>>>>>> and engines as follows
>>>>>>>>>
>>>>>>>>> /* structure to read and write attributes from sysfs */
>>>>>>>>> struct accfg_sysfs_attr {
>>>>>>>>> char attr[MAX_PARAM_LEN];
>>>>>>>>> };
>>>>>>>>>
>>>>>>>>> int accfg_get_device_attr(struct accfg_device *device, const
>>>>>>>>> char *attr_name,
>>>>>>>>> struct *accfg_sysfs_attr);
>>>>>>>>> int accfg_set_device_attr(struct accfg_device *device, const
>>>>>>>>> char *attr_name,
>>>>>>>>> struct *accfg_sysfs_attr);
>>>>>>>>>
>>>>>>>>> int accfg_get_group_attr(struct accfg_group *group, const char
>>>>>>>>> *attr_name,
>>>>>>>>> struct *accfg_sysfs_attr);
>>>>>>>>> int accfg_set_group_attr(struct accfg_group *group, const char
>>>>>>>>> *attr_name,
>>>>>>>>> struct *accfg_sysfs_attr);
>>>>>>>>>
>>>>>>>> Does it provide additional processing on top of
>>>>>>>> sysfs_read_attr() helper function?
>>>>>>>
>>>>>>> It creates the path from from device, wq, engine and group
>>>>>>> structure. It will save last error (cmd_status) in accfg ctxt
>>>>>>> and return errors returned from driver. Other than that it does
>>>>>>> not do any attribute specific processing.
>>>>>>
>>>>>> Ok by me from high level view if it makes the code cleaner.
>>>>>
>>>>> Unfortunately this will not work. The intention was to provide a
>>>>> generic API to read/write sysfs attributes as strings. However
>>>>> since we cache attributes in their respective types (int, long,
>>>>> string etc.), attribute specific processing cannot be avoided.
>>>>>
>>>>> Maybe in future we could simplify things by not caching values in
>>>>> private structures. I don't see a reason to cache them when that
>>>>> is done in the sysfs and persisted in config files. We only need
>>>>> to validate when user enters a value and load all of them in json
>>>>> as strings.
>>>>
>>>> I think the issue is with apps using the libaccel-config API. If an
>>>> attribute is persistent, then you don't want to keep pulling it
>>>> from sysfs when you can read it locally. Especially if something is
>>>> needed for the fast I/O path.
>>>
>>> Since this is only a configuration tool, there is no need for fast
>>> I/O. We can store all the attributes in json as strings.
>>
>> That is only for the front end. If something like DML is calling
>> libaccel-config, and it asks for some wq attribute or device
>> attribute it potentially could be calling from somewhere in the fast
>> path.
>
> Libaccel-config has to stay in sync with syfs so I am not sure how can
> you avoid accessing it. Still we don't need private data structures to
> avoid reading sysfs. Json can store the attributes as strings.
For changeable attributes yes. But for static attributes no. Just for a
hypothetical example, DML asks for the gencap of a device to compare
permission. This value should be cached. There's no reason to re-read it
at all from sysfs.