From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Fri, 30 May 2008 03:23:31 +0400 From: Alexey Tourbin To: ALT Linux Team development discussions Message-ID: <20080529232331.GS7996@solemn.turbinal> Mail-Followup-To: ALT Linux Team development discussions References: <20080529123846.GM7996@solemn.turbinal> <6062a6e60805290628v27e2692fn59c55aa116740a6f@mail.gmail.com> <20080529183744.GA14334@wo.int.altlinux.org> <20080529213114.GR7996@solemn.turbinal> <20080529215609.GA20209@wo.int.altlinux.org> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="tbn31orTZdSAVHoc" Content-Disposition: inline In-Reply-To: <20080529215609.GA20209@wo.int.altlinux.org> Subject: Re: [devel] rpm: rsyncable deflate vs LZMA X-BeenThere: devel@lists.altlinux.org X-Mailman-Version: 2.1.10b3 Precedence: list Reply-To: ALT Linux Team development discussions List-Id: ALT Linux Team development discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 29 May 2008 23:20:02 -0000 Archived-At: List-Archive: List-Post: --tbn31orTZdSAVHoc Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Fri, May 30, 2008 at 01:56:10AM +0400, Dmitry V. Levin wrote: > On Fri, May 30, 2008 at 01:31:14AM +0400, Alexey Tourbin wrote: > [...] > > =F5 =CD=C5=CE=D1 =C5=D3=D4=D8 =C9=C4=C5=D1. =E4=CC=D1 =D7=D9=C2=CF=D2= =C1 =D4=CF=DE=C5=CB =D3=C9=CE=C8=D2=CF=CE=C9=DA=C1=C3=C9=C9 (gzflush) =CD= =CF=D6=CE=CF > > =C9=D3=D0=CF=CC=D8=DA=CF=D7=C1=D4=D8 =CE=C5 =D4=CF=CC=D8=CB=CF "=D3=CC= =C5=D0=CF=CA" rsync hint, =CE=CF =C9 cpio hint -- =CB=C1=CB > > =D4=CF=CC=D8=CB=CF =CD=D9 =D7=C9=C4=C9=CD cpio magic "070707", =CD=D9 = =DA=CE=C1=C5=CD, =DE=D4=CF =DE=C5=D2=C5=DA =CE=C5=D3=CB=CF=CC=D8=CB=CF > > =C2=C1=CA=D4=CF=D7 =C2=D5=C4=C5=D4 mtime =C9 =D0=CF=D4=CF=CD =D0=CF=CA= =C4=A3=D4 =C9=CD=D1 =C9 =D3=CF=C4=C5=D2=D6=C9=CD=CF=C5 =C6=C1=CA=CC=C1. = =F4=CF =C5=D3=D4=D8 > > sync =CD=CF=D6=CE=CF =C4=C5=CC=C1=D4=D8 =D7 =CD=C5=D3=D4=C5 =CF=CB=CF= =CE=DE=C1=CE=C9=D1 =CF=DE=C5=D2=C5=C4=CE=CF=C7=CF cpio header. >=20 > =FC=D4=CF =DA=C1=CD=C5=D4=CE=CF =D3=CE=C9=DA=C9=D4 =D3=D4=C5=D0=C5=CE=D8 = =D3=D6=C1=D4=C9=D1, =CB=CF=C7=C4=C1 =D7 =C1=D2=C8=C9=D7=C5 =CD=CE=CF=C7=CF = =CD=C1=CC=C5=CE=D8=CB=C9=C8 =C6=C1=CA=CC=CF=D7? =FC=D4=C9=CD =CD=CF=D6=CE=CF =D5=D0=D2=C1=D7=CC=D1=D4=D8, =DE=D4=CF=C2=D9 = =D3=CF=DA=CE=C1=D4=C5=CC=D8=CE=CF =D0=D2=CF=D0=D5=D3=CB=C1=D4=D8 =D4=CF=CC= =D8=CB=CF "=D3=CF=D7=D3=C5=CD =CD=C1=CC=C5=CE=D8=CB=C9=C5" =C6=C1=CA=CC=D9. > > =F0=D2=C1=D7=C4=C1, =D1 =CE=C5 =DA=CE=C1=C0, =C4=C1=D3=D4 =DC=D4=CF =DE= =D4=CF-=CE=C9=C2=D5=C4=D8 =D7 =D3=CC=D5=DE=C1=C5 =D3 =CD=C1=CC=C5=CE=D8=CB= =C9=CD=C9 =C6=C1=CA=CC=C1=CD=C9 > > =C9=CC=C9 =CE=C5=D4. =FC=D4=CF =CD=CF=D6=C5=D4 =CE=C9=DE=C5=C7=CF =CE= =C5 =C4=C1=D4=D8 =C9=DA-=DA=C1 =D4=CF=C7=CF, =DE=D4=CF =D0=C5=D2=D7=D9=C5 = =D3=CF=D7=D0=C1=D7=DB=C9=C5 > > =C2=CC=CF=CB=C9 =D7 =D3=D6=C1=D4=CF=CD =D7=C9=C4=C5 =D7=D3=A3 =D2=C1=D7= =CE=CF =CD=CF=C7=D5=D4 =CF=D4=CC=C9=DE=C1=D4=D8=D3=D1 (=C9=DA-=DA=C1 backre= ferences > > =D7 =D0=D2=C5=C4=D9=C4=D5=DD=C9=CA =C2=CC=CF=CB). >=20 > =ED=CF=C7=D5=D4 =C9=CC=C9 =C2=D5=C4=D5=D4? =E5=D3=CC=C9 =D3=C4=C5=CC=C1=D4=D8 =CB=C1=CB =D0=CF=CB=C1=DA=C1=CE=CF =CE= =C9=D6=C5, =D4=CF =C4=CC=D1 =D0=C1=CB=C5=D4=C1 man-pages (=D0=CF=D3=CC=C5 = =D0=CF=D7=D4=CF=D2=CE=CF=CA =D0=C5=D2=C5=D3=C2=CF=D2=CB=C9) 'speedup 1.09' =D7=CF=DA=D2=C1=D3=D4=C1=C5= =D4 =C4=CF 'speedup 1.19'. =F4=CF =C5=D3=D4=D8 =DC=C6=C6=C5=CB=D4 =CF=D4 =D3=C9=CE=C8=D2=CF=CE=C9=DA=C1=C3=C9=C9 =D3=D2=C1=DA=D5 =D0=CF=D3=CC= =C5 cpio =C8=C5=C4=C5=D2=C1 =C5=D3=D4=D8, =CF=CE =DA=C1=CD=C5=D4=CE=D9=CA, = =CE=CF =CE=C5 =CE=C1=D3=D4=CF=CC=D8=CB=CF =C2=CF=CC=D8=DB=CF=CA, =DE=D4=CF=C2=D9 =D7=D3= =A3 =C9=D3=CB=D5=D0=C1=D4=D8. --- rpmio.c- 2008-05-29 22:27:55 +0400 +++ rpmio.c 2008-05-30 03:08:32 +0400 @@ -2148,6 +2148,9 @@ struct rsync_state { typedef struct rpmGZFILE_s { gzFile *gz; struct rsync_state rs; + uint32_t cs; /* cpio state */ + uint32_t nb; /* bytes pending for sync */ + } rpmGZFILE; =20 static /*@null@*/ FD_t gzdOpen(const char * path, const char * fmode) @@ -2274,6 +2277,56 @@ bool rsync_next(struct rsync_state *s, u return false; } =20 +/* from ../lib/cpio.h */ +#define CPIO_NEWC_MAGIC "070701" +#define PHYS_HDR_SIZE 110 + +static inline +bool sync_hint(rpmGZFILE *rpmgz, unsigned char c) +{ + /* sync only if at least nb_min bytes pending */ + static const uint32_t nb_min =3D PHYS_HDR_SIZE + 1024; + rpmgz->nb++; + if (rpmgz->cs >=3D sizeof(CPIO_NEWC_MAGIC) - 1) { + /* cpio major progress, reset rsync */ + rpmgz->rs.n =3D rpmgz->rs.sum =3D 0; + rpmgz->cs++; + if (rpmgz->cs >=3D PHYS_HDR_SIZE) { + /* sync after cpio header */ + rpmgz->cs =3D 0; + if (rpmgz->nb >=3D nb_min) { + rpmgz->nb =3D 0; + fprintf(stderr, "SYNC cpio\n"); + return true; + } + else { + fprintf(stderr, "SKIP cpio\n"); + return false; + } + } + } + else if (CPIO_NEWC_MAGIC[rpmgz->cs] =3D=3D c) { + /* cpio minor progress */ + rpmgz->cs++; + } + else { + rpmgz->cs =3D 0; + } + if (rsync_next(&rpmgz->rs, c)) { + if (rpmgz->nb >=3D nb_min) { + rpmgz->nb =3D 0; + rpmgz->cs =3D 0; + fprintf(stderr, "SYNC rsync\n"); + return true; + } + else { + fprintf(stderr, "SKIP rsync\n"); + return false; + } + } + return false; +} + static ssize_t rsyncable_gzwrite(rpmGZFILE *rpmgz, const unsigned char *const buf, size_t= len) { @@ -2283,7 +2336,7 @@ rsyncable_gzwrite(rpmGZFILE *rpmgz, cons size_t i; =20 for (i =3D 0; i < len; i++) { - if (rsync_next(&rpmgz->rs, buf[i])) { + if (sync_hint(rpmgz, buf[i])) { size_t n =3D i + 1 - (begin - buf); rc =3D gzwrite(rpmgz->gz, begin, n); if (rc < 0) --tbn31orTZdSAVHoc Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) iEYEARECAAYFAkg/OvMACgkQfBKgtDjnu0a6GwCgvryW82xNQPbyfaUfyDLmyfu4 dqMAoKe2M6Gsd7mQAvNhMVIzs0lXA4I6 =NMg/ -----END PGP SIGNATURE----- --tbn31orTZdSAVHoc--