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

Re: win2k/cygwin cannot handle even moderately sized packs

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Nov 13, 2006, 12:45 UTC
Message-ID
<Pine.LNX.4.63.0611131333000.13772@wbgn013.biozentrum.uni-wuerzburg.de>
In-Reply-To
<81b0412b0611070302h50541cd5mf0758afe0d6befda@mail.gmail.com>
Hi,
On Tue, 7 Nov 2006, Alex Riesen wrote:
Show 12 quoted lines
> For me, it fails even on 332Mb pack:
> 
> $ git reset --hard 61bb7fcb
> fatal: packfile .git/objects/pack/pack-ad37...pack cannot be mapped.
> 
> Instrumenting the code reveals that it fails on 348876870 bytes.
> Strangely enough, a cygwin program which just reads that pack
> many times without freeing the mem goes up to 1395507480 (1330Mb).
> 
> If I replace the malloc (cygwin) with native VirtualAlloc(MEM_COMMIT)
> it reports that "Not enough storage is available to process this command",
> which is just ENOMEM, I think.

This looks to me as if you have NO_MMAP=1 set in your Makefile (which I also do automatically when compiling on cygwin).

The old problem: Windows does not have fork.

<digression> And before somebody starts cygwin bashing: don't. It is not cygwin's problem, it is Windows'. The cygwin people worked long and hard on something truly useful, and it helps me _every_ time I have to work on a Windows platform (which _is_ utter crap). Some problems of Windows are so unhideable though, that even cygwin cannot work around them. </digression>

Cygwin provides a mmap(), which works remarkably well even with the emulated fork(), but one thing is not possible: since mmap()ed files have to be _reopened_ after a fork(), and git uses the open-temp-file-then-delete-it-but-continue-to-use-it paradigm quite often, we work around it by setting NO_MMAP=1. Again, this is _not_ Cygwin's fault!

And I think that a mmap() of 332MB would not fail.

Long time ago (to be precise, July 18th), Linus suggested (in Message-Id: <Pine.LNX.4.64.0607180837260.3386@evo.osdl.org>) to find out which mmap() calls are _not_ used before a fork(), and not emulate them by malloc().

I never came around to do that, but maybe others do?

Ciao, Dscho

Previous: Christopher FaylorNext: Alex Riesen
Message 19 of 21 in “win2k/cygwin cannot handle even moderately sized packs”
  1. Alex RiesenNov 7, 2006
  2. Noel GrandinNov 7, 2006
  3. Alex RiesenNov 7, 2006
  4. Jakub NarebskiNov 7, 2006
  5. Alex RiesenNov 7, 2006
  6. Shawn PearceNov 7, 2006
  7. Alex RiesenNov 7, 2006
  8. Shawn PearceNov 7, 2006
  9. Shawn PearceNov 7, 2006
  10. Shawn PearceNov 7, 2006
  11. Alex RiesenNov 7, 2006
  12. Shawn PearceNov 8, 2006
  13. Alex RiesenNov 8, 2006
  14. Shawn PearceNov 8, 2006
  15. Alex RiesenNov 8, 2006
  16. Shawn PearceNov 8, 2006
  17. Alex RiesenNov 7, 2006
  18. Christopher FaylorNov 8, 2006
  19. Johannes SchindelinNov 13, 2006
  20. Alex RiesenNov 13, 2006
  21. Alex RiesenNov 13, 2006

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.