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

Re: [PATCH 3/6] pack-bitmap.c: drop unnecessary 'inline's

From
Jeff King <peff@peff.net>
Date
Mar 21, 2023, 17:40 UTC
Message-ID
<20230321174033.GE3119834@coredump.intra.peff.net>
In-Reply-To
<2e3e3a7145a5851fcf5c485b38d14344c9b824d7.1679342296.git.me@ttaylorr.com>
On Mon, Mar 20, 2023 at 04:02:46PM -0400, Taylor Blau wrote:
> Both `read_be32()` and `read_u8()` are defined as inline dating back
> to b5007211b6 (pack-bitmap: do not use gcc packed attribute,
> 2014-11-27), though that commit does not hint at why the functions were
> defined with that attribute.

I think any non-header inline like this can implicitly be assumed to be "I thought it would make things faster". ;)

Show 22 quoted lines
> However (at least with GCC 12.2.0, at the time of writing), the
> resulting pack-bitmap.o contains the same instructions with or without
> the inline attribute applied to these functions:
> 
>     $ make O=3 pack-bitmap.o && mv pack-bitmap.o{,.before}
>     [ apply this patch ]
>     $ make O=3 pack-bitmap.o && mv pack-bitmap.o{,.after}
>     $ objdump -d pack-bitmap.o.before >before
>     $ objdump -d pack-bitmap.o.after >after
>     $ diff -u pack-bitmap.o.{before,after}
>     --- before	2023-03-15 18:54:17.021580095 -0400
>     +++ after	2023-03-15 18:54:21.853552218 -0400
>     @@ -1,5 +1,5 @@
> 
>     -pack-bitmap.o.before:     file format elf64-x86-64
>     +pack-bitmap.o.after:     file format elf64-x86-64
> 
>      Disassembly of section .text:
> 
> So defining these functions as inline is at best a noop, and at worst
> confuses the reader into thinking that there is some trickier reason
> that they are defined as inline when there isn't.

Nice digging. The "inline" is really just a hint to the compiler here, and obviously it does not need that hint. I do wonder if that is still true after you make them more complicated in a later patch in the series.

On the other hand, I doubt that these need to be very optimized at all. If there were a tight loop of single-byte reads, the function overhead might be noticeable. But generally we're reading only a few items from the beginning of each entry, and then reading the bulk of the data via ewah_read_mmap().

So I think the overall argument is "let the compiler decide what is good to inline and what is not".

-Peff
Previous: Taylor BlauNext: Taylor Blau
Message 7 of 29 in “pack-bitmap: miscellaneous mmap read hardening”
  1. 0/6 pack-bitmap: miscellaneous mmap read hardeningTaylor Blau, Mar 20, 2023
  2. 1/6 pack-bitmap.c: hide bitmap internals in `read_u8()`Taylor Blau, Mar 20, 2023
  3. Jeff KingMar 21, 2023
  4. Derrick StoleeMar 24, 2023
  5. 2/6 pack-bitmap.c: hide bitmap internals in `read_be32()`Taylor Blau, Mar 20, 2023
  6. 3/6 pack-bitmap.c: drop unnecessary 'inline'sTaylor Blau, Mar 20, 2023
  7. Jeff KingMar 21, 2023
  8. 4/6 pack-bitmap.c: factor out manual `map_pos` manipulationTaylor Blau, Mar 20, 2023
  9. Jeff KingMar 21, 2023
  10. Derrick StoleeMar 24, 2023
  11. Jeff KingMar 24, 2023
  12. Taylor BlauMar 24, 2023
  13. Jeff KingMar 25, 2023
  14. Taylor BlauMar 24, 2023
  15. Taylor BlauMar 24, 2023
  16. Taylor BlauMar 24, 2023
  17. 5/6 pack-bitmap.c: use `bitmap_index_seek()` where possibleTaylor Blau, Mar 20, 2023
  18. Jeff KingMar 21, 2023
  19. Derrick StoleeMar 24, 2023
  20. Jeff KingMar 24, 2023
  21. Junio C HamanoMar 24, 2023
  22. Jeff KingMar 24, 2023
  23. Junio C HamanoMar 24, 2023
  24. Taylor BlauMar 24, 2023
  25. 6/6 pack-bitmap.c: factor out `bitmap_index_seek_commit()`Taylor Blau, Mar 20, 2023
  26. Jeff KingMar 21, 2023
  27. Taylor BlauMar 21, 2023
  28. Jeff KingMar 21, 2023
  29. Derrick StoleeMar 24, 2023

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.