Re: need fastest way to write 2gig array to disk file
From: John Fusco (fusco_john_at_yahoo.com)
Date: 09/10/05
- Next message: Chris Markle: "why my java process may have vaporized?"
- Previous message: Sagaert Johan: "Re: How to create a thread without starting it immediate ?"
- In reply to: Eric Taylor: "need fastest way to write 2gig array to disk file"
- Next in thread: Eric Taylor: "Re: need fastest way to write 2gig array to disk file"
- Reply: Eric Taylor: "Re: need fastest way to write 2gig array to disk file"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Date: Sat, 10 Sep 2005 02:11:34 GMT
Eric Taylor wrote:
> I have a two gigabtye array. From a nothing special C program
> what is the fastest way to write this to a disk file.
>
> I'm currently using fwrite with 25meg shots at a time so I can
> provide a % progress output. I am seeing very different
> results.
>
> On one system, a 12 gig 2.6 kernel (redhat el4 hugemem) all the
> writes seem to go directly to the cache and so a 2 gig output
> takes under 30 seconds before the program thinks it's done.
>
> On another similar system, with scsi disks, once the program
> has written about 800 meg, it slows down to about 4 meg/sec
> as reported by iostat. (when writing to the cache, it says about
> 70meg/sec).
>
> Top says almost all the memory is free, except what I'm using.
> If once it is done with writing one file (2 gigs) I start it writing a
> a second file, it goes slow throughout. If while it is
> writing, I delete the first file, then it takes off again, presumably
> writing to the cache which has now been freed up.
>
> Are there tuning parameters to set the maximum amount of cache,
> or some way to base it on the amount of free memory left?
>
> And why would a write from memory to a scsi disk go at only
> 4 mb/sec. That seems awfully slow.
>
> any help would be most appreciated.
>
> eric
>
>
Try write() instead of fwrite(). ANSI FILE handles keep user-space
buffers on top of the disk cache, which means an extra memcpy.
You might also try using the O_DIRECT flag when you open the file, which
will bypass the filesystem cache and make your write synchronous (if the
filesystem you are writing to supports it). Generally, bypassing the
cache should be faster, but I've seen different behavior on different
filesystems.
See also open(2), setvbuf(3)
John
- Next message: Chris Markle: "why my java process may have vaporized?"
- Previous message: Sagaert Johan: "Re: How to create a thread without starting it immediate ?"
- In reply to: Eric Taylor: "need fastest way to write 2gig array to disk file"
- Next in thread: Eric Taylor: "Re: need fastest way to write 2gig array to disk file"
- Reply: Eric Taylor: "Re: need fastest way to write 2gig array to disk file"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Relevant Pages
|