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

Re: Something is broken in repack

From
Jon Smirl <jonsmirl@gmail.com>
Date
Dec 12, 2007, 17:12 UTC
Message-ID
<9e4733910712120912l342350f2i1f190c45730108f2@mail.gmail.com>
In-Reply-To
<alpine.LFD.0.9999.0712120826440.25032@woody.linux-foundation.org>
On 12/12/07, Linus Torvalds <torvalds@linux-foundation.org> wrote:
Show 21 quoted lines
>
>
> On Wed, 12 Dec 2007, Nicolas Pitre wrote:
> >
> > So... my conclusion is that the glibc allocator has fragmentation issues
> > with this work load, given the notable difference with the Google
> > allocator, which itself might not be completely immune to fragmentation
> > issues of its own.
>
> Yes.
>
> Note that delta following involves patterns something like
>
>    allocate (small) space for delta
>    for i in (1..depth) {
>         allocate large space for base
>         allocate large space for result
>         .. apply delta ..
>         free large space for base
>         free small space for delta
>    }
Is it hard to hack up something that statically allocates a big block
of memory per thread for these two and then just reuses it?
   allocate (small) space for delta
   allocate large space for base

The alternating between long term and short term allocations definitely aggravates fragmentation.

Show 28 quoted lines
>
> so if you have some stupid heap algorithm that doesn't try to merge and
> re-use free'd spaces very aggressively (because that takes CPU time!), you
> might have memory usage be horribly inflated by the heap having all those
> holes for all the objects that got free'd in the chain that don't get
> aggressively re-used.
>
> Threaded memory allocators then make this worse by probably using totally
> different heaps for different threads (in order to avoid locking), so they
> will *all* have the fragmentation issue.
>
> And if you *really* want to cause trouble for a memory allocator, what you
> should try to do is to allocate the memory in one thread, and free it in
> another, and then things can really explode (the freeing thread notices
> that the allocation is not in its thread-local heap, so instead of really
> freeing it, it puts it on a separate list of areas to be freed later by
> the original thread when it needs memory - or worse, it adds it to the
> local thread list, and makes it effectively totally impossible to then
> ever merge different free'd allocations ever again because the freed
> things will be on different heap lists!).
>
> I'm not saying that particular case happens in git, I'm just saying that
> it's not unheard of. And with the delta cache and the object lookup, it's
> not at _all_ impossible that we hit the "allocate in one thread, free in
> another" case!
>
>                 Linus
>
-- 
Jon Smirl
jonsmirl@gmail.com
Previous: Linus TorvaldsNext: Wolfram Gloger
Message 50 of 82 in “Something is broken in repack”
  1. Jon SmirlDec 7, 2007
  2. Linus TorvaldsDec 8, 2007
  3. pack-objects: fix delta cache size accountingNicolas Pitre, Dec 8, 2007
  4. Nicolas PitreDec 8, 2007
  5. Jon SmirlDec 8, 2007
  6. Nicolas PitreDec 8, 2007
  7. Jon SmirlDec 8, 2007
  8. David BrownDec 8, 2007
  9. Jon SmirlDec 8, 2007
  10. Nicolas PitreDec 8, 2007
  11. Jon SmirlDec 8, 2007
  12. Nicolas PitreDec 8, 2007
  13. Harvey HarrisonDec 8, 2007
  14. Jon SmirlDec 8, 2007
  15. Harvey HarrisonDec 8, 2007
  16. Junio C HamanoDec 8, 2007
  17. Junio C HamanoDec 9, 2007
  18. Jon SmirlDec 9, 2007
  19. Jon SmirlDec 9, 2007
  20. Nicolas PitreDec 10, 2007
  21. Nicolas PitreDec 10, 2007
  22. David BrownDec 8, 2007
  23. Nicolas PitreDec 10, 2007
  24. Jon SmirlDec 10, 2007
  25. Morten WelinderDec 10, 2007
  26. Jon SmirlDec 11, 2007
  27. Junio C HamanoDec 11, 2007
  28. Nicolas PitreDec 11, 2007
  29. David KastrupDec 11, 2007
  30. Pierre HabouzitDec 11, 2007
  31. David KastrupDec 11, 2007
  32. Nicolas PitreDec 11, 2007
  33. Jon SmirlDec 11, 2007
  34. Jon SmirlDec 11, 2007
  35. Jon SmirlDec 11, 2007
  36. Andreas EricssonDec 11, 2007
  37. Nicolas PitreDec 11, 2007
  38. Nicolas PitreDec 11, 2007
  39. Jon SmirlDec 11, 2007
  40. Nicolas PitreDec 11, 2007
  41. Jon SmirlDec 11, 2007
  42. Nicolas PitreDec 12, 2007
  43. David KastrupDec 12, 2007
  44. Wolfram GlogerDec 14, 2007
  45. Nicolas PitreDec 12, 2007
  46. Paolo BonziniDec 12, 2007
  47. Linus TorvaldsDec 12, 2007
  48. David MillerDec 12, 2007
  49. Linus TorvaldsDec 12, 2007
  50. Jon SmirlDec 12, 2007
  51. Wolfram GlogerDec 14, 2007
  52. David KastrupDec 14, 2007
  53. Wolfram GlogerDec 14, 2007
  54. Nguyen Thai Ngoc DuyDec 13, 2007
  55. Paolo BonziniDec 13, 2007
  56. Paolo BonziniDec 13, 2007
  57. Johannes SixtDec 13, 2007
  58. Jakub NarebskiDec 14, 2007
  59. Paolo BonziniDec 14, 2007
  60. Nguyen Thai Ngoc DuyDec 14, 2007
  61. Paolo BonziniDec 14, 2007
  62. Harvey HarrisonDec 14, 2007
  63. Jakub NarebskiDec 14, 2007
  64. Nguyen Thai Ngoc DuyDec 14, 2007
  65. Nicolas PitreDec 14, 2007
  66. Nicolas PitreDec 12, 2007
  67. Andreas EricssonDec 13, 2007
  68. Wolfram GlogerDec 14, 2007
  69. Linus TorvaldsDec 11, 2007
  70. Nicolas PitreDec 11, 2007
  71. David MillerDec 11, 2007
  72. Nicolas PitreDec 11, 2007
  73. Andreas EricssonDec 11, 2007
  74. Jon SmirlDec 11, 2007
  75. Nicolas PitreDec 11, 2007
  76. Linus TorvaldsDec 11, 2007
  77. Junio C HamanoDec 11, 2007
  78. Andreas EricssonDec 11, 2007
  79. Daniel BerlinDec 11, 2007
  80. Nicolas PitreDec 11, 2007
  81. SeanDec 11, 2007
  82. Jon SmirlDec 11, 2007

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.