• Ian Rogers's avatar
    perf dsos: Switch backing storage to array from rbtree/list · 3f4ac23a
    Ian Rogers authored
    DSOs were held on a list for fast iteration and in an rbtree for fast
    finds.
    
    Switch to using a lazily sorted array where iteration is just iterating
    through the array and binary searches are the same complexity as
    searching the rbtree.
    
    The find may need to sort the array first which does increase the
    complexity, but add operations have lower complexity and overall the
    complexity should remain about the same.
    
    The set name operations on the dso just records that the array is no
    longer sorted, avoiding complexity in rebalancing the rbtree.
    
    Tighter locking discipline is enforced to avoid the array being resorted
    while long and short names or ids are changed.
    
    The array is smaller in size, replacing 6 pointers with 2, and so even
    with extra allocated space in the array, the array may be 50%
    unoccupied, the memory saving should be at least 2x.
    
    Committer testing:
    
    On a previous version of this patchset we were getting a lot of warnings
    about deleting a DSO still on a list, now it is ok:
    
      root@x1:~# perf probe -l
      root@x1:~# perf probe finish_task_switch
      Added new event:
        probe:finish_task_switch (on finish_task_switch)
    
      You can now use it in all perf tools, such as:
    
      	perf record -e probe:finish_task_switch -aR sleep 1
    
      root@x1:~# perf probe -l
        probe:finish_task_switch (on finish_task_switch@kernel/sched/core.c)
      root@x1:~# perf trace -e probe:finish_task_switch/max-stack=8/ --max-events=1
           0.000 migration/0/19 probe:finish_task_switch(__probe_ip: -1894408688)
                                             finish_task_switch.isra.0 ([kernel.kallsyms])
                                             __schedule ([kernel.kallsyms])
                                             schedule ([kernel.kallsyms])
                                             smpboot_thread_fn ([kernel.kallsyms])
                                             kthread ([kernel.kallsyms])
                                             ret_from_fork ([kernel.kallsyms])
                                             ret_from_fork_asm ([kernel.kallsyms])
      root@x1:~#
      root@x1:~# perf probe -d probe:*
      Removed event: probe:finish_task_switch
      root@x1:~# perf probe -l
      root@x1:~#
    
    I also ran the full 'perf test' suite after applying this one, no
    regressions.
    Signed-off-by: default avatarIan Rogers <irogers@google.com>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
    Cc: Ben Gainey <ben.gainey@arm.com>
    Cc: Changbin Du <changbin.du@huawei.com>
    Cc: Chengen Du <chengen.du@canonical.com>
    Cc: Colin Ian King <colin.i.king@gmail.com>
    Cc: Dima Kogan <dima@secretsauce.net>
    Cc: Ilkka Koskinen <ilkka@os.amperecomputing.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: James Clark <james.clark@arm.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: K Prateek Nayak <kprateek.nayak@amd.com>
    Cc: Kan Liang <kan.liang@linux.intel.com>
    Cc: Leo Yan <leo.yan@linux.dev>
    Cc: Li Dong <lidong@vivo.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Paran Lee <p4ranlee@gmail.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Song Liu <song@kernel.org>
    Cc: Sun Haiyong <sunhaiyong@loongson.cn>
    Cc: Thomas Richter <tmricht@linux.ibm.com>
    Cc: Tiezhu Yang <yangtiezhu@loongson.cn>
    Cc: Yanteng Si <siyanteng@loongson.cn>
    Cc: zhaimingbing <zhaimingbing@cmss.chinamobile.com>
    Link: https://lore.kernel.org/r/20240504213803.218974-2-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    3f4ac23a
dso.h 11 KB