Zhihui Zhang wrote: > Well, the core of my program is as follows (RANDOM(x) return a value > between 0 and x): > > blocksize = 8192; > write_size_low = 512; > > time(&time1); > for (i = 0; i < write_count; i++) { > write_size = write_size_low + > RANDOM(write_size_high-write_size_low); > write_size = roundup(write_size, DEV_BSIZE); > if (testcase == 1) > write_size = blocksize; > write_block(rawfd, sectorno, buf, write_size); > sectorno += blocksize / DEV_BSIZE; > } > time(&time2); > > If testcase is one, then the time elapsed (time2 - time1) is much less.
How "much less" in milliseconds? Also, in your original mail, you said you had 15,000 of these 8K blocks, which is only 120MB or so. Use 150,000 or 1,500,000 and check your results then. Lars > -Zhihui > > On Tue, 5 Mar 2002, Lars Eggert wrote: > > >>I agree that it's probably caching at some level. You're only writing >>about 120MB of data (and half that in your second case). Bump these to a >>couple of GB and see what happens. >> >>Also, could you post your actual measurements? >> >>Lars >> >> >>Zhihui Zhang wrote: >> >>>The machine has 128M memory. I am doing physical I/O one block at a time, >>>so there should be no memory copy. >>> >>>-Zhihui >>> >>>On Tue, 5 Mar 2002, Rogier R. Mulhuijzen wrote: >>> >>> >>> >>>>At 16:03 5-3-2002 -0500, Zhihui Zhang wrote: >>>> >>>> >>>> >>>> >>>>>On Tue, 5 Mar 2002, Julian Elischer wrote: >>>>> >>>>> >>>>> >>>>>>more writes fit in the disk's write cache? >>>>>> >>>>>> >>>>>For (1), it writes 15000 * 8192 bytes in all. For (2), it writes 15000 * >>>>>4096 bytes in all (assuming the random number distributes evenly between 0 >>>>>and 8192). So your suggestion does not make sense to me. >>>>> >>>>> >>>>How large is your buffercache? it might be that the 15000 * ~4096 roughly >>>>matches with your cache, and 15000 * 8912 doesn't. >>>> >>>>Case (1) would require a lot more physical IO in that case than case (2) >>>>would require. >>>> >>>> Doc >>>> >>>> >>>> >>>> >>>>>-Zhihui >>>>> >>>>> >>>>> >>>>>>On Tue, 5 Mar 2002, Zhihui Zhang wrote: >>>>>> >>>>>> >>>>>> >>>>>>>I am doing some raw I/O test on a seagate SCSI disk running FreeBSD 4.5. >>>>>>>This situation is like this: >>>>>>> >>>>>>>+-----+----+----+----+----+----+----+----+----+----+---+------ >>>>>>>| | | | | | | | | | | | .... >>>>>>>+-----+----+----+----+----+----+----+----+----+----+---+------ >>>>>>> >>>>>>>Each block is of fixed size, say 8192 bytes. Now I have a user program >>>>>>>writing each contiguously laid out block sequentially using /dev/daxxx >>>>>>>interface. There are a lot of them, say 15000. I write the blocks in two >>>>>>>ways (the data used in writing are garbage): >>>>>>> >>>>>>>(1) Write each block fully and sequentially, ie. 8192 bytes. >>>>>>> >>>>>>>(2) I still write these blocks sequentially, but for each block I only >>>>>>>write part of it. Exactly how many bytes are written inside each >>>>>>> >>>>>>> >>>>>block is >>>>> >>>>> >>>>>>>determinted by a random number between 512 .. 8192 bytes (rounded up a >>>>>>>to multiple of 512 bytes). >>>>>>> >>>>>>>I find out the the performance of (2) is several times better than the >>>>>>>performance of (1). Can anyone explain to me why this is the case? >>>>>>> >>>>>>>Thanks for any suggestions or hints. >>>>>>> >>>>>>>-Zhihui >>>>>>> >>>>>>> >>>>>>> >>>>>>>To Unsubscribe: send mail to [EMAIL PROTECTED] >>>>>>>with "unsubscribe freebsd-hackers" in the body of the message >>>>>>> >>>>>>> >>>>>>> >>>>>To Unsubscribe: send mail to [EMAIL PROTECTED] >>>>>with "unsubscribe freebsd-hackers" in the body of the message >>>>> >>>>> >>> >>>To Unsubscribe: send mail to [EMAIL PROTECTED] >>>with "unsubscribe freebsd-hackers" in the body of the message >>> >>> >> >> >>-- >>Lars Eggert <[EMAIL PROTECTED]> Information Sciences Institute >>http://www.isi.edu/larse/ University of Southern California >> >> > -- Lars Eggert <[EMAIL PROTECTED]> Information Sciences Institute http://www.isi.edu/larse/ University of Southern California
smime.p7s
Description: S/MIME Cryptographic Signature