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

Re: [PATCH v3 1/1] trace2: write to directory targets

From
JHJeff Hostetler <git@jeffhostetler.com>
Date
Mar 25, 2019, 16:29 UTC
Message-ID
<11e8e140-c2b6-8234-e6a3-affe69286cbf@jeffhostetler.com>
In-Reply-To
<87bm21coco.fsf@evledraar.gmail.com>
On 3/23/2019 4:44 PM, Ævar Arnfjörð Bjarmason wrote:
Show 9 quoted lines
> 
> On Thu, Mar 21 2019, Josh Steadmon wrote:
> 
>> When the value of a trace2 environment variable is an absolute path
>> referring to an existing directory, write output to files (one per
>> process) underneath the given directory. Files will be named according
>> to the final component of the trace2 SID, followed by a counter to avoid
>> potential collisions.
> 
[...]
Show 43 quoted lines
> 
> The reason I'm raising this is that it seems like sweeping an existing
> issue under the rug. We document that the "sid" is "unique", and it's just:
> 
>      <nanotime / 1000 (i.e. *nix time in microseconds)>-<pid>
> 
> So that might be a lie, and in particular I can imagine that say if
> every machine at Google is logging traces into some magic mounted FS
> that there'll be collisions there.
> 
> But then let's *fix that*, because we're also e.g. going to have other
> consumers of these traces using the sid's as primary keys in a logging
> system.
> 
> I wonder if we should just make it a bit longer, human-readable, and
> include a hash of the hostname:
> 
>      perl -MTime::HiRes=gettimeofday -MSys::Hostname -MDigest::SHA=sha1_hex -MPOSIX=strftime -wE '
>          my ($t, $m) = gettimeofday;
>          my $host_hex = substr sha1_hex(hostname()), 0, 8;
>          my $htime = strftime("%Y%m%d%H%M%S", localtime);
>          my $sid = sprintf("%s-%6d-%s-%s",
>              $htime,
>              $m,
>              $host_hex,
>              $$ & 0xFFFF,
>          );
>          say $sid;
>      '
> 
> Which gets you a SID like:
> 
>      20190323213918-404788-c2f5b994-19027
> 
> I.e.:
> 
>      <YYYYMMDDHHMMSS>-<microsecond-offset>-<8 chars of sha1(hostname -f)>-<pid>
> 
> There's obviously ways to make that more compact, but in this case I
> couldn't see a reason to, also using UTC would be a good idea.
> 
> All the trace2 tests pass if I fake that up. Jeff H: Do you have
> anything that relies on the current format?

I'm using the SID hierarchy to track parent and child processes, but the actual format of an individual SID-component is mostly a black box.

I used the microseconds+pid as unique enough. And events for new commands will mostly just append to an existing index, rather than being a random insert like you'd get for a GUID.

I didn't use a GUID here because that seemed overkill and a little bit more expensive, but perhaps that was just premature optimization on my part.

So, a new fixed width format like you suggested above would be fine. I wonder though, if we're moving towards a stronger SID, there's no reason to keep the PID in it. Which makes me wonder about the value of sha(hostname) too. Perhaps, just make it a GUID or some combination of the UTC date and a GUID ( <YYMMDDHHMMSS>-<microseconds>-<GUID> ) or something like that.

If it helps, we can change how I'm reporting the SID between parent and child processes, so that the SID field in the JSON events is just the SID of the current process and have a peer field with the SID-hierarchy. This latter field would only need to be added to the "version" or "start" event. This might make post-processing a little easier. Not sure it matters one way or the other.

I'm open to suggestions here.
Jeff
Previous: Ævar Arnfjörð BjarmasonNext: Jeff Hostetler
Message 32 of 34 in “Randomize / timestamp trace2 targets”
  1. 0/2 Randomize / timestamp trace2 targetsJosh Steadmon, Mar 13, 2019
  2. 1/2 date: make get_time() publicJosh Steadmon, Mar 13, 2019
  3. 2/2 trace2: randomize/timestamp trace2 targetsJosh Steadmon, Mar 13, 2019
  4. Ævar Arnfjörð BjarmasonMar 13, 2019
  5. Jeff HostetlerMar 15, 2019
  6. Ævar Arnfjörð BjarmasonMar 15, 2019
  7. Jeff HostetlerMar 15, 2019
  8. Josh SteadmonMar 15, 2019
  9. Josh SteadmonMar 15, 2019
  10. Junio C HamanoMar 18, 2019
  11. Jeff KingMar 19, 2019
  12. Jeff KingMar 14, 2019
  13. Junio C HamanoMar 14, 2019
  14. Johannes SchindelinMar 14, 2019
  15. Josh SteadmonMar 15, 2019
  16. Jeff HostetlerMar 15, 2019
  17. Josh SteadmonMar 15, 2019
  18. Jeff HostetlerMar 18, 2019
  19. 0/1 Write trace2 output to directoriesJosh Steadmon, Mar 21, 2019
  20. 1/1 trace2: write to directory targetsJosh Steadmon, Mar 21, 2019
  21. Junio C HamanoMar 21, 2019
  22. Jeff HostetlerMar 21, 2019
  23. Junio C HamanoMar 22, 2019
  24. Jeff HostetlerMar 22, 2019
  25. 0/1 Write trace2 output to directoriesJosh Steadmon, Mar 21, 2019
  26. 1/1 trace2: write to directory targetsJosh Steadmon, Mar 21, 2019
  27. Ævar Arnfjörð BjarmasonMar 23, 2019
  28. Junio C HamanoMar 24, 2019
  29. Ævar Arnfjörð BjarmasonMar 24, 2019
  30. Junio C HamanoMar 25, 2019
  31. Ævar Arnfjörð BjarmasonMar 25, 2019
  32. Jeff HostetlerMar 25, 2019
  33. Jeff HostetlerMar 21, 2019
  34. Junio C HamanoMar 22, 2019

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.