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

Re: GSoC - Some questions on the idea of

From
NKNeal Kreitzinger <nkreitzinger@gmail.com>
Date
Mar 31, 2012, 20:28 UTC
Message-ID
<4F7768D6.3010400@gmail.com>
In-Reply-To
<20120330203430.GB20376@sigill.intra.peff.net>
On 3/30/2012 3:34 PM, Jeff King wrote:
Show 35 quoted lines
> On Fri, Mar 30, 2012 at 03:51:20PM -0400, Bo Chen wrote:
>
>> The sub-problems of "delta for large file" problem.
>>
>> 1 large file
>>
> But let's take a step back for a moment. Forget about whether a file is
> binary or not. Imagine you want to store a very large file in git.
>
> What are the operations that will perform badly? How can we make them
> perform acceptably, and what tradeoffs must we make? E.g., the way the
> diff code is written, it would be very difficult to run "git diff" on a
> 2 gigabyte file. But is that actually a problem? Answering that means
> talking about the characteristics of 2 gigabyte files, and what we
> expect to see, and to what degree our tradeoffs will impact them.
>
> Here's a more concrete example. At first, even storing a 2 gigabyte file
> with "git add" was painful, because we would load the whole thing in
> memory. Repacking the repository was painful, because we had to rewrite
> the whole 2G file into a packfile. Nowadays, we stream large files
> directly into their own packfiles, and we have to pay the I/O only once
> (and the memory cost never). As a tradeoff, we no longer get delta
> compression of large objects. That's OK for some large objects, like
> movie files (which don't tend to delta well, anyway). But it's not for
> other objects, like virtual machine images, which do tend to delta well.
>
> So can we devise a solution which efficiently stores these
> delta-friendly objects, without losing the performance improvements we
> got with the stream-directly-to-packfile approach?
>
> One possible solution is breaking large files into smaller chunks using
> something like the bupsplit algorithm (and I won't go into the details
> here, as links to bup have already been mentioned elsewhere, and Junio's
> patches make a start at this sort of splitting).
>

(I'm no expert on "big-files" in git or elsewhere, but this thread is immensely interesting to me as a git user who wants to track all sorts of binary files and possibly large text files in the very near future, ie. all components tied to a server build and upgrades beyond the linux-distro/rpms and perhaps including them also.)

Let's take an even bigger step back for a moment. Who determines if a file shall be a big-file or not? Git or the user? How is it determined if a file shall be a "big-file" or not?

Who decides bigness: Bigness seems to be relative to system resources. Does the user crunch the numbers to determine if a file is big-file, or does git? If the numbers are relative then should git query the system and make the determination? Either way, once the system-resources are upgraded and formerly "big-files" are no longer considered "big" how is the previous history refactored to behave "non-big-file-like"? Conversely, if the system-resources are re-distributed so that formerly non-big files are now relatively big (ie, moved from powerful central server login to laptops), how is the history refactored to accommodate the newly-relative-bigness?

How bigness is decided: There seems to be two basic types of big-files: big-worktree-files, and big-history-files. A big-worktree-file that is delta-friendly is not a big-history-file. A non-big-worktree-file that is delta-unfriendly is a big-file-history problem. If you are working alone on an old computer you are probably more concerned about big-worktree-files (memory). If you are working in a large group making lots of changes to the same files on a powerful server then you are probably more concerned about big-history-file-size (diskspace). Of course, all are concerned about big-worktree-files that are delta-unfriendly.

At what point is a delta-friendly file considered a "big-file"? I assume that may depend on the degree delta-friendliness. I imagine that a text file and vm-image differ in delta-friendliness by several degrees.

At what point(s) is a delta-unfriendly file considered a "big-file"? I assume that may depend on the degree(s) of delta-unfriendliness. I imagine a compiled program and compressed-container differ in delta-unfriendliness by several degrees.

My understanding is that git does not ever delta-compress binary files. 
  That would mean even a small-worktree-binary-file becomes a 
big-history-file over time.

v/r, neal

Previous: Neal KreitzingerNext: Bo Chen
Message 32 of 43 in “GSoC - Some questions on the idea of "Better big-file support".”
  1. Bo ChenMar 28, 2012
  2. Nguyen Thai Ngoc DuyMar 28, 2012
  3. SergioMar 28, 2012
  4. Bo ChenMar 30, 2012
  5. Bo ChenMar 30, 2012
  6. Jeff KingMar 30, 2012
  7. Bo ChenMar 30, 2012
  8. Sergio CallegariMar 31, 2012
  9. Neal KreitzingerMar 31, 2012
  10. Jeff KingApr 2, 2012
  11. Sergio CallegariApr 3, 2012
  12. Neal KreitzingerApr 11, 2012
  13. Jonathan NiederApr 11, 2012
  14. Neal KreitzingerApr 11, 2012
  15. Jeff KingApr 11, 2012
  16. Neal KreitzingerApr 11, 2012
  17. Neal KreitzingerApr 11, 2012
  18. Jonathan NiederApr 11, 2012
  19. Junio C HamanoApr 11, 2012
  20. Jonathan NiederApr 11, 2012
  21. Neal KreitzingerApr 11, 2012
  22. Jeff KingApr 11, 2012
  23. Neal KreitzingerApr 12, 2012
  24. Jeff KingApr 12, 2012
  25. Neal KreitzingerApr 12, 2012
  26. Bo ChenApr 13, 2012
  27. Neal KreitzingerMar 31, 2012
  28. Jeff KingApr 2, 2012
  29. Junio C HamanoApr 2, 2012
  30. Jeff KingApr 3, 2012
  31. Neal KreitzingerMar 31, 2012
  32. Neal KreitzingerMar 31, 2012
  33. Bo ChenMar 31, 2012
  34. Nguyen Thai Ngoc DuyApr 1, 2012
  35. Bo ChenApr 1, 2012
  36. Nguyen Thai Ngoc DuyApr 2, 2012
  37. Bo ChenMar 30, 2012
  38. Jeff KingMar 30, 2012
  39. Jeff KingApr 15, 2012
  40. Neal KreitzingerApr 15, 2012
  41. Jeff KingApr 16, 2012
  42. Neal KreitzingerMay 10, 2012
  43. Jeff KingMay 10, 2012

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.