Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Message-ID: <000c01c31d95$c1bb0e20$78d96f83@pomello> From: "Max Bowsher" To: Cc: References: <16071 DOT 62978 DOT 20742 DOT 367143 AT gargle DOT gargle DOT HOWL><001c01c31d8a$3dbe4d40$78d96f83 AT pomello> <16072 DOT 5319 DOT 377807 DOT 761155 AT gargle DOT gargle DOT HOWL> Subject: Re: Using Cygwin on NT 4.0 and Win2000; a user experience Date: Mon, 19 May 2003 00:32:33 +0100 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0009_01C31D9E.2369F250" X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165 ------=_NextPart_000_0009_01C31D9E.2369F250 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Martin Buchholz wrote: > Max> Actual test data relating to this would be very interesting to see. > > Some was included in my other post. I would have done a more > conclusive test, but I now have a working machine that is doing > productive work, and I hesitate to go through another two cycles of > painful cygwin1.dll installs. But I would be willing to do this if > that's what it would take to convince you folks to undo the sparse > file patch. > > If you have a Windows 2000 machine (no service packs) and a recent > cygwin, try this experiment: > > $ ls -l /etc/passwd > -rw-rw-rw- 1 Martin B Users 628 May 13 04:10 /etc/passwd > $ perl -e 'system("df ."); for (1 ... 1024) { system("cp /etc/passwd > foobar$_"); } system("df .")' Filesystem 1k-blocks Used > Available Use% Mounted on > d: 11767580 4290332 7477248 37% /d > Filesystem 1k-blocks Used Available Use% Mounted on > d: 11767580 4290332 7477248 37% /d > > That's 4kb per small (but not tiny) file with my patch applied. > How much space does yours take? It would be interesting to see > results on Windows XP as well. > > (again:) For best reproducibility, I suggest > - windows 2000, no service packs > - do the experiment on an ntfs partition formatted by windows 2000. > > I have not done this exact experiment on an unpatched Cygwin, but I > predict it would take either 32kb or 64kb per file (also dependent on > the filesystem cluster size, but that should default to 4kb). max AT pomello [~] $ CYGWIN=sparse perl -e 'system("df ."); for (1 ... 1024) { sys tem("cp /etc/passwd foobar$_"); } system("df .")'; rm foobar* Filesystem 1k-blocks Used Available Use% Mounted on M:\cygwin 18892436 13175484 5716952 70% / Filesystem 1k-blocks Used Available Use% Mounted on M:\cygwin 18892436 13177408 5715028 70% / max AT pomello [~] $ CYGWIN=nosparse perl -e 'system("df ."); for (1 ... 1024) { s ystem("cp /etc/passwd foobar$_"); } system("df .")'; rm foobar* Filesystem 1k-blocks Used Available Use% Mounted on M:\cygwin 18892436 13175552 5716884 70% / Filesystem 1k-blocks Used Available Use% Mounted on M:\cygwin 18892436 13175552 5716884 70% / Well, here is my run of that, on WinXPSP1. All I can say is... wow! As you can see, I don't change DLL between these tests. I attach my patch which allows environment-variable control over sparse file creation. Max. ------=_NextPart_000_0009_01C31D9E.2369F250 Content-Type: text/plain; name="sparse-cond.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="sparse-cond.patch" Index: src/winsup/cygwin/environ.cc=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /home/max/cvsmirror/src-cvs/src/winsup/cygwin/environ.cc,v=0A= retrieving revision 1.91=0A= diff -u -p -r1.91 environ.cc=0A= --- src/winsup/cygwin/environ.cc 13 Feb 2003 15:15:32 -0000 1.91=0A= +++ src/winsup/cygwin/environ.cc 18 May 2003 22:34:03 -0000=0A= @@ -37,6 +37,7 @@ extern BOOL strip_title_path;=0A= extern int pcheck_case;=0A= extern int subauth_id;=0A= BOOL reset_com =3D FALSE;=0A= +BOOL sparse_files =3D FALSE;=0A= static BOOL envcache =3D TRUE;=0A= =0A= static char **lastenviron;=0A= @@ -516,6 +517,7 @@ static struct parse_thing=0A= {"ntea", {&allow_ntea}, justset, NULL, {{FALSE}, {TRUE}}},=0A= {"ntsec", {&allow_ntsec}, justset, NULL, {{FALSE}, {TRUE}}},=0A= {"smbntsec", {&allow_smbntsec}, justset, NULL, {{FALSE}, {TRUE}}},=0A= + {"sparse", {&sparse_files}, justset, NULL, {{FALSE}, {TRUE}}},=0A= {"reset_com", {&reset_com}, justset, NULL, {{FALSE}, {TRUE}}},=0A= {"strip_title", {&strip_title_path}, justset, NULL, {{FALSE}, = {TRUE}}},=0A= {"subauth_id", {func: &subauth_id_init}, isfunc, NULL, {{0}, {0}}},=0A= Index: src/winsup/cygwin/fhandler_disk_file.cc=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: = /home/max/cvsmirror/src-cvs/src/winsup/cygwin/fhandler_disk_file.cc,v=0A= retrieving revision 1.50=0A= diff -u -p -r1.50 fhandler_disk_file.cc=0A= --- src/winsup/cygwin/fhandler_disk_file.cc 11 May 2003 21:52:09 -0000 = 1.50=0A= +++ src/winsup/cygwin/fhandler_disk_file.cc 18 May 2003 22:34:57 -0000=0A= @@ -31,6 +31,8 @@ details. */=0A= #define _COMPILING_NEWLIB=0A= #include =0A= =0A= +extern BOOL sparse_files;=0A= +=0A= static int __stdcall=0A= num_entries (const char *win32_name)=0A= {=0A= @@ -409,7 +411,7 @@ fhandler_disk_file::open (path_conv *rea=0A= set_file_attribute (has_acls (), get_win32_name (), mode);=0A= =0A= /* Set newly created and truncated files as sparse files. */=0A= - if ((real_path->fs_flags () & FILE_SUPPORTS_SPARSE_FILES)=0A= + if (sparse_files && (real_path->fs_flags () & = FILE_SUPPORTS_SPARSE_FILES)=0A= && (get_access () & GENERIC_WRITE) =3D=3D GENERIC_WRITE=0A= && (get_flags () & (O_CREAT | O_TRUNC)))=0A= {=0A= ------=_NextPart_000_0009_01C31D9E.2369F250 Content-Type: text/plain; charset=us-ascii -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/ ------=_NextPart_000_0009_01C31D9E.2369F250--