Marc_Hussey

WAN Latency Issue - Write and Read speeds differ.

Discussion created by Marc_Hussey on Jun 29, 2012
Latest reply on Jun 29, 2012 by taylorsharpe

Hi all

 

We are trying to establish why we are having latency issues between our Scottish office and our office in Cheltenham.

 

Our Filemaker solution is installed on FilemakerServer 10, made up of 2 databases. One an interface, the other just a collection of data tables. It is hosted in our Cheltenham office.

 

We have a 20MB symmetrical fibre link at the server location, and a 10MB symmetrical fibre connection to the remote site, linked through the data centre in Scotland. Average ping times are around the 30ms mark. Server is a 2.26GHz quad core Xeon with 24GB of RAM and an Apple RAID card fitted with 7200rpm SATA drives. Remote machine is a 2.7GHz Core i5 iMac.

 

I made a quick "Network Latency Check" scipt, so we could test latency times at Cheltenham and compare to Scotland. This script basically writes 500 records to a table, records the time, then reads each record and records the time. We are seeing huge differences in the write times. Not so much the read times.

 

Does anyone know any reason why it is taking so long to write?

Obviously we expect some delay from the Scottish and Cheltenham offices, but we are talking a factor of 5 or 6 times slower. Which if you're doing a lot of work, it can prove very frustrating.

Any advice on what to try to speed up things would be great.

 

Thanks.


This is the script I wrote if you're interested...

Set Error Capture [ On ]

Set Variable [ $RecordTest; Value:500 ]

Perform Find [ Specified Find Requests: Find Records; Criteria: zz__LatencyTesting::d_TestAutoEnter: “=” ]

[ Restore ]

If [ Get ( FoundCount ) = 0 ]

Show All Records

Delete All Records

[ No dialog ]

New Record/Request

Set Field [ zz__LatencyTesting::d_TestAutoCalculate; "" ]

Set Field [ zz__LatencyTesting::d_TestAutoDate; "" ]

Set Field [ zz__LatencyTesting::d_TestAutoEnter; "" ]

End If

Set Field [ zz__LatencyTesting::g_ProcessRunning; "Write Processing 0%" ]

Set Field [ zz__LatencyTesting::g_StartTime; Get ( CurrentTime ) ]

Set Field [ zz__LatencyTesting::g_ReadStartTime; "" ]

Set Field [ zz__LatencyTesting::g_ReadEndTime; "" ]

Set Field [ zz__LatencyTesting::g_WriteStartTime; Get ( CurrentTime ) ]

Set Field [ zz__LatencyTesting::g_WriteEndTime; "" ]

Set Field [ zz__LatencyTesting::g_TidyUpStartTime; "" ]

Set Field [ zz__LatencyTesting::g_TidyUpEndTime; "" ]

Set Field [ zz__LatencyTesting::g_EndTime; "" ]

Commit Records/Requests

[ No dialog ]

Refresh Window

#Run Write Test

Set Variable [ $i; Value:0 ]

Loop

Set Variable [ $i; Value:$i+1 ]

Exit Loop If [ $i=$RecordTest ]

New Record/Request

Set Field [ zz__LatencyTesting::g_ProcessRunning; If ( $i < ($RecordTest / 4) ; "Write Processing 0%" ; If ( ($i > ($RecordTest / 4))

and ($i < ($RecordTest / 2)) ; "Write Processing 25%" ; If ( ($i > ($RecordTest / 2)) and ($i < ($RecordTest / 1.3333)) ; "Write

Processing 50%" ; If ( ($i > ($RecordTest / 1.3333)) and ($i < ($RecordTest / 1)) ; "Write Processing 75%"; "Write Processing

100%"))) ) ]

Commit Records/Requests

[ No dialog ]

Refresh Window

End Loop

Set Field [ zz__LatencyTesting::g_ProcessRunning; "Write Processing 100%" ]

Set Field [ zz__LatencyTesting::g_WriteEndTime; Get ( CurrentTime ) ]

Commit Records/Requests

[ No dialog ]

Refresh Window

#Run Read Test

Set Field [ zz__LatencyTesting::g_ReadStartTime; Get ( CurrentTime ) ]

Set Field [ zz__LatencyTesting::g_ProcessRunning; "Read Processing 0%" ]

Commit Records/Requests

[ No dialog ]

Refresh Window

Set Variable [ $i; Value:0 ]

Loop

Set Variable [ $i; Value:$i+1 ]

Exit Loop If [ $i=$RecordTest ]

Go to Record/Request/Page [ $i+1 ]

[ No dialog ]

Set Variable [ $Read; Value:zz__LatencyTesting::d_TestAutoEnter ]

Set Field [ zz__LatencyTesting::g_ProcessRunning; If ( $i < ($RecordTest / 4) ; "Read Processing 0%" ; If ( ($i > ($RecordTest / 4))

and ($i < ($RecordTest / 2)) ; "Read Processing 25%" ; If ( ($i > ($RecordTest / 2)) and ($i < ($RecordTest / 1.3333)) ; "Read

Processing 50%" ; If ( ($i > ($RecordTest / 1.3333)) and ($i < ($RecordTest / 1)) ; "Read Processing 75%"; "Read Processing

100%"))) ) ]

Commit Records/Requests

[ No dialog ]

Refresh Window

End Loop

Set Field [ zz__LatencyTesting::g_ProcessRunning; "Read Processing 100%" ]

Set Field [ zz__LatencyTesting::g_ReadEndTime; Get ( CurrentTime ) ]

Commit Records/Requests

[ No dialog ]

Refresh Window

#Run TidyUp

Set Field [ zz__LatencyTesting::g_TidyUpStartTime; Get ( CurrentTime ) ]

Set Field [ zz__LatencyTesting::g_ProcessRunning; "Tidying Up" ]

Commit Records/Requests

[ No dialog ]

Refresh Window

Perform Find [ Specified Find Requests: Find Records; Criteria: zz__LatencyTesting::d_TestAutoEnter: “*” ]

[ Restore ]

Delete All Records

[ No dialog ]

Set Field [ zz__LatencyTesting::g_ProcessRunning; "Complete" ]

Set Field [ zz__LatencyTesting::g_TidyUpEndTime; Get ( CurrentTime ) ]

Set Field [ zz__LatencyTesting::g_EndTime; Get ( CurrentTime ) ]

Outcomes