[igt-dev] [PATCH i-g-t v14 04/33] lib/igt_core: Track child process pid and tid

Chris Wilson chris at chris-wilson.co.uk
Thu Jan 14 15:56:13 UTC 2021


Quoting Zbigniew Kempczyński (2021-01-14 12:22:04)
> Introduce variables which can decrease number of getpid()/gettid()
> calls, especially for allocator which must be aware of method
> acquiring addresses.
> 
> When child is spawned using igt_fork() we can control its initialization
> and prepare child_pid implicitly. Tracking child_tid requires our
> intervention in the code and do something like this:
> 
> if (child_tid == -1)
>         child_tid = gettid()
> 
> Variable was created for using in TLS so each thread is created
> with variable set to -1. This will give each thread it's own "copy"
> and there's no risk to use other thread tid. For each forked child
> we reassign -1 to child_tid to avoid using already set variable.
> 
> Signed-off-by: Zbigniew Kempczyński <zbigniew.kempczynski at intel.com>
> Cc: Dominik Grzegorzek <dominik.grzegorzek at intel.com>
> Cc: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Petri Latvala <petri.latvala at intel.com>
> Acked-by: Arjun Melkaveri <arjun.melkaveri at intel.com>
> ---
>  lib/igt_core.c | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/lib/igt_core.c b/lib/igt_core.c
> index 739e3efab..ce7e27b62 100644
> --- a/lib/igt_core.c
> +++ b/lib/igt_core.c
> @@ -58,6 +58,7 @@
>  #include <glib.h>
>  
>  #include "drmtest.h"
> +#include "intel_allocator.h"
>  #include "intel_chipset.h"
>  #include "intel_io.h"
>  #include "igt_debugfs.h"
> @@ -306,6 +307,10 @@ int num_test_children;
>  int test_children_sz;
>  bool test_child;
>  
> +/* For allocator purposes */
> +pid_t child_pid  = -1;
> +__thread pid_t child_tid  = -1;
> +
>  enum {
>         /*
>          * Let the first values be used by individual tests so options don't
> @@ -2303,6 +2308,8 @@ bool __igt_fork(void)
>         case 0:
>                 test_child = true;
>                 pthread_mutex_init(&print_mutex, NULL);
> +               child_pid = getpid();
> +               child_tid = -1;
>                 exit_handler_count = 0;
>                 reset_helper_process_list();
>                 oom_adjust_for_doom();

Where's the user? Why is it only partially exported? What's the include
for?

Should we also be pulling in gettid from glibc-2.30?

I presume you have some microbenchmarks that reflect the importance of
such caching? Although I can be convinced by an argument that it makes
strace sane.
-Chris


More information about the igt-dev mailing list