Title: | DIGITAL UNIX (FORMERLY KNOWN AS DEC OSF/1) |
Notice: | Welcome to the Digital UNIX Conference |
Moderator: | SMURF::DENHAM |
Created: | Thu Mar 16 1995 |
Last Modified: | Fri Jun 06 1997 |
Last Successful Update: | Fri Jun 06 1997 |
Number of topics: | 10068 |
Total number of notes: | 35879 |
I ran into this problem during a database benchmark. The major task during the tests was to measure the elapsed time for loading a flat ASCII file into the database. The largest file to load was 37000000000 bytes. So it was just above 32 GB in size. We experienced a pretty dramatic performance drop approaching the end of the load phase for this file. In fact it took about 20% of the total elapsed time to load the last 2 GB. This test was run on 3.2g with the file located in an UFS. I started to experiment again and here is what I found. I'm working on a 60 GB UFS that was created with 'newfs -i 1073741824' (in order to speed up the filesystem creation and I'm only using a very small number of files). I have recreated the input ASCII file with the same size. And I have coded a little C program which 'lseeks' into the file and starts 'read'ing 128 KB chunks sequentially from there. Monitoring the disk I/O (LSM volume I/O actually) I find that when I start reading at byte 1 of the file I see 64 KB reads and 'vmubc' reports close to 100% UBC hits; exactly as I expected. Now when I read past 32 GB (either by starting at byte 1 or 'lseek'ing to about 32 GB) the I/O transfer size drops down to 8 KB and I see close to 90% UBC misses. The read throughput drops down to about 20% of the throughput reading from earlier parts of the file. Looking at the offsets I'm reading from this seems to happen at exactly the 32 GB boundary. Reading the whole file (on a 8 GB T'laser with ubc-max-percent = 90) the UBC gets filled with pages from the one large file (not very much else is happening on that machine in parallel). When the UBC is filled up completely it is flushed to about 10% of its size and the allocated memory is released. Filling and flushing the UBC takes place several times during the test. Now when I read past 32 GB the algorithm that flushed the UBC is not activated anymore. The UBC stays filled at 100% until I 'umount' the filesystem. Just for the fun of it I re'ran the same tests with the file located in an AdvFs fileset. The behavior is different: AdvFs produces the same I/O transfer rate throughout the whole file. The elapsed time for reading the whole file is about double of what I get with UFS. Another little experiment I did was using a sparse file (starting with 1 block and a couple of blocks around 32 GB offset). I saw the very same behavior as described above. I have not been able to re'run the test with 4.0x yet. It looks like several UFS/UBC strategy routines stop working correctly with files larger than 32 GB. QAR-time, is it? Martin P.S. If anyone's interested: ask me for a copy of the test programs
T.R | Title | User | Personal Name | Date | Lines |
---|---|---|---|---|---|
8785.1 | Problem was fixed but not in V3.2x | RUSURE::HEWITT | Tue Feb 11 1997 13:05 | 8 | |
There was a fix for this that went into Platinum and it may have slipped through the cracks for 3.2x. I believe it was originally reported against 3.2C. I'll check on it and if you'd like a patch we can make one available (and make sure it get's into the other versions). -Alex | |||||
8785.2 | same thing under 4.0B | ALFAM7::GOSEJACOB | Wed Feb 12 1997 09:30 | 4 | |
I just ran the very same tests with the same machine using 4.0B now. And I see the exact same behavior as described in .0. Martin | |||||
8785.3 | QAR 51534 | ALFAM7::GOSEJACOB | Fri Feb 14 1997 04:34 | 1 | |