On Wed, May 9, 2012 at 2:01 PM, David Ebbo <david.ebbo@xxxxxxxxx> wrote: > We’re using git-upload-pack in a simple git server. When the repo is > on a slow share, we’re noticing that git-upload-pack is hugging the > CPU during the whole pack-objects operation. What OS is it run on? What git version? > More details: > > - git-upload-pack gets launched (with params git-upload-pack > --stateless-rpc //path/to/repo) > - it itself launches a git process (with params pack-objects --revs > --all --stdout --progress --delta-base-offset). This git process is > the one that does all the disk I/O, but it's not the one using up the > CPU time. > - git-upload-pack appears to be waiting for the git process, and is at > high CPU during that time, suggesting that it's doing some kind of > busy wait. To further test that, I stopped the git process in the > debugger, preventing it from making progress. At that point, > git-upload-pack pegs the CPU forever. How about stopping upload-pack and see where it stops? There's a main loop in upload-pack.c, create_pack_file() that is only active when data comes. I looked but failed to see how it becomes a busywait loop. Maybe you can put some debugging there. Setting env var GIT_TRACE_PACKET and GIT_DEBUG_SEND_PACK before running upload-pack might also help. > Would someone familiar with the sources be able to comment on this > busy wait behavior, and on whether it could conceivably be done in a > way that doesn’t use up some much CPU? -- Duy -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html