A typical Unix system will read from the hard drive in increments of 4x that or 4096 bytes. Here the buffer size is twice that or 8192 bytes. It is counter-intuitive, but increasing the buffer size can actually slow things down if you have a smart disk system.

With respect to disk reads, it doesn't really matter what size you specify with Perl's read(). Perl uses its own internal buffer anyway, which is 4k (hardcoded in the Perl source, i.e. not configurable, except by recompiling perl). In case you don't believe me, do an strace on your sample code, and you'll see that the underlying system calls always return 4096, independently of whether you specify 1k, 2k, 8k, or whatever size with read().

But you could use sysread(), which is actually implemented in terms of the read(2) system call, and thus does pass through the size you request. Whether the latter actually maps to disk block read requests is still another story, though... (depends on the OS).

You might also want to read 4k read buffer is too small.


In reply to Re^2: bin mode file copy by almut
in thread bin mode file copy by smanicka

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.