Re: [RFC \ WISH] Add -o option to git-rev-list

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: Marco Costalba <mcostalba@...>
Cc: Git Mailing List <git@...>, Junio C Hamano <junkio@...>, Alex Riesen <raa.lkml@...>, Shawn Pearce <spearce@...>
Date: Sunday, December 10, 2006 - 6:53 pm

On Sun, 10 Dec 2006, Marco Costalba wrote:

That's because fread() will block until it gets all data. Did you actually 
ever try this with a uncached tree and did you compare what you got with a 
plain "read()". 

On older kernels, I guarantee that you get 4kB at a time for reads, even 
for a blocking pipe. Because we have bigger pipe buffers these days, it 
_may_ return 64kB at a time every time, but only if the writer is much 
faster than the reader.

Based on the fact that you say that "read()" was ten times slower than 
fread(), I very much suspect you got 4kB at a time, and then slept 100ms 
each time or something.

Anyway, you should seriously also check the case when "git rev-list" is 
slow because you have cold caches and unpacked objects. You can't wait for 
it to synchronously write a thousand lines or so - that could take 
seconds.


something like

	fcntl(fileno(file), F_SETFL, O_NONBLOCK);

will do it, and then your loop should look something like

	for (;;) {
		int count = read(fileno(file), buf, BUFSIZE);
		if (!count) {
			/* All done, no more to read */
			return 0;
		}
		if (count < 0) {
			if (errno == EAGAIN)
				break;
			if (errno == EINTR)
				continue;
			/* Anything else is fatal - report error */
			return -1;
		}
		... handle 'count' new bytes here ...
	}
	.. this is the EAGAIN case ..
	either set polling on the file descriptor, or use a
	timer here yo get back to this loop eventually.

looks about right.

		Linus
-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[RFC \ WISH] Add -o option to git-rev-list, Marco Costalba, (Sun Dec 10, 7:38 am)
Re: [RFC \ WISH] Add -o option to git-rev-list, Linus Torvalds, (Sun Dec 10, 2:16 pm)
Re: [RFC \ WISH] Add -o option to git-rev-list, Marco Costalba, (Sun Dec 10, 3:51 pm)
Re: [RFC \ WISH] Add -o option to git-rev-list, Andreas Ericsson, (Mon Dec 11, 7:39 am)
Re: [RFC \ WISH] Add -o option to git-rev-list, Marco Costalba, (Mon Dec 11, 8:59 am)
Re: [RFC \ WISH] Add -o option to git-rev-list, Andreas Ericsson, (Mon Dec 11, 9:40 am)
Re: [RFC \ WISH] Add -o option to git-rev-list, Linus Torvalds, (Sun Dec 10, 4:08 pm)
Re: [RFC \ WISH] Add -o option to git-rev-list, Linus Torvalds, (Sun Dec 10, 4:19 pm)
Re: [RFC \ WISH] Add -o option to git-rev-list, Marco Costalba, (Sun Dec 10, 6:05 pm)
Re: [RFC \ WISH] Add -o option to git-rev-list, Linus Torvalds, (Sun Dec 10, 6:16 pm)
Re: [RFC \ WISH] Add -o option to git-rev-list, Marco Costalba, (Sun Dec 10, 6:35 pm)
Re: [RFC \ WISH] Add -o option to git-rev-list, Linus Torvalds, (Sun Dec 10, 6:53 pm)
Re: [RFC \ WISH] Add -o option to git-rev-list, Marco Costalba, (Sun Dec 10, 8:15 pm)
Re: [RFC \ WISH] Add -o option to git-rev-list, Josef Weidendorfer, (Mon Dec 11, 5:26 am)
Re: [RFC \ WISH] Add -o option to git-rev-list, Marco Costalba, (Mon Dec 11, 8:52 am)
Re: [RFC \ WISH] Add -o option to git-rev-list, Josef Weidendorfer, (Mon Dec 11, 9:28 am)
Re: [RFC \ WISH] Add -o option to git-rev-list, Marco Costalba, (Mon Dec 11, 1:28 pm)
Re: [RFC \ WISH] Add -o option to git-rev-list, Linus Torvalds, (Sun Dec 10, 8:51 pm)
Re: [RFC \ WISH] Add -o option to git-rev-list, Marco Costalba, (Mon Dec 11, 3:17 am)
Re: [RFC \ WISH] Add -o option to git-rev-list, Linus Torvalds, (Mon Dec 11, 12:59 pm)
Re: [RFC \ WISH] Add -o option to git-rev-list, Linus Torvalds, (Mon Dec 11, 1:07 pm)
Re: [RFC \ WISH] Add -o option to git-rev-list, Marco Costalba, (Mon Dec 11, 1:39 pm)
Re: [RFC \ WISH] Add -o option to git-rev-list, Linus Torvalds, (Mon Dec 11, 2:15 pm)
Re: [RFC \ WISH] Add -o option to git-rev-list, Marco Costalba, (Mon Dec 11, 2:59 pm)
Re: [RFC \ WISH] Add -o option to git-rev-list, Josef Weidendorfer, (Mon Dec 11, 4:28 pm)
Re: [RFC \ WISH] Add -o option to git-rev-list, Linus Torvalds, (Mon Dec 11, 4:40 pm)
Re: [RFC \ WISH] Add -o option to git-rev-list, Josef Weidendorfer, (Mon Dec 11, 4:54 pm)
Re: [RFC \ WISH] Add -o option to git-rev-list, Linus Torvalds, (Mon Dec 11, 5:14 pm)
Re: [RFC \ WISH] Add -o option to git-rev-list, Marco Costalba, (Fri Dec 15, 2:45 pm)
Re: [RFC \ WISH] Add -o option to git-rev-list, Linus Torvalds, (Fri Dec 15, 3:20 pm)
Re: [RFC \ WISH] Add -o option to git-rev-list, Marco Costalba, (Fri Dec 15, 4:41 pm)
Re: [RFC \ WISH] Add -o option to git-rev-list, Marco Costalba, (Fri Dec 15, 5:04 pm)
Re: [RFC \ WISH] Add -o option to git-rev-list, Linus Torvalds, (Mon Dec 11, 3:25 pm)
Re: [RFC \ WISH] Add -o option to git-rev-list, Alex Riesen, (Mon Dec 11, 6:00 am)
Re: [RFC \ WISH] Add -o option to git-rev-list, Marco Costalba, (Sun Dec 10, 6:09 pm)
globs in partial checkout?, Michael S. Tsirkin, (Sun Dec 10, 4:00 pm)
Re: globs in partial checkout?, Linus Torvalds, (Sun Dec 10, 4:13 pm)
Re: globs in partial checkout?, Michael S. Tsirkin, (Sun Dec 10, 5:07 pm)
Re: [RFC \ WISH] Add -o option to git-rev-list, Alex Riesen, (Sun Dec 10, 10:54 am)