git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] trace2 tests: guard pthread test with "PTHREAD"

From
JHJeff Hostetler <git@jeffhostetler.com>
Date
Nov 28, 2022, 16:37 UTC
Message-ID
<6c725ed6-4d74-c260-98fb-dc965b4647ee@jeffhostetler.com>
In-Reply-To
<221125.867czjo3ud.gmgdl@evledraar.gmail.com>
On 11/25/22 3:05 AM, Ævar Arnfjörð Bjarmason wrote:
Show 16 quoted lines
> 
> On Fri, Nov 25 2022, Junio C Hamano wrote:
> 
>> Ævar Arnfjörð Bjarmason  <avarab@gmail.com> writes:
>>
>>> Since 81071626ba1 (trace2: add global counter mechanism, 2022-10-24)
>>> these tests have been failing when git is compiled with NO_PTHREADS=Y,
>>> which is always the case e.g. if 'uname -s' is "NONSTOP_KERNEL".
>>>
>>> Reported-by: Randall S. Becker <randall.becker@nexbridge.ca>
>>> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
>>> ---
>>>   t/t0211-trace2-perf.sh | 4 ++--
>>>   1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> Makes sense, to sweep the immediate breakage under prerequisite.

This change LGTM. The test-tool will report an error trying to create the requested threads, so there will not be any per-thread output for the grep to match.

Show 5 quoted lines
>>
>> But why would a global counter need threading?  I know that the
>> counters can optionally report per-thread stats, but that is
>> optional and it would still be useful if we can count events in a
>> single-threaded program, no?

Timers & counters are accumulated in per-thread local storage. This allows them to work in a lock-free manner.

Timer/Counter usage by a single-threaded program just accumulates data in the thread local storage of the "main" thread so that the code is the same in all cases.

Global timers and counters are accumulated from per-thread ones during thread-exit. (See calls to `tr2_update_final_timers()` and `tr2_update_final_counters()` in `trace2_thread_exit_fl()`.) This is the only step that requires a lock.

There are also calls to those two routines in `tr2main_atexit_handler()` to accumulate any timer/counter usage in the main thread into the globals.

The net-net of all of this is that the global (aka final) values of the timers and counters are always safely computed (and in the same way) regardless of whether threads were used at any point during the life of the process. That is, if "main" was the only thread, the global/final values are just the values from the main thread.

Show 7 quoted lines
> That was my thought as well, but these tests are specifically testing
> how it interacts with threading. The counter mechanism works in general
> without threading.
> 
> The test descriptions don't help, and should really say that they're to
> do with threading in particular, but I wanted to keep this as small as
> possible for rc[12] and the final, so I didn't fix that while-at-it.

There is large comment block above `have_timer_event()` and `have_counter_event()` in t0211 that explained the purpose of the test1 and test2 tests for each. Would it help if that text were moved down before each of the individual tests rather than where it is now?

Thanks Jeff

Previous: Ævar Arnfjörð BjarmasonNext: Ævar Arnfjörð Bjarmason
Message 4 of 6 in “trace2 tests: guard pthread test with "PTHREAD"”
  1. trace2 tests: guard pthread test with "PTHREAD"Ævar Arnfjörð Bjarmason, Nov 24, 2022
  2. Junio C HamanoNov 25, 2022
  3. Ævar Arnfjörð BjarmasonNov 25, 2022
  4. Jeff HostetlerNov 28, 2022
  5. Ævar Arnfjörð BjarmasonNov 28, 2022
  6. Jeff HostetlerNov 30, 2022

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.