<p dir="ltr">Back when that commit was made, didn't glibc cache the getpid() result in userspace? That would explain why it was not noticed.</p>
<br><div class="gmail_quote"><div dir="ltr">On Fri, Jul 7, 2017, 23:18  <<a href="mailto:vcaputo@pengaru.com">vcaputo@pengaru.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">In doing some casual journalctl profiling and stracing, it became apparent<br>
that `journalctl -b --no-pager` runs across a significant quantity of logs,<br>
~10% of the time was thrown away on getpid() calls due to commmit a65f06b.<br>
<br>
As-is:<br>
 # time ./journalctl -b --no-pager > /dev/null<br>
<br>
 real    0m11.033s<br>
 user    0m10.084s<br>
 sys     0m0.943s<br>
<br>
<br>
After changing journal_pid_changed() to simply return 1:<br>
 # time ./journalctl -b --no-pager > /dev/null<br>
<br>
  real    0m9.641s<br>
  user    0m9.449s<br>
  sys     0m0.191s<br>
<br>
<br>
More system time is being expended in repeated getpid() calls than write(),<br>
see the strace:<br>
<br>
 12:51:56.939287 write(1, "Jul 07 09:25:23 x61s unknown"..., 57) = 57 <0.001276><br>
 12:51:56.940633 getpid()                = 10713 <0.000032><br>
 12:51:56.940732 getpid()                = 10713 <0.000012><br>
 12:51:56.940801 getpid()                = 10713 <0.000032><br>
 12:51:56.940867 getpid()                = 10713 <0.000041><br>
 12:51:56.940942 getpid()                = 10713 <0.000041><br>
 12:51:56.941047 getpid()                = 10713 <0.000012><br>
 12:51:56.941117 getpid()                = 10713 <0.000012><br>
 12:51:56.941185 getpid()                = 10713 <0.000011><br>
 12:51:56.941253 getpid()                = 10713 <0.000011><br>
 12:51:56.941320 getpid()                = 10713 <0.000039><br>
 12:51:56.941395 getpid()                = 10713 <0.000041><br>
 12:51:56.941494 getpid()                = 10713 <0.000011><br>
 12:51:56.941561 getpid()                = 10713 <0.000012><br>
 12:51:56.941629 getpid()                = 10713 <0.000039><br>
 12:51:56.942942 write(1, "Jul 07 09:25:23 x61s unknown"..., 57) = 57 <0.000058><br>
 12:51:56.943052 getpid()                = 10713 <0.000039><br>
 12:51:56.943156 getpid()                = 10713 <0.000017><br>
 12:51:56.943230 getpid()                = 10713 <0.000018><br>
 12:51:56.943305 getpid()                = 10713 <0.000012><br>
 12:51:56.943374 getpid()                = 10713 <0.000017><br>
 12:51:56.943449 getpid()                = 10713 <0.000011><br>
 12:51:56.943517 getpid()                = 10713 <0.000011><br>
 12:51:56.943585 getpid()                = 10713 <0.000011><br>
 12:51:56.943652 getpid()                = 10713 <0.000011><br>
 12:51:56.943721 getpid()                = 10713 <0.000030><br>
 12:51:56.943796 getpid()                = 10713 <0.000041><br>
 12:51:56.943870 getpid()                = 10713 <0.000041><br>
 12:51:56.943944 getpid()                = 10713 <0.000041><br>
 12:51:56.944061 getpid()                = 10713 <0.001334><br>
 12:51:56.945459 write(1, "Jul 07 09:25:23 x61s unknown"..., 56) = 56 <0.000018><br>
 12:51:56.945544 getpid()                = 10713 <0.000017><br>
 12:51:56.945620 getpid()                = 10713 <0.000017><br>
 12:51:56.945694 getpid()                = 10713 <0.000012><br>
 12:51:56.945763 getpid()                = 10713 <0.000011><br>
 12:51:56.945832 getpid()                = 10713 <0.000012><br>
 12:51:56.945901 getpid()                = 10713 <0.000011><br>
 12:51:56.945969 getpid()                = 10713 <0.000011><br>
 12:51:56.946048 getpid()                = 10713 <0.000013><br>
 12:51:56.946118 getpid()                = 10713 <0.000024><br>
 12:51:56.946188 getpid()                = 10713 <0.000047><br>
 12:51:56.946277 getpid()                = 10713 <0.000041><br>
 12:51:56.946353 getpid()                = 10713 <0.000041><br>
 12:51:56.946428 getpid()                = 10713 <0.000040><br>
 12:51:56.946539 getpid()                = 10713 <0.001363><br>
<br>
As this is public sd-journal API, it's somewhat set in stone.  However,<br>
there's nothing preventing the systemd-internal tooling from linking with<br>
a less defensive/conformant underlying implementation shared with the public<br>
API implementation where these kinds of overheads can be preserved.<br>
<br>
For the curious; the logs being processed for this boot are 48 * 8MiB on SSD,<br>
1.8Ghz Core2 Duo, 4.12 kernel.<br>
<br>
Regards,<br>
Vito Caputo<br>
_______________________________________________<br>
systemd-devel mailing list<br>
<a href="mailto:systemd-devel@lists.freedesktop.org" target="_blank">systemd-devel@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/systemd-devel" rel="noreferrer" target="_blank">https://lists.freedesktop.org/mailman/listinfo/systemd-devel</a><br>
</blockquote></div><div dir="ltr">-- <br></div><div data-smartmail="gmail_signature"><p dir="ltr">Mantas Mikulėnas <<a href="mailto:grawity@gmail.com">grawity@gmail.com</a>><br>
Sent from my phone</p>
</div>