login
Header Space

 
 

Re: cleaner/better zlib sources?

Score:
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: Davide Libenzi <davidel@...>
Cc: Jeff Garzik <jeff@...>, Git Mailing List <git@...>, <mpm@...>, <bcrl@...>
Date: Friday, March 16, 2007 - 8:01 pm

On Fri, 16 Mar 2007, Davide Libenzi wrote:

I'm using your previous patch (is it the same?) along with the additional 
patch appended.

And yes, it's not hugely faster, but I seem to see *some* difference: this 
is the real-time of ten runs of 

	time git log drivers/usb/ > /dev/null

Before:

	0m2.673s
	0m2.476s
	0m2.603s
	0m2.576s
	0m2.625s
	0m2.628s
	0m2.493s
	0m2.696s
	0m2.525s
	0m2.575s

After:

	0m2.639s
	0m2.519s
	0m2.454s
	0m2.604s
	0m2.499s
	0m2.497s
	0m2.506s
	0m2.394s
	0m2.409s
	0m2.562s

ie after I actually get under 2.4s once, and under 2.5s most of the time, 
while before it was under 2.5s just twice, and mostly in the 2.6s..

(I did end up adding the "-g", but I trust that doesn't make things 
*faster*. Generally gcc is good at not actually changing code generation 
based on -g)

But yeah, not very impressive changes. We're talking *maybe* 0.1s out of 
2.5, so potentially about 4% of total time but more likely about 2-3%, and 
it's clearly mostly in the noise. And inflate() is still at 16%, and 
inflate_fast obviously got no faster.

The nice part is that the instruction-level profile for inflate() got more 
interesting. Instead of clearly peaking at the silly indirect jump, the 
peak now seems to be a specific path through the thing. I've not decoded 
it fully yet, but it seems to be mostly the LEN/LIT cases:

 file inflate.c, line 942.
 file inflate.c, line 942.
 file inflate.c, line 949.
 file inflate.c, line 949.
 file inflate.c, line 949.
 file inflate.c, line 949.
 file inflate.c, line 949.
 file inflate.c, line 950.
 file inflate.c, line 950.
 file inflate.c, line 951.
 file inflate.c, line 951.
 file inflate.c, line 951.
 file inflate.c, line 951.
 file inflate.c, line 951.
 file inflate.c, line 949.
 file inflate.c, line 949.
 file inflate.c, line 950.
 file inflate.c, line 950.
 file inflate.c, line 953.
 file inflate.c, line 953.
 file inflate.c, line 953.
 file inflate.c, line 969.
 file inflate.c, line 1058.
 file inflate.c, line 1059.
 file inflate.c, line 1061.
 file inflate.c, line 884.
 file inflate.c, line 963.
 file inflate.c, line 964.

(those are the line numbers *after* applying my patch for where the 
hotpoints are: the same line-number showing up multiple times is just 
because several hot instructions came from there and got spread out)

			Linus

---
diff --git a/Makefile b/Makefile
index 2fd6e45..d8e9ff4 100644
--- a/Makefile
+++ b/Makefile
@@ -18,7 +18,7 @@
 
 CC=cc
 
-CFLAGS=-O
+CFLAGS=-O -g
 #CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
 #CFLAGS=-g -DDEBUG
 #CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
diff --git a/inflate.c b/inflate.c
index 190c642..3d41d6f 100644
--- a/inflate.c
+++ b/inflate.c
@@ -568,7 +568,7 @@ int flush;
     unsigned char FAR *next;    /* next input */
     unsigned char FAR *put;     /* next output */
     unsigned have, left;        /* available input and output */
-    unsigned long hold;         /* bit buffer */
+    unsigned long hold, old_hold;/* bit buffer */
     unsigned bits;              /* bits in bit buffer */
     unsigned in, out;           /* save starting available input and output */
     unsigned copy;              /* number of stored or match bytes to copy */
@@ -631,8 +631,11 @@ int flush;
             state->dmax = 1U << len;
             Tracev((stderr, "inflate:   zlib header ok\n"));
             strm->adler = state->check = adler32(0L, Z_NULL, 0);
-            state->mode = hold & 0x200 ? DICTID : TYPE;
+            old_hold = hold;
             INITBITS();
+            if (old_hold & 0x200)
+            	STATE_CHANGE(DICTID);
+            STATE_CHANGE(TYPE);
             break;
 #ifdef GUNZIP
         CASE_DECL(FLAGS)
@@ -817,7 +820,7 @@ int flush;
             state->mode = COPY;
         CASE_DECL(COPY)
             copy = state->length;
-            if (copy) {
+            while (copy) {
                 if (copy > have) copy = have;
                 if (copy > left) copy = left;
                 if (copy == 0) goto inf_leave;
@@ -826,8 +829,8 @@ int flush;
                 next += copy;
                 left -= copy;
                 put += copy;
-                state->length -= copy;
-                break;
+                copy = state->length - copy;
+                state->length = copy;
             }
             Tracev((stderr, "inflate:       stored end\n"));
 	    STATE_CHANGE(TYPE);
-
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:
cleaner/better zlib sources?, Linus Torvalds, (Thu Mar 15, 9:04 pm)
Re: cleaner/better zlib sources?, Davide Libenzi, (Thu Mar 15, 9:33 pm)
Re: cleaner/better zlib sources?, Davide Libenzi, (Thu Mar 15, 10:06 pm)
Re: cleaner/better zlib sources?, Jeff Garzik, (Thu Mar 15, 9:11 pm)
Re: cleaner/better zlib sources?, Linus Torvalds, (Thu Mar 15, 9:46 pm)
Re: cleaner/better zlib sources?, Linus Torvalds, (Thu Mar 15, 9:54 pm)
Re: cleaner/better zlib sources?, Davide Libenzi, (Thu Mar 15, 10:43 pm)
Re: cleaner/better zlib sources?, Linus Torvalds, (Thu Mar 15, 10:56 pm)
Re: cleaner/better zlib sources?, Davide Libenzi, (Thu Mar 15, 11:16 pm)
Re: cleaner/better zlib sources?, Linus Torvalds, (Fri Mar 16, 12:21 pm)
Re: cleaner/better zlib sources?, Nicolas Pitre, (Fri Mar 16, 1:06 pm)
Re: cleaner/better zlib sources?, Linus Torvalds, (Fri Mar 16, 1:51 pm)
Re: cleaner/better zlib sources?, Nicolas Pitre, (Fri Mar 16, 2:09 pm)
Re: cleaner/better zlib sources?, Jeff Garzik, (Fri Mar 16, 12:35 pm)
Re: cleaner/better zlib sources?, Shawn O. Pearce, (Fri Mar 16, 7:22 pm)
Re: cleaner/better zlib sources?, Nicolas Pitre, (Fri Mar 16, 1:12 pm)
Re: cleaner/better zlib sources?, Matt Mackall, (Fri Mar 16, 12:42 pm)
Re: cleaner/better zlib sources?, Linus Torvalds, (Fri Mar 16, 12:51 pm)
Re: cleaner/better zlib sources?, Davide Libenzi, (Fri Mar 16, 12:24 pm)
Re: cleaner/better zlib sources?, Linus Torvalds, (Fri Mar 16, 12:35 pm)
Re: cleaner/better zlib sources?, Davide Libenzi, (Fri Mar 16, 3:21 pm)
Re: cleaner/better zlib sources?, Linus Torvalds, (Fri Mar 16, 8:01 pm)
Re: cleaner/better zlib sources?, Linus Torvalds, (Fri Mar 16, 9:11 pm)
Re: cleaner/better zlib sources?, Nicolas Pitre, (Fri Mar 16, 11:28 pm)
Re: cleaner/better zlib sources?, Linus Torvalds, (Sat Mar 17, 1:55 pm)
Re: cleaner/better zlib sources?, Linus Torvalds, (Sat Mar 17, 3:40 pm)
[PATCH 2/2] Implement a simple delta_base cache, Linus Torvalds, (Sat Mar 17, 3:44 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Linus Torvalds, (Sat Mar 17, 6:44 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Linus Torvalds, (Sat Mar 17, 5:45 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Morten Welinder, (Sat Mar 17, 9:14 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Avi Kivity, (Sun Mar 18, 2:28 am)
Re: [PATCH 2/2] Implement a simple delta_base cache, Linus Torvalds, (Sat Mar 17, 9:29 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Linus Torvalds, (Sat Mar 17, 9:44 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Nicolas Pitre, (Sat Mar 17, 9:38 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Linus Torvalds, (Sat Mar 17, 9:55 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Nicolas Pitre, (Sat Mar 17, 10:03 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Linus Torvalds, (Sat Mar 17, 10:20 pm)
[PATCH 3/2] Avoid unnecessary strlen() calls, Linus Torvalds, (Sat Mar 17, 11:06 pm)
Re: [PATCH 3/2] Avoid unnecessary strlen() calls, Junio C Hamano, (Sun Mar 18, 5:45 am)
Re: [PATCH 3/2] Avoid unnecessary strlen() calls, Linus Torvalds, (Sun Mar 18, 11:54 am)
Re: [PATCH 3/2] Avoid unnecessary strlen() calls, Junio C Hamano, (Mon Mar 19, 11:16 pm)
Re: [PATCH 3/2] Avoid unnecessary strlen() calls, Linus Torvalds, (Tue Mar 20, 12:31 am)
Re: [PATCH 3/2] Avoid unnecessary strlen() calls, Shawn O. Pearce, (Tue Mar 20, 12:39 am)
Re: [PATCH 3/2] Avoid unnecessary strlen() calls, Linus Torvalds, (Tue Mar 20, 12:57 am)
Re: [PATCH 3/2] Avoid unnecessary strlen() calls, Johannes Schindelin, (Mon Mar 19, 11:05 pm)
Re: [PATCH 3/2] Avoid unnecessary strlen() calls, Shawn O. Pearce, (Mon Mar 19, 11:29 pm)
Re: [PATCH 3/2] Avoid unnecessary strlen() calls, Shawn O. Pearce, (Mon Mar 19, 11:40 pm)
Re: [PATCH 3/2] Avoid unnecessary strlen() calls, Linus Torvalds, (Tue Mar 20, 12:11 am)
Re: [PATCH 3/2] Avoid unnecessary strlen() calls, Junio C Hamano, (Tue Mar 20, 1:44 am)
Re: [PATCH 3/2] Avoid unnecessary strlen() calls, Shawn O. Pearce, (Tue Mar 20, 12:18 am)
Re: [PATCH 3/2] Avoid unnecessary strlen() calls, Linus Torvalds, (Tue Mar 20, 12:45 am)
Re: [PATCH 3/2] Avoid unnecessary strlen() calls, Linus Torvalds, (Sun Mar 18, 11:57 am)
Re: [PATCH 3/2] Avoid unnecessary strlen() calls, Shawn O. Pearce, (Sun Mar 18, 5:38 pm)
Re: [PATCH 3/2] Avoid unnecessary strlen() calls, Linus Torvalds, (Sun Mar 18, 5:48 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Nicolas Pitre, (Sat Mar 17, 11:00 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Linus Torvalds, (Sat Mar 17, 11:31 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Robin Rosenberg, (Sun Mar 18, 6:53 am)
Re: [PATCH 2/2] Implement a simple delta_base cache, Linus Torvalds, (Sun Mar 18, 1:34 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Robin Rosenberg, (Sun Mar 18, 2:29 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, David Brodsky, (Mon Mar 19, 9:16 am)
Re: [PATCH 2/2] Implement a simple delta_base cache, Robin Rosenberg, (Tue Mar 20, 2:35 am)
Re: [PATCH 2/2] Implement a simple delta_base cache, David Brodsky, (Tue Mar 20, 5:13 am)
Re: [PATCH 2/2] Implement a simple delta_base cache, Linus Torvalds, (Tue Mar 20, 10:37 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Nicolas Pitre, (Tue Mar 20, 10:54 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Shawn O. Pearce, (Sun Mar 18, 5:25 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Julian Phillips, (Sun Mar 18, 1:30 am)
Re: [PATCH 2/2] Implement a simple delta_base cache, Linus Torvalds, (Sun Mar 18, 1:23 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Junio C Hamano, (Sat Mar 17, 7:12 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Linus Torvalds, (Sat Mar 17, 7:24 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Jon Smirl, (Sat Mar 17, 7:52 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Junio C Hamano, (Sat Mar 17, 6:37 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Nicolas Pitre, (Sat Mar 17, 9:13 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Junio C Hamano, (Sun Mar 18, 3:47 am)
Re: [PATCH 2/2] Implement a simple delta_base cache, Linus Torvalds, (Sat Mar 17, 7:09 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Linus Torvalds, (Sat Mar 17, 7:54 pm)
Re: cleaner/better zlib sources?, Shawn O. Pearce, (Sat Mar 17, 1:19 am)
Re: cleaner/better zlib sources?, Matt Mackall, (Thu Mar 15, 9:14 pm)
Re: cleaner/better zlib sources?, Shawn O. Pearce, (Thu Mar 15, 9:10 pm)
speck-geostationary