I am reading a file, and I am either reading a data row (1600 consecutive reads of 17 bytes) or a data column (1600 reads of 17 bytes, separated by 1600 * 17 = 27,200 bytes). The file is located either on the local drive or on the remote drive. I read 10 times, so I expect in each case to read in 272,000 bytes of data.
On the local drive, I see what I expect. On the remote drive, while reading sequentially, I also see what I expect, but when reading the column, I see a ton of additional readings. They have a length of 32,768 bytes and do not seem to be used, but they do a scan of the amount of data from 272,000 bytes anywhere from 79 MB to 106 MB. Here is the result using Process Monitor:
1: 39: 39.4624488 PM DiskSpeedTest.exe 89628 ReadFile \\ BCCDC01 \ BCC-raid3 \ SeisWareInc Temp Dir \ BPepers_Temp \ Projects \ PT_4 \ Horizons \ BaseName3D_1 \ RR_AP SUCCESS Offset: 9,390,069, Length: 17
1: 39: 39.4624639 PM DiskSpeedTest.exe 89628 FASTIO_CHECK_IF_POSSIBLE \\ BCCDC01 \ BCC-raid3 \ SeisWareInc Temp Dir \ BPepers_Temp \ Projects \ PT_4 \ Horizons \ BaseName3D_1 \ RR_AP SUCCESS Operation: Read ...
1: 39: 39.4624838 PM DiskSpeedTest.exe 89628 ReadFile \\ BCCDC01 \ BCC-raid3 \ SeisWareInc Temp Dir \ BPepers_Temp \ Projects \ PT_4 \ Horizons \ BaseName3D_1 \ RR_AP SUCCESS Offset: 9,388,032, Length: O. Flags: 32,768 cached, Paging I / O, Synchronous Paging I / O, Priority: Normal
1: 39: 39.4633839 PM DiskSpeedTest.exe 89628 ReadFile \\ BCCDC01 \ BCC-raid3 \ SeisWareInc Temp Dir \ BPepers_Temp \ Projects \ PT_4 \ Horizons \ BaseName3D_1 \ RR_AP SUCCESS Offset: 9,417,269, Length: 17
1: 39: 39.4634002 PM DiskSpeedTest.exe 89628 FASTIO_CHECK_IF_POSSIBLE \\ BCCDC01 \ BCC-raid3 \ SeisWareInc Temp Dir \ BPepers_Temp \ Projects \ PT_4 \ Horizons \ BaseName3D_1 \ RR_AP SUCCESS Operation: Read 17, 17,
1: 39: 39.4634178 PM DiskSpeedTest.exe 89628 ReadFile \\ BCCDC01 \ BCC-raid3 \ SeisWareInc Temp Dir \ BPepers_Temp \ Projects \ PT_4 \ Horizons \ BaseName3D_1 \ RR_AP SUCCESS Offset: 9,444,469, Length: 17
1: 39: 39.4634324 PM DiskSpeedTest.exe 89628 FASTIO_CHECK_IF_POSSIBLE \\ BCCDC01 \ BCC-raid3 \ SeisWareInc Temp Dir \ BPepers_Temp \ Projects \ PT_4 \ Horizons \ BaseName3D_1 \ RR_AP SUCCESS Operation: Read, ...
1: 39: 39.4634529 PM DiskSpeedTest.exe 89628 ReadFile \\ BCCDC01 \ BCC-raid3 \ SeisWareInc Temp Dir \ BPepers_Temp \ Projects \ PT_4 \ Horizons \ BaseName3D_1 \ RR_AP SUCCESS Offset: 9,441,280, Length: 32,768, I / O: 7,768, Non cached, Paging I / O, Synchronous Paging I / O, Priority: Normal
1: 39: 39.4642199 PM DiskSpeedTest.exe 89628 ReadFile \\ BCCDC01 \ BCC-raid3 \ SeisWareInc Temp Dir \ BPepers_Temp \ Projects \ PT_4 \ Horizons \ BaseName3D_1 \ RR_AP SUCCESS Offset: 9,471,669, Length: 17
1: 39: 39.4642396 PM DiskSpeedTest.exe 89628 FASTIO_CHECK_IF_POSSIBLE \\ BCCDC01 \ BCC-raid3 \ SeisWareInc Temp Dir \ BPepers_Temp \ Projects \ PT_4 \ Horizons \ BaseName3D_1 \ RR_AP SUCCESS Operation: 17, 69 Offset, Read Off, 17, 6969
1: 39: 39.4642582 PM DiskSpeedTest.exe 89628 ReadFile \\ BCCDC01 \ BCC-raid3 \ SeisWareInc Temp Dir \ BPepers_Temp \ Projects \ PT_4 \ Horizons \ BaseName3D_1 \ RR_AP SUCCESS Offset: 9,498,869, Length: 17
1: 39: 39.4642764 PM DiskSpeedTest.exe 89628 FASTIO_CHECK_IF_POSSIBLE \\ BCCDC01 \ BCC-raid3 \ SeisWareInc Temp Dir \ BPepers_Temp \ Projects \ PT_4 \ Horizons \ BaseName3D_1 \ RR_AP SUCCESS Operation: Read, 18, 69, Set Off, Off, 9.869, 89, 69, Set Off, Off
1: 39: 39.4642922 PM DiskSpeedTest.exe 89628 ReadFile \\ BCCDC01 \ BCC-raid3 \ SeisWareInc Temp Dir \ BPepers_Temp \ Projects \ PT_4 \ Horizons \ BaseName3D_1 \ RR_AP SUCCESS Offset: 9,498,624, Length: 32,768, I / O: 7,768, Non cached, Paging I / O, Synchronous Paging I / O, Priority: Normal
Pay attention to additional readings of 32,768 with I / O flags configured for non-caching, paging I / O, synchronous paging I / O, priority: normal. These extra reads are something that takes from 272KB to 106MB and causes slowness. They do not happen when reading from a local file, or if I read a line so that everything is consistent.
I tried setting FILE_FLAG_RANDOM_ACCESS, but it doesn't seem to help. Any ideas on what causes these extra readings and how to stop them?
Tests are performed on a 64-bit Vista system. I can provide the source code for the program to demonstrate the problem, as well as the console program that runs the tests.