[ntar-workers] Some perf test results on NTAR.
Gianluca Varenni
gianluca.varenni at gmail.com
Tue Jul 12 19:20:47 GMT 2005
----- Original Message -----
From: "Guy Harris" <guy at alum.mit.edu>
To: <ntar-workers at winpcap.org>
Sent: Tuesday, July 12, 2005 12:55 AM
Subject: Re: [ntar-workers] Some perf test results on NTAR.
> Gianluca Varenni wrote:
>
>> The read tests (test018) were run using the standard (vanilla) NTAR
>> library,
>> and a modified one that does *not* use seeks to jump from a block to
>> another
>> (instead, I read all the data from each block in a fake buffer).
>
> The original AT&T "standard I/O library" routines, at least in some
> version of AT&T UNIX, would, as I remember, discard all buffered
> information on an fseek(), do an lseek(), and either fill the buffer or
> rely on the next read to fill the buffer - it wouldn't check whether it
> could seek within the buffer.
>
> It might be that the MSVC++ or GNU libc standard I/O library do the same
> thing. For long seeks, this would probably be more efficient, when moving
> forward through the file, than just reading forward, as you don't read all
> the intermediate data. For *short* seeks, however, you might be likely to
> be doing a seek within the buffer, in which case reading forward means you
> just skip stuff in the buffer, while an fseek() will throw out the
> buffered data and cause it to be re-read, causing extra I/Os.
Probably. Fortunately enough, MS ships the source of the CRT with VSNET2003
(at least the sources for the static CRT), so I'll have a look at how they
implement that stuff.
Another idea I have is to actually disable the FILE buffering using
setbuf(), and see what happens. At least on Windows, I expect an
improvement, because in any case the OS has its own global file caching
mechanism.
I'll try this approach as soon as I find time.
Have a nice day
GV
>
> For applications that only need to access the capture file sequentially,
> just using the "standard I/O" library (FILE *) routines is probably good
> enough.
>
> For applications that don't, if there's a performance issue with random
> access, the right answer would probably be to use custom accessors with
> NTAR, and have the application do its own buffering and handle seeks
> within the buffer sanely. (For Ethereal, there are other reasons, such as
> handling compressed data and handling seeks on a pipe so we can read from
> a pipe - Ethereal's Wiretap library does seeks even when reading
> sequentially, both to try to open files as various file types and to
> implement various heuristics to, for example, handle various annoying
> mutant libpcap formats that use the standard magic number but don't use
> the standard record format - why we'd ultimately want to do that.) That
> does, of course, mean that the accessor routines would have to include a
> seek routine.
>
> BTW, this brings to mind something I remember from my youth (when, for
> fun, I'd order OS/360 manuals from IBM and read them). OS/360's QSAM
> (Queued Sequential Access Mechanism, which did buffered I/O, along the
> lines of what you get with the FILE * routines, as I remember) had what
> they called "locate mode" and "move mode"; in "move mode", a read would
> copy data from the QSAM buffer to the application's buffer, while, in
> "locate mode", a read would just return a pointer to the record in the
> QSAM buffer. (Records weren't split across blocks; block sizes are
> variable on IBM's disks, although the count/key/data stuff might now be
> implemented in disk controller firmware atop modern fixed-length-sector
> disks.)
>
> If NTAR were to do its own buffering, it could, in theory, offer "locate
> mode", although for those records that were split across buffer blocks,
> it'd have to reassemble the record in its own buffer and supply a pointer
> to it in that buffer. I don't know whether this would be worth doing; the
> buffer would probably have to be big enough to hold several records to
> make it worth doing (so that the chances of a record being split across a
> buffer block are low enough that a significant number of reads require no
> data copying).
> _______________________________________________
> ntar-workers mailing list
> ntar-workers at winpcap.org
> https://www.winpcap.org/mailman/listinfo/ntar-workers
More information about the ntar-workers
mailing list