From: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
To: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: Kamil Konieczny <kamil.konieczny@linux.intel.com>,
igt-dev@lists.freedesktop.org
Subject: Re: [PATCH i-g-t 1/2] lib/igt_drm_fdinfo: Use longest match first
Date: Wed, 7 Feb 2024 18:57:36 +0000 [thread overview]
Message-ID: <14f171bf-da6b-4959-8aec-84f3633f33f9@linux.intel.com> (raw)
In-Reply-To: <tsybklkeuyt3jvwcnnjgkcnlfpmxjmrzbccba2ujhr4frp2flq@xerfdtftqh47>
On 07/02/2024 17:50, Lucas De Marchi wrote:
> On Wed, Feb 07, 2024 at 10:32:24AM +0000, Tvrtko Ursulin wrote:
>>
>> On 01/02/2024 14:09, Lucas De Marchi wrote:
>>> On Thu, Feb 01, 2024 at 01:43:21PM +0100, Kamil Konieczny wrote:
>>>> Hi Lucas,
>>>> On 2024-01-31 at 16:46:24 -0800, Lucas De Marchi wrote:
>>>>> Instead of checking twice the match, just use longest match first.
>>>>
>>>> Nice catch, LGTM.
>>>>
>>>> Reviewed-by: Kamil Konieczny <kamil.konieczny@linux.intel.com>
>>
>> +1 looks like that was a confused change I did when adding capacity.
>>
>> Going forward feel free to copy me when changing this code, given I
>> mostly wrote it after all..
>
> will do, sorry for missing that for this series.
>
>
>>
>>>>
>>>>>
>>>>> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>>>>> ---
>>>>> lib/igt_drm_fdinfo.c | 19 +++++++++----------
>>>>> 1 file changed, 9 insertions(+), 10 deletions(-)
>>>>>
>>>>> diff --git a/lib/igt_drm_fdinfo.c b/lib/igt_drm_fdinfo.c
>>>>> index 222ccbfb1..5c0ccf624 100644
>>>>> --- a/lib/igt_drm_fdinfo.c
>>>>> +++ b/lib/igt_drm_fdinfo.c
>>>>> @@ -239,8 +239,15 @@ __igt_parse_drm_fdinfo(int dir, const char
>>>>> *fd, struct drm_client_fdinfo *info,
>>>>> strlen("drm-client-id")))) {
>>>>> info->id = atol(v);
>>>>> good++;
>>>>> - } else if (!strncmp(l, "drm-engine-", 11) &&
>>>>> - strncmp(l, "drm-engine-capacity-", 20)) {
>>>>> + } else if (!strncmp(l, "drm-engine-capacity-", 20)) {
>>>>
>>>> One more thing to eventually fix is removing "20" which is exact
>>>> len of string, with something like
>>>>
>>>> bool str_begins(char *src, char *pattern)
>>>>
>>>> One source of errors is counting letters in strings or changing
>>>> string itself without changing corresponding len. This can be
>>>> done in separate patch.
>>>
>>> I had a patch for something similar. I usually use a strstartswith()
>>> that's commonly used in other projects and also matches the python name.
>>>
>>> However I decided to drop that for now. I may have a bigger refactor in
>>> this function soon reworking parse_engine() and other functions: Worse
>>> than manually counting the chars for the strncmp() is to call strlen()
>>> in the same string just in the line below that to feed to parse_engine()
>>> :-/. As I said, still undecided what to change here and if it's worth
>>> it.
>>
>> AFAIR hardcoded strlens were because strangely const strings fail to
>> be evaluated at compile time and when I tested it and strlen was
>
> humn... strlen("foo") should always be optimized out.
> Testing with gcc 12.3 here, but it's something I always looked at:
>
> $ cat /tmp/a.c
> #include <string.h>
>
> int foo(void)
> {
> return strlen("foo");
> }
> $ gcc -c -g -O0 -o /tmp/a.o /tmp/a.c
> $ objdump -d /tmp/a.o
> /tmp/a.o: file format elf64-x86-64
>
>
> Disassembly of section .text:
>
> 0000000000000000 <foo>:
> 0: f3 0f 1e fa endbr64
> 4: 55 push %rbp
> 5: 48 89 e5 mov %rsp,%rbp
> 8: b8 03 00 00 00 mov $0x3,%eax
> d: 5d pop %rbp
> e: c3 ret
>
>
Yeah I don't know, I was perplexed too. I tried it now and it works as
expected. Maybe some weirdness on my local build machine at the time.
>> showing in the profile. Given how gputop sucked with CPU usage quite
>> badly (relative to top) I was motivated to improve it.
>>
>> The "top-level" strncmp checks are the more expensive ones because
>> they all run for all lines in a given fdinfo file, while the inside
>> the branch strlen runs fewer times.
>>
>> Nevertheless some cleanup of this function would probably be good,
>> just while doing so keep in mind how bad gputop looks compared to top
>> in the profiles, not to make it much worse.
>
>
> will keep that in mind, but I'm not sure I will be able to work on this
> soon.
No rush, I only mentioned this since you announced you have reworks in
your sights.
Regards,
Tvrtko
next prev parent reply other threads:[~2024-02-07 18:57 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-01 0:46 [PATCH i-g-t 0/2] fdinfo: drive-by changes Lucas De Marchi
2024-02-01 0:46 ` [PATCH i-g-t 1/2] lib/igt_drm_fdinfo: Use longest match first Lucas De Marchi
2024-02-01 12:43 ` Kamil Konieczny
2024-02-01 14:09 ` Lucas De Marchi
2024-02-07 10:32 ` Tvrtko Ursulin
2024-02-07 17:50 ` Lucas De Marchi
2024-02-07 18:57 ` Tvrtko Ursulin [this message]
2024-02-01 0:46 ` [PATCH i-g-t 2/2] lib/igt_drm_fdinfo: Mandatory drm-fields first Lucas De Marchi
2024-02-01 12:45 ` Kamil Konieczny
2024-02-07 10:38 ` Tvrtko Ursulin
2024-02-01 2:22 ` ✓ Fi.CI.BAT: success for fdinfo: drive-by changes Patchwork
2024-02-01 2:44 ` ✓ CI.xeBAT: " Patchwork
2024-02-01 3:48 ` ✗ Fi.CI.IGT: failure " Patchwork
2024-02-01 20:35 ` Lucas De Marchi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=14f171bf-da6b-4959-8aec-84f3633f33f9@linux.intel.com \
--to=tvrtko.ursulin@linux.intel.com \
--cc=igt-dev@lists.freedesktop.org \
--cc=kamil.konieczny@linux.intel.com \
--cc=lucas.demarchi@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox