Professional Documents
Culture Documents
Software
for
User's Manual
Version 0.103 for Windows-32, 21.Nov.2011
Copyright 2004-2011 by Ingo Zettl, ingo.zettl@aon.at
Chapter
Introduction
This manual tries to give an introduction to the functionality and the features of WebSpeedTest.
You should read this manual carefully if you are not familiar with the software. If you already know
it, you might need the technical documentation in chapter 3.
WebSpeedTest
0.103 21.Nov.2011
Introduction
0.103 21.Nov.2011
Introduction
WebSpeedTest
0.103 21.Nov.2011
Introduction
Chapter
Architecture
This chapter provides a more detailed introduction in WebSpeedTest's architecture and
functionality.
2.1 Architecture
The system architecture of WebSpeedTest is shown in the figure below:
0.103 21.Nov.2011
Architecture
In addition to the data analysis on browser and socket level, a packet filter is used to analyze
packets on packet level.
WebSpeedTest
0.103 21.Nov.2011
Architecture
Chapter
3.1 Installation
This section covers the standard installation and the installation of the optional Mozilla ActiveX
control.
WebSpeedTest
0.103 21.Nov.2011
To install the unlock code, run WebSpeedTest with the argument /register. Please note that for
standard unlock codes (7 code groups) all fields in the registration dialog have to be entered
correctly. For OEM codes (5 code groups) it is possible to register the application with /register
argument as:
C:\Programme\WebSpeedTest>WebSpeedTest /register:A6XV-S0BT-6830-QUCF-QCN1
After the unlock code has been installed, WebSpeedTest can be used without restrictions.
WebSpeedTest
0.103 21.Nov.2011
In most situations it is advantageous that the control can keep its own settings different to the
Mozilla web browser.
The setup utility does the entire installation including the registration of the COM component.
Installing the control
Simply execute the
Mozilla
ActiveX
control's
setup
utility,
usually
it
is
named
MozillaControlxxxx.exe.
Run WebSpeedTest with the argument /mozilla once to let the control create its home
directory.
Check if the home directory has been created in the folder mentioned above.
Note: If the MozillaControl setup utility reports an error of missing Mozilla layout libraries, the files
msvcrt.dll and msvcp60.dll are missing. Install WebSpeedTest setup first in that case which
includes these files or download them from
http://www.iol.ie/~locka/mozilla/runtime60.zip
Additional information
The control's behavior can be controlled with the parameters in prefs.js. For the standalone Mozilla
ActiveX Control the file is located in
%USERPROFILE%\Application Data\MozillaControl\profiles\MozillaControl\<guid>\prefs.js
The file will automatically be modified by WebSpeedTest if the /param argument is specified.
Note: Please ensure there is only one <guid> directory in the MozillaControl folder, otherwise it
will not be possible for WebSpeedTest to modify the file correctly.
3.1.6.2 Installing the add-on Mozilla ActiveX control
The Mozilla ActiveX control is not included in the default Mozilla Setup package, but it can be
added to the installation directory.
The required download file can be found on the mozilla.org web site, the current version can be
found at
http://www.mozilla.org/releases zip file
The latest version in Oct 2006 is 1.7.13 (please download the same file as the installed Mozilla
version)
http://ftp.mozilla.org/pub/mozilla.org/mozilla/releases/mozilla1.7.13/mozilla-win32-1.7.13.zip
WebSpeedTest
0.103 21.Nov.2011
Setup information
Unzip the file's content into your Mozilla application folder (this will replace the existing files and
add some additional files not included in Mozilla's setup package.
Register the COM control with a call to regsvr32 in the installation directory:
c:\Programme\Mozilla>regsvr32 mozctlx.dll
If the control is installed this way, it will use Mozilla's installed profile.
Additional information
The control's behavior can be controlled with the parameters in prefs.js. For the add-on Mozilla
ActiveX Control the file is located in Mozilla's home directory.
The file will automatically be modified by WebSpeedTest if the /param argument is specified.
Note: Please ensure there is only one <guid> directory in the Mozilla folder, otherwise it will not
be possible for WebSpeedTest to modify the file correctly.
3.2 Operation
This section describes how to do measurements with WebSpeedTest.
or
C:\Programme\WebSpeedTest>WebSpeedTest http://www.microsoft.com /mozilla
Please note that the default browser is Internet Explorer, you can use Mozilla (if the control is
installed) with the command line argument /mozilla.
After initialization WebSpeedTest will open a browser window displaying the downloaded web page
as shown below:
Important: For complex, AJAX enabled web pages it might be required to specify additional
arguments (/closedly) to ensure the entire page is loaded correctly, please refer to section 3.2.4.
WebSpeedTest
0.103 21.Nov.2011
Without additional command line arguments, WebSpeedTest will display several progress
messages and status information in the console window such as:
ws2_32_proxy (0034fd3c): this is ws2_32.dll talking
ws2_32_proxy (0034fd3c): loading C:\WINDOWS\system32\ws2_32.dll
WebSpeedTest v0.77, 21.Apr.2009
copyright (c) 2003-2009 by Ingo Zettl, ingo.zettl@aon.at
2006-10-20 00:03:57 (yyyy-mm-dd hh:mm:ss)
ws2_32.dll is available,
ws2_32 file is D:\DEV\BCB\WEBSPEEDTEST\APP\BIN\WS2_32.dll
got traffic buffer, traffic monitoring is enabled.
starting hook drivers
starting hook
removing files in browser cache
removing files done.
Running download loop 0
----- starting download 20.10.2006 00:03:57.558=427326152 ----using browser IE
stopping hook
----- replaying callback messages ----BeforeNavigate: http://www.microsoft.com/ 0 ms (downloads = 1)
DownloadBegin
0 ms
ProgressChange
180 ms
ProgressChange
391 ms
ProgressChange
681 ms
DownloadComplete
851 ms
DownloadBegin
851 ms
NavigateComplete http://www.microsoft.com/
871 ms
ProgressChange
961 ms
ProgressChange
971 ms
ProgressChange
1062 ms
ProgressChange
1072 ms
ProgressChange
1112 ms
BeforeNavigate: http://rad.microsoft.com/ADSAdClient31.dll?GetAd=&PG=CMSIE4&SC=F3
&AP=1164 1192 ms (downloads = 2)
ProgressChange
1452 ms
ProgressChange
1452 ms
ProgressChange
1803 ms
ProgressChange
1803 ms
NavigateComplete http://rad.microsoft.com/ADSAdClient31.dll?GetAd=&PG=CMSIE4&SC=F3
&AP=1164
1873 ms
ProgressChange
2003 ms
ProgressChange
2073 ms
ProgressChange
2073 ms
ProgressChange
2073 ms
DownloadComplete
2083 ms
DocumentComplete http://rad.microsoft.com/ADSAdClient31.dll?GetAd=&PG=CMSIE4&SC=F3
&AP=1164 2083 ms (downloads = 1)
ProgressChange
2394 ms
ProgressChange
2404 ms
ProgressChange
2414 ms
ProgressChange
2814 ms
ProgressChange
3155 ms
ProgressChange
3155 ms
DocumentComplete http://www.microsoft.com/ 3155 ms (downloads = 0)
********** download count reached 0, download supposed to be done. **********
----- document information ----completed
URL: http://rad.microsoft.com/ADSAdClient31.dll?GetAd=&PG=CMSIE4&SC=F3
&AP=1164 0
completed
URL: http://www.microsoft.com/ 0
----- measurement data ----traffic monitor results (tcp payload):
11058 bytes have been sent, 163326 bytes have been read.
network transfers needed 3145 ms.
20 tcp sockets have been used, 20 connects, 33 http requests.
13 tcp sockets have been used simultaneously.
1 other sockets have been used, 1 connects.
1 other sockets have been used simultaneously.
avg data transfer rate 3516 bytes/s send, 51931 bytes/s read
iphook results (ip payload + ip headers):
17037 bytes have been sent, 176911 bytes have been read.
network transfers needed 3155 ms.
avg data transfer rate 5400 bytes/s send, 56073 bytes/s read
download done, 3.155 s
download-legend: status; duration; ws_tx_b; ws_rx_b; hk_tx_b; hk_rx_b; docs_star
ted; docs_done; num_sock; max_sock; num_conn; num_req; num_ok
download-result: done
;
3.155;
11058; 163326;
17037; 176911; 2; 2;
WebSpeedTest
0.103 21.Nov.2011
0.103 21.Nov.2011
/nows2ext
/nows2hook
/header:<hdr>
Note: For Windows it does not matter whether the quotes are outside or inside the argument (i.e.
you can either use "/param:value" or /param:"value").
0.103 21.Nov.2011
If this is not the case, e.g. as in the following sample to http://heise.de, use the redirected URL
instead of the original URL:
----- document
completed
uncompleted
over-completed
If you experience uncompleted URLs, these can be ignored with the /ignoreurl command line
argument, e.g. /ignoreurl:javascript:* will ignore all BeginDocument events for URLs starting with
"javascript:".
----- document
completed
completed
uncompleted
Please note that correct termination of WebSpeedTest can only be ensured if the callbacks are set
up properly.
Step 2: determine full page size
To analyze a web page, it should be downloaded several times with the /noquit argument. In this
case WebSpeedTest does not close the download window, the user has to do this manually. You
should watch the status line and wait until no more data is transferred, then close the browser
window. It is recommended to use a fast, reliable internet connection for this step, e.g. a DSL
connection. Watch the results for e.g. 10 measurements (e.g. in the result log file) and see if
constant data volumes and load times occur. If not, you can use the URL file (/logurl) to check the
downloaded files.
Step 3: determine page load without delay
If the full page size has been determined, run several tests without the /noquit and the /closedly
argument. If the download times and byte counters match the previous tests, the Internet Explorer
ActiveX control terminates correctly and WebSpeedTest can be used without special arguments.
If the results do not match, different delays should be tested as described in the next step.
Step 4: find optimum delay
Run WebSpeedTest several times with different close delays (e.g. /closedly:1000, 2000, 3000) and
check the results (e.g. 10 measurements per delay). You should choose the smallest value leading
to stable results plus an extra margin for different/slower internet connections and machines.
Important: If the parameter /closedly is used, the main page load time (m.3011) is not a suitable
performance indicator as it uses the DocumentComplete stop trigger that is probably not the end
of the data transfers. You should use the socket time (m.3020) in this case.
0.103 21.Nov.2011
10
Download the HTML file with your browser and check if the correct video is played.
Start WebSpeedTest with the HTML file's URL (on your web server) and the argument
/youtube. WebSpeedTest will wait for the video to be played and provide the video analysis
results.
Please refer to the technical specification in chapter 4.8 for additional information.
only the two data lines will be directed to the file, the remaining text will be visible on the screen.
To redirect the entire output into a file, use either
C:\Programme\WebSpedTest>WebSpeedTest http://www.microsoft.com >meas-ms.txt 2>&1
or force WebSpeedTest to write to stdout instead of stderr with the /stdout argument:
C:\Programme\WebSpedTest>WebSpeedTest http://www.microsoft.com /stdout >meas-ms.txt
An alternative is the use of the /log:<file> and /logdebug:<file> arguments, that will cause the
extended measurement data and the log output (normally written to stdout/stderr) to be written to
the specified files.
C:\Programme\WebSpedTest>WebSpeedTest http://www.microsoft.com
/log:meas-ms.txt /logdebug:dbg-ms.txt
The argument /logsock:<fn> or /logsock+:<fn> can be use to log socket operations to a file.
The argument /loghttp:<fn> or /loghttp+:<fn> can be use to log http requests to a file.
The argument /logurl:<fn> or /logurl+:<fn> can be used to log URLs to a file.
The placeholder $time$ is supported for the /logxxx arguments and is replaced by the current local
time.
The measurement log file specified with /log argument is parsed for data lines.
Parsing the default results
The default results are output in the form
download-result: status; duration; skt_duration; ws_tx_b; ws_rx_b; hk_tx_b; hk_rx_b;
docs_started; docs_done; num_sock; max_sock; num_conn; num_req; num_ok
Thus the output should be parsed for the last line (there should be exactly one) starting with
download-result: and the remainder of the line be splitted into the individual values. See section
4.1 for a detailed specification of the default results.
Parsing the measurement log file
The measurement log file contains the default measurement results and additional result values
separated by tabs. Additional comments starting with semicolons (;) are written if the log file is
empty to describe the individual columns. See section 4.2 for a detailed specification of the
measurement log file.
/verbose
hide browser window during download (on default it is displayed on top of the command
window)
/hide
WebSpeedTest
0.103 21.Nov.2011
11
/noquit
/stdout
/timeout:<sec>
timeout if the Browser has not reported document completion, but no more
HTTP requests are in progress. This argument can be useful for sites with extensive javascript
usage.
/noreqto:<sec>
/closedly:<ms>
Important: If the parameter /closedly is used, the main page load time (m.3011) is not a
suitable performance indicator as it uses the DocumentComplete stop trigger that is probably
not the end of the data transfers. You should use the socket time (m.3020) in this case.
Usually only one download is executed per call, optionally it is possible to do
several iterations. This option is not available for Mozilla, as with memory cache turned on the
Control will download less files than required and with memory cache turned off it will
download excessive files as duplicate files are not recognized.
/loops:<loops>
/sleep:<ms>
ignore the specified URLs in download counting. The Internet Explorer control
sometimes generates BeforeNavigate events without successive DocumentComplete events.
These events can be ignored for special URls with the /ignoreurl argument. A trailing asterisk
(*) can be used to specify all URLs starting with the given text. (e.g /ignoreurl:javascript:*).
A list of uncompleted URLs is presented in the log output's section document information. You
can add these URLs to the list of ignored URLs to ensure the end of the download is recognized
properly.
/ignoreurl:<url>
/plurl:<url>
/plot:<ms>
/plminbytes:<n>
/plretries:<n>
/plcond:<cond>
/pldelay:<ms>
specifies the RAS connection to be used. Any existing RAS connection can be
used.
WebSpeedTest
0.103 21.Nov.2011
12
user name for RAS connection. If this parameter is not specified, the RAS
connection's user name is used.
/rasuser:<usr>
password for RAS connection. If this parameter is not specified, the RAS
connection's password is used.
/raspass:<pwd>
force hang up of RAS connection even if it is active. If this parameter is not specified,
active RAS connections are kept open.
/rasforce
/rashangup
/rasretries:<n>
/rastimeout:<s>
/rasdelay:<ms>
don't clear cache, this parameter is only used if /rawclear is not specified.
force manual removal of cache files (the files are deleted from the file system, not
with the cache control functions).
/rawclear
clear cookies when clearing the browser cache (only if /rawclear and /noclear are
not specified)
/cookieclear
/onlyclear
WebSpeedTest
0.103 21.Nov.2011
13
3.3.3 IP Hook
WebSpeedTest uses the IP filter driver iphook.sys to monitor IP traffic via the Windows 2000/XP
packet filter hook. Note that Windows versions prior to 2000/XP do not support the packet filter
hook.
Note: The driver is automatically installed by WebSpeedTest prior to the creation of the web
browser component and de-installed after the measurement is completed. Note that administrative
rights are required to install and start the packet filter driver.
The filter driver is used to count the IP payload and calculate throughput per second, the
measured values are written to the measurement results (columns hk_tx_b and hk_rx_b) and to
the log file (columns ip_hook_txbytes and ip_hook_rxbytes).
Several arguments can be used to modify the IP hook behavior:
/nohook
/dumptraffic
/hkfilter:<addr>
specified)
/hkfilter:<addr> or /hkfilter!:<addr> include or exclude an interface number from packet
hook. This argument might be useful to avoid byte and packet counting on LAN interfaces when
evaluating RAS connections and the LAN interface has active connections. Please note that the
interface number is the internal number used by the packet filter hook. The interface number for
RAS connection changes every time a connection is opened, the number for LAN connections can
change if the connection is stopped and restarted. Use the column netcap_ipaddrs in the master
log file to get the active interface numbers.
specifies additional arguments for NetCAP. Please note that /C and /N are
provided automatically.
/netcapargs:<arg>
interface name for NetCAP. The name is only required for LAN connections,
otherwise the RAS interface name WAN (PPP/SLIP) Interface is used.
/netcapif:<if>
/netcaplog:<fn>
log file name for NetCAP. Placeholders $time$ and $loop$ are supported.
WS2 interception uses either internal function interception or a proxy ws2_32.dll located in the
application directory. Usually Windows will load this dll for the process prior to the ws2_32.dll
located in the %WINDIR%\System32 directory. Unfortunately some applications such as the
WebSpeedTest
0.103 21.Nov.2011
14
McAfee Personal Firewall change the load sequence and load the original system dll even if a local
version exists. In this case the system ws2_32.dll has to be replaced to support WS2 interception.
Note: replacing the system ws2_32.dll can influence your entire system, you should only apply
header replacement manually if you recently have created a backup of your machine and are able
to restore it. This procedure is not applicable for Windows Vista and above.
3.3.5.2 Disabling WS2 interception
Use the command line arguments /nows2hook or /nows2ext to disable windows sockets inmemory interception and socket extensions in case of problems.
3.3.5.3 Replacing the system ws2_32.dll
Usually the system ws2_32.dll located in %WINDIR%\system32 is in use by the system and
cannot directly be replaced. Fortunately it can be renamed while the system is running and a new
version can be installed.
ws2_32.dll replacement works in several steps:
Important: Any copies of ws2_32.dll in the DllCache or ServicePackFiles have to be removed
or renamed to prevent the system file protection from restoring these files.
If the original ws2_32.dll is in place, it is renamed to ws2_32_win.dll. This step has to be
skipped if a proxy dll is already installed (i.e. the original ws2_32.dll has already been moved to
ws2_32_win.dll).
The proxy dll is copied to %WINDIR%\system32.
Important: If your system prompts for a CD to repair the changed system file choose cancel.
Depending on your system a restart may be required to release any existing references to the
original dll.
WebSpeedTest supports these steps by applying the argument /replacesocket.
Note: It is strongly recommended to use this argument to install the proxy dll instead of manually
copying the file.
Note: The proxy dll should only be installed to the system directory if it is absolutely necessary
and no other workaround is available. You should have a system backup in case problems occur
after replacing the system ws2_32.dll.
3.3.5.4 Restoring the original ws2_32.dll
To
restore the original dll the procedure described above has to be reversed:
rename the proxy dll from ws2_32.dll to ws2_32_proxy.dll (it cannot be deleted if it's in use)
rename the original ws2_32_win.dll to ws2_32.dll
restart your system
WebSpeedTest supports removing the proxy dll with the /restoresocket switch.
0.103 21.Nov.2011
15
/proxyname:<px>
RAS connection for proxy server. Usually no connection or the specified RAS
connection is used. If this is not correct, the proper RAS connection has to be specified for
Internet Explorer. This argument is not required for Mozilla.
/proxyconn:<cn>
WebSpeedTest
0.103 21.Nov.2011
16
WebSpeedTest
0.103 21.Nov.2011
17
Chapter
Technical Reference
This chapter includes the technical specifications of WebSpeedTest.
download-legend
status
WebSpeedTest
0.103 21.Nov.2011
18
Technical Reference
status
loop
random
start time
dl_time
tr_time
ws2_32_txbytes
ws2_32_rxbytes
ws2_32_rx_stop
ws2_32_max_idle
ip_hook_txbytes
ip_hook_rxbytes
ip_hook_tx kb/s
ip_hook_rx kb/s
br_docs_start
br_docs_done
br_docs_incompl
num_tcp_sockets
max_tcp_sockets
rem_tcp_sockets
num_tcp_connect
tcp_txbytes
tcp_rxbytes
tcp_peak_tx kb/s
tcp_peak_rx kb/s
tcp_dns_delay
tcp_conn_time
ips_acc_time
tcp_xfer_time
num_oth_sockets
max_oth_sockets
rem_oth_sockets
num_oth_connect
oth_txbytes
oth_rxbytes
max_http_sockets
http_request
http_tx_ok
http_rx_ok
http_txbytes
http_rxbytes
WebSpeedTest
0.103 21.Nov.2011
19
Technical Reference
http_rxdecomp
pl_status
pl_bytes
pl_time
browser
browser (IE or mozilla)
suffix
user defined value provided with /ressuffix argument
url
URL that has been downloaded
own_ipaddrs
list of IP addresses associated to the machine's interfaces during the meas.
iphook_ipaddrs_own list of IP addresses captured by the PF hook, format: <ipaddr>(<iface_no>)
iphook_ipaddrs_rem list of IP addresses captured by the PF hook, format: <ipaddr>(<iface_no>)
Additional columns if argument /youtube is specified: =0.103=
video_id
vd_quality
vd_codec
vd_url
fp_total_loaded
fp_bytes_loaded
fp_bytes_total
fp_bytes_start
fp_video_time
total_play_time
netto_play_time
num_relvnt_stalls
relvnt_stall_time
total_stall_time
player_ready_time
player_buf_time
play_delay
vd_transact_time
compression
playback_rate
vs_requests
vs_bytes
vs_acc_time
vs_xfer_time
vs_transact_time
vs_thput
number of HTTP requests containing video streams (using URL filter, m.3240)
number of HTTP header + payload bytes loaded in video streams (m.3241)
IP service access time for first video stream request (m.3242)
data transfer time for all video stream requests (m.3243)
transaction time for video streams (BeforeNavigate to last data byte, m.3244)
average TCP payload throughput for video streams (m.3245)
------max tcp
sockets
------12
13
13
-HTTP-maxhttp
sockets
-------
WebSpeedTest
------rem tcp
sockets
------9
9
9
------http
request
-------
------num tcp
connect
------18
18
18
------http
tx_ok
-------
0.103 21.Nov.2011
------tcp
txbytes
------10115
10114
10114
------http
rx_ok
-------
------tcp
rxbytes
------116779
116757
116757
------http
txbytes
-------
20
-OTHERnum oth
sockets
------1
1
1
------http
rxbytes
-------
------max oth
sockets
------1
1
1
-INFO-browser
IP headers)
-BROWS- ------br docs br docs
start finishd
------- ------4
4
4
4
4
4
------other
txbytes
------73
75
72
------- ---------
Technical Reference
73
75
72
11
11
11
29
29
29
29
29
29
29
29
29
0
0
0
108017 IE
108015 IE
108015 IE
www.orf.at
www.orf.at
www.orf.at
0.103 21.Nov.2011
Technical Reference
rx_content_failed
unclosed
this value is set to true if rx_bytes_data does not match the content_length.
this value is added and set to true if the socket has not been closed
WebSpeedTest
0.103 21.Nov.2011
22
Technical Reference
80 df 55 3d 99 e4 3c c6 a6 14 00 3b
..U=..<.;
WebSpeedTest
0.103 21.Nov.2011
23
Technical Reference
WebSpeedTest
0.103 21.Nov.2011
24
Technical Reference
The QTS ticket contains one or several scenarios (one scenario per loop iteration).
metrics in QTS ticket
text metric 110 (x.110)
WST/0.75 MK
The current tool id, version and branding in form WST/<ver> or WST/<ver> <brand>.
text metric 111 (x.111)
task
WST.Web
browser
IE or Mozilla
random
0 or 1
1 if random URL parameters have been used for the current request/loop iteration.
text metric 3003 (x.3003)
URL
<url>
user suffix
<suffix>
The user defined suffix as specified with command line argument /ressuffix.
num. metric 3005 (m.3005)
loop
<loop>
status
<status>
meas_time
<sec>
Important: If the argument /closedly is used, the main page load time (m.3011) is not a suitable
performance indicator as it uses the DocumentComplete stop trigger that is probably not the end
of the data transfers. You should use the socket transaction time (m.3020) in this case.
Important: If the argument /youtube is used, m.3011 only describes the main page load time,
but not the video stream and other content. While m.3011 still is a valid metric for the main page,
m.3244 should be used to analyze the video streaming transaction.
num. metric 3020 (m.3020)
socket_transact_time
<sec>
Important: If the argument /youtube is used, m.3020 describes all HTTP requests within the
measurement. These include the main page, javascript and flash code, the video streams and
additional finalization requests. Thus m.3020 may be larger than m.3244, that can be used to
analyze the video streaming transaction.
num. metric 3021 (m.3021)
ws2_32_txbytes
<bytes>
Number of bytes transmitted on socket level (WS2 interception, TX TCP+UDP socket payload),
trigger points as in m.3020.
num. metric 3022 (m.3022)
ws2_32_rxbytes
<bytes>
Number of bytes received on socket level (WS2 interception, RX TCP + UDP socket payload), trigger
points as in m.3020,
num. metric 3023 (m.3023)
ws2_32_txthput
<bit/s>
ws2_32_rxthput
<bit/s>
ws2_32_rx_stop
<bytes>
Number of bytes received on socket level until browser's stop trigger (i.e. bytes transferred during
m.3011). Trigger points as in m.3011.
WebSpeedTest
0.103 21.Nov.2011
25
Technical Reference
ws2_32_max_idle
<sec>
Maximum socket time between send/receive events, i.e. maximum time without a data transfer.
Trigger points: max. time between socket receive operations returning data
num. metric 3031 (m.3031)
ip_hk_txbytes
<bytes>
Number of bytes transmitted on IP level (hook driver, IP payload + IP headers). Note: can contain
traffic from other processes in the system, too.
start trigger: start of measurement
stop trigger: end of measurement + 1 second (to compensate driver lag)
num. metric 3032 (m.3032)
ip_hk_rxbytes
<bytes>
Number of bytes received on IP level (hook driver, IP payload + IP headers). Note: can contain
traffic from other processes in the system, too. Trigger points as in m.3031.
num. metric 3033 (m.3033)
ip_hk_txthput
<bit/s>
ip_hk_rxthput
<bit/s>
br_docs_started
<docs>
br_docs_finished
<docs>
br_docs_incomplete
<docs>
Number of web browser's incomplete documents (i.e. number of documents without matching
BeforeNavigate/DocumentComplete events).
num. metric 3050 (m.3050)
num_tcp_sockets
<sockets>
max_tcp_sockets
<sockets>
rem_tcp_sockets
<sockets>
num_tcp_connects
<requests>
tcp_txbytes
<bytes>
tcp_rxbytes
<bytes>
tcp_tx_thput
<bit/s>
tcp_rx_thput
<bit/s>
tcp_tx_peak_thput
<bit/s>
TCP transmit peak throughput (2 second base, WS2 interception, socket payload only)
num. metric 3059 (m.3059)
tcp_rx_peak_thput
<bit/s>
TCP receive peak throughput (2 second base, WS2 interception, socket payload only)
num. metric 3060 (m.3060)
num_oth_sockets
<sockets>
max_oth_sockets
<sockets>
rem_oth_sockets
<sockets>
Number of non-TCP sockets still open at the end of the measurement (WS2 interception).
num. metric 3063 (m.3063)
num_oth_connects
<requests>
oth_txbytes
<bytes>
oth_txbytes
<bytes>
WebSpeedTest
0.103 21.Nov.2011
26
Technical Reference
http_max_sockets
<sockets>
http_req_total
<requests>
http_req_tx_ok
<requests>
Number of HTTP requests that have been successfully transmitted (WS2 interception).
num. metric 3073 (m.3073)
http_req_rx_ok
<requests>
Number of HTTP requests that have been successfully finished (WS2 interception).
num. metric 3074 (m.3074)
http_txbytes
<bytes>
Number of HTTP payload bytes transmitted (without HTTP headers, WS2 interception).
num. metric 3075 (m.3075)
http_rxbytes
<bytes>
Number of HTTP payload bytes received (without HTTP headers, WS2 interception).
num. metric 3076 (m.3076)
http_txthput
<bit/s>
http_rxthput
<bit/s>
http_rxdecomp
<bytes>
Number of HTTP payload bytes after gzip decompression. If no gzip encoding is used, this
parameter is equal to m.3075. If content cannot be decompressed, the value is set to -1. =0.97=
text metric 3080 (x.3080)
own_ipaddrs
iphook_ipaddrs_loc
iphook_ipaddrs_rem
tcp_tx_thput_list
<bytes>[,<bytes>]
List of sent TCP bytes per second (raw), i.e. throughput data for up to 25 seconds (as in m.3056)
text metric 3091 (x.3091)
tcp_4x_thput_list
<bytes>[,<bytes>]
List of received bytes per second (raw), i.e. throughput data for up to 25 seconds (as in m.3057).
text metric 3092 (x.3092)
tcp_tx_thput_filtd
<bytes>[,<bytes>]
List of sent bytes per second (filtered), i.e. throughput data for up to 25 seconds (TCP throughput
data as in m.3056 with smoothing filter applied).
text metric 3093 (x.3093)
tcp_rx_thput_filtd
<bytes>[,<bytes>]
List of received bytes per second (filtered), i.e. throughput data for up to 25 seconds (TCP
throughput data as in m.3056 with smoothing filter applied).
num. metric 3094 (m.3094)
tcp_connect_time
<sec>
ipsvc_access_time
<sec>
IP service access time, i.e. time from first TCP connect until first server response data. =0.100=
start trigger: first socket connect request
stop trigger: first server response with HTTP payload or header data
num. metric 3096 (m.3096)
tcp_xfer_time
<sec>
tcp_dns_delay
<sec>
Delay from start of measurement until first TCP connect. Note: this metric includes a browser lag
(typ. 100..150 ms) and the DNS lookup time. Please calibrate your measurement system in LAN
situations to determine the (nearly) constant browser lag. =0.101=
start trigger: start of measurement (browser's BeforeNavigate event)
stop trigger: first socket connect request
num. metric 3100 (m.3100)
preload_status
preload_bytes
<bytes>
0.103 21.Nov.2011
27
Technical Reference
preload_time
<sec>
Additional metrics if argument /youtube is specified (sample javascript output can be found in chapter
4.8): =0.103=
text metric 3200 (x.3200)
video_id
Video ID as returned by javascript code (js.9000) typically the 11 digit youtube video ID, i.e. a
configuration parameter in the HTML page, e.g. _BNmXx4p3Vw
text metric 3201 (x.3201)
quality
Video quality as returned by javascript (js.9001). The default HTML page returns the quality
reported by the video player, typically hd1080, hd720, large, medium, small
text metric 3202 (x.3202)
codec
video URL
Video URL as returned by javascript (js.9003). The default HTML page returns the video URL
provided by the flash player, e.g. http://www.youtube.com/watch?v=_BNmXx4p3Vw&
num. metric 3210 (m.3210)
total_bytes_loaded
<bytes>
All bytes loaded by the video player as returned by javascript (js.9010). The default JS
implementation returns the sum of loaded bytes for all video qualities after playing has started, i.e.
the sum of all player.getVideoBytesLoaded()
Please note that a small part of the video stream for the initial quality (that is loaded before playing
starts) is not included in m.3210 as the player starts loading the target quality stream at position 0
in this case. Thus if quality is changed to a higher level by the script at the beginning of the
download, these extra bytes are ignored in m.3210. In this case m.3210 and m.3211 contain the
same value, the number of bytes loaded for the target quality level.
If the quality is changed during measurement (either by script or interactively), m.3210 will contain
all bytes loaded while m.3211 will only contain the bytes loaded for the last quality level.
num. metric 3211 (m.3211)
video_bytes_loaded
<bytes>
Bytes loaded by video player for the last video stream or quality level (js.9011). The default JS
implementation returns the player's number of bytes loaded for the target quality level, i.e.
player.getVideoBytesLoaded()
num. metric 3212 (m.3212)
video_bytes_total
<bytes>
The number of bytes for the last video stream or quality level (js.9012). This is the # of bytes that
should have been loaded if the entire stream is played, it should match m.3213 + m.3211. The
default JS implementation returns player.getVideoBytesTotal()
num. metric 3213 (m.3213)
video_bytes_start
<bytes>
The start position in the last video stream or quality level (js.9013). Usually this value should be 0 if
the entire stream has been played with the same quality level. The default JS implementation
returns player.getVideoStartBytes()
num. metric 3214 (m.3214)
video_time
<sec>
The nominal duration of the video stream (js.9014). The default JS implementation returns
player.getCurrentTime() when the stop event occurs.
num. metric 3220 (m.3220)
total_play_time
<sec>
Time from first play event until final stop event (js.9020). This is the total play time including all
video stalls.
start trigger: first JS playing event
stop trigger: JS stop event
num. metric 3221 (m.3221)
netto_play_time
<sec>
The video playing time without stalls, i.e. m.3220 - m.3224. This metric should roughly match
m.3214 if the entire clip has been played, though differences up to 0.5 seconds have been
observed.
num. metric 3222 (m.3222)
num_relvnt_stalls
<int>
Number of relevant stalls, i.e. # of all replay pauses (from buffering event to playing event except
the first pre-buffering phase) larger than the threshold defined in the HTML file. This value should
be zero if no significant stalls have occurred.
WebSpeedTest
0.103 21.Nov.2011
28
Technical Reference
relvnt_stall_time
<sec>
Cumulated duration of all relevant stalls, i.e. the cumulated time of all events as in m.3222. Trigger
points as in m.3222.
num. metric 3224 (m.3224)
total_stall_time
<sec>
Cumulated duration of all stalls, i.e. cumulated time from buffering event to playing event except
first pre-buffering phase. Trigger points as in m.3222
num. metric 3225 (m.3225)
player_ready_time
<sec>
Time from start of measurement until player is ready to buffer the video stream. Calculated from
js.9025 plus the JS start delay.
start trigger: BeforeNavigate event
stop trigger: first JS buffering event (i.e. player starts pre-buffering)
num. metric 3226 (m.3226)
player_buffer_time
<sec>
Duration of video pre-buffering, i.e. from first buffering event to start of video playback, as provided
in js.9026.
start trigger: first JS buffering event (i.e. player starts pre-buffering)
stop trigger: first JS playing event (i.e. player starts video playback)
num. metric 3227 (m.3227)
play_delay
<sec>
Delay from start of measurement until player starts video playback, calculated as m.3225 + m.3226.
start trigger: BeforeNavigate event
stop trigger: first JS playing event (i.e. player starts video playback)
num. metric 3228 (m.3228)
video_transact_time
<sec>
Total video transaction time from start of measurement until replay is finished.
start trigger: BeforeNavigate event
stop trigger: final JS stop event
num. metric 3230 (m.3230)
compression
<0.0>..<1.0>
Video compression ratio, i.e. loaded bytes divided by nominal bytes as in js.9030. The default
implementation calculates player. getVideoBytesTotal() / cfg_nominal bytes. The nominal number of
bytes is a configuration parameter in the HTML file, thus this metric can be used to detect if the
video was transcoded.
num. metric 3231 (m.3231)
playback_rate
<bit/s>
This is a fictive parameter defining the nominal playback rate of the video as provided in js.9031.
The default JS implementation calculates totalBytesLoaded / netto_playTime_s.
num. metric 3240 (m.3240)
video_http_requests
<int>
Number of HTTP requests matching the filter criteria provided by js.9006. Typically this metric
includes all video streams, e.g. http://<server>/videoplayback*. Please ensure that valid filters are
used for the video streaming server.
If only a single quality level is accessed, this number should be 1, if the quality level is changed by
the script, the number should be 2. In case of communication problems and retries other numbers
may occur.
num. metric 3241 (m.3241)
video_http_bytes
<int>
TCP payload bytes (i.e. HTTP headers + HTTP payload) for all HTTP requests as in m.3240. This
value should roughly match m.3210..m.3212 though it will be higher due to HTTP headers and
discarded requests for lower quality levels.
num. metric 3242 (m.3242)
video_svcacc_time
<sec>
IP service access time for first video stream request (i.e. first HTTP request as in m.3240).
start trigger: socket connect request (similar to SYN) of first request matching filter
stop trigger: first socket recv response with data on same socket (comp. first data packet)
num. metric 3243 (m.3243)
video_xfer_time
<sec>
Data transfer time for all HTTP requests matching filter as in m.3240. This time is used for
throughput calculation, thus it's simply first data packet .. last data packet.
start trigger: first socket recv response on any socket matching filter
stop trigger: last socket recv response on any socket matching filter
num. metric 3244 (m.3244)
video_transact_time
<sec>
Total video transaction time on socket level, i.e. from start of measurement until last video stream
byte is delivered.
start trigger: BeforeNavigate event
stop trigger: last socket recv response on any socket matching filter
WebSpeedTest
0.103 21.Nov.2011
29
Technical Reference
video_http_thput
<bit/s>
Average video stream throughput for all HTTP streams (socket payload = HTTP headers + HTTP
payload). Calculated as m.3241 / m.3243 * 8
0.103 21.Nov.2011
30
Technical Reference
WebSpeedTest
0.103 21.Nov.2011
31
Technical Reference
m.3024:
m.3024,e.ext1.thput
//
//
//
//
//
// debugging
cfg_showlog = false;
<string>
The video ID to be viewed. This parameter is passed to the youtube video player.
WebSpeedTest
0.103 21.Nov.2011
32
Technical Reference
cfg_quality
<string>
The target quality. Leave this parameter empty to use the video's default quality. If a non-empty
value is defined, the script tries to change the quality. The video player will choose the highest
available quality less or equal to the specified quality. Please note that a HTTP request for the initial
quality will be sent in any case though it will be cancelled after a short time.
cfg_nominal_bytes
<int>
e.g. 4713128
The nominal number of bytes for the configured video ID and quality. This parameter will only be
used to calculate the compression ratio. Thus it should be set to the # of bytes provided by the
video player if no transcoding or compression is applied.
cfg_codec
<string>
The codec used for the video. The parameter is only passed to an output parameter and is not used
internally.
cfg_req_filter
<string>
Request filters for the socket analysis in WebSpeedTest. Only HTTP requests matching the given
paths will be treated as video streams and considered in the video stream socket analysis.
A typical value for youtube is /videoplayback*. Multiple filters can be separated by pipes, e.g.
/videoplayback*|/videodownload*. Please note that filters are case sensitive and wildcards are only
supported at the end of a filter item.
cfg_timeout_total_s
<int>
e.g. 90
Total measurement timeout in seconds (from javascript start to playback stop) or -1 to disable the
check. If this threshold is exceeded, status is set to 0 (failed).
cfg_timeout_start_s
<int>
e.g. 30
Start timeout in seconds (from javascript start to first playing event) or -1 to disable the check. If
this threshold is exceeded, status is set to 0 (failed).
cfg_stall_thres_ms
<int>
e.g. 100
Threshold for stalls (i.e. buffering states during playback). Stalls up to the defined value are
considered minor and are not counted. Stalls longer than the given threshold are considered
significant and are counted and cumulated.
cfg_stall_maxnum
<int>
e.g. 5
Maximum number of allowed significant stalls or -1 to disable the check. If this threshold is
exceeded, status is set to 0 (failed).
cfg_stall_maxtime_ms
<int>
e.g. 5000
Maximum allowed cumulated significant stall time or -1 to disable the check. If this threshold is
exceeded, status is set to 0 (failed).
cfg_showlog
<bool>
e.g. false
Set this parameter to true to show the <div> containing the log output. The parameter can be set
to false to reduce CPU load due to display updates.
Where <time> is the time offset from start in ms and <id> is the metric ID. The following dump
shows the log output of the reference script. Please note that the first line (log 0.0.1) is ignored by
WebSpeedTest.
Sample log output
log 0.0.1
log: 0 ms: start 2011-11-19T23:53:19.250
log: 0 ms: javascript starting, video _BNmXx4p3Vw...
log: 0 ms: player embedded (player ready to follow if not prevented by security rules).
log: 2062 ms: player ready...
WebSpeedTest
0.103 21.Nov.2011
33
Technical Reference
video_id
quality
codec
url
levels
nominal bytes
request filters
Used to forward the HTTP request filters for video streams to WebSpeedTest. Please refer to
cfg_req_filter for details.
metric js.9010
<bytes>
The total number of bytes loaded by the video player. Calculated as the final
player.getVideoBytesLoaded() plus player.getVideoBytesLoaded() before changing a quality level.
Please refer to m.3210 for details.
metric js.9011
<bytes>
The number of bytes reported by the video player at the end of the measurement, i.e.
player.getVideoBytesLoaded().
metric js.9012
<bytes>
The number of total video bytes for the played video stream, i.e. player.getVideoBytesTotal() at the
end of the measurement.
WebSpeedTest
0.103 21.Nov.2011
34
Technical Reference
metric js.9013
<bytes>
The start offset reported by the video player, i.e. player.getVideoStartBytes() at the end of the
measurement, should be 0 except if quality was changed when playback was running.
metric js.9014
video time
<sec>
Nominal video duration in seconds as reported by player, i.e. player.getCurrentTime() at the end of
the measurement.
js.9020
<sec>
The playback time from the first playing event to the final stop event (i.e. including stalls).
js.9021
<sec>
<sec>
<sec>
<sec>
Time from javascript start until player starts buffering. Please note that the javascript start delay is
added for metric m.3225.
js.9026
buffer time
<sec>
play delay
<sec>
Time from javascript start until first playing event (i.e. js.9025 + js.9026). Please note that the
javascript start delay is added for metric m.3227.
js.9028
session time
<sec>
compression
playback rate
<bytes/s>
success state
<0/1>
start time
stop time
WebSpeedTest
0.103 21.Nov.2011
35
Technical Reference
Contents
Introduction................................................................................................................................................1
1.1 What is WebSpeedTest........................................................................................................................1
1.2 Field of application ..............................................................................................................................1
1.3 Revision History ..................................................................................................................................2
1.4 This manual........................................................................................................................................3
Architecture ................................................................................................................................................1
2.1 Architecture ........................................................................................................................................1
2.1.1 Module description ........................................................................................................................1
2.1.2 Web Browser COM Control ............................................................................................................2
2.1.3 Youtube video streaming...............................................................................................................2
2.1.4 Socket Interception.......................................................................................................................2
2.1.5 Packet Filter .................................................................................................................................2
2.1.6 Windows Vista and 7 Compatibility.................................................................................................2
Installation and Operation ...........................................................................................................................3
3.1 Installation .........................................................................................................................................3
3.1.1 System requirements ....................................................................................................................3
3.1.2 Removing previous installations .....................................................................................................3
3.1.3 Installing WebSpeedTest ...............................................................................................................3
3.1.4 Running in Demo mode.................................................................................................................4
3.1.5 Installing the unlocking code .........................................................................................................4
3.1.6 Installing the Mozilla ActiveX Control ..............................................................................................5
3.2 Operation ...........................................................................................................................................6
3.2.1 Running Simple Measurements ......................................................................................................6
3.2.2 Getting Help .................................................................................................................................8
3.2.3 Passing arguments........................................................................................................................9
3.2.4 Ensuring correct downloads...........................................................................................................9
3.2.5 Testing youtube video streaming ................................................................................................. 10
3.2.6 Writing to files ............................................................................................................................ 11
3.2.7 Parsing and using results............................................................................................................. 11
3.2.8 Modifying the default behavior..................................................................................................... 11
3.2.9 Using HTTP preloads................................................................................................................... 12
3.2.10 Using RAS connections .............................................................................................................. 12
3.3 Special Topics ................................................................................................................................... 13
3.3.1 Cache control (Internet Explorer Only) ......................................................................................... 13
3.3.2 Mozilla Parameters...................................................................................................................... 13
3.3.3 IP Hook...................................................................................................................................... 14
3.3.4 Using Microsoft NetCap ............................................................................................................... 14
3.3.5 WS2 interception ........................................................................................................................ 14
3.3.6 TCP/UDP protocol analysis........................................................................................................... 15
3.3.7 HTTP protocol analysis ................................................................................................................ 15
3.3.8 HTTP header modification ........................................................................................................... 16
3.3.9 Proxy server specification ............................................................................................................ 16
3.3.10 User agent specification............................................................................................................. 16
3.3.11 Maximum number of sockets ..................................................................................................... 17
Technical Reference .................................................................................................................................. 18
4.1 Default measurement results ............................................................................................................. 18
4.1.1 Data format reference ................................................................................................................. 18
4.1.2 Sample data ............................................................................................................................... 18
4.1.3 Additional information ................................................................................................................. 18
4.2 Measurement log file ......................................................................................................................... 19
4.2.1 Data format reference ................................................................................................................. 19
4.2.2 Sample data ............................................................................................................................... 20
4.2.3 Additional information ................................................................................................................. 21
4.3 HTTP log file ..................................................................................................................................... 21
4.3.1 Data format reference ................................................................................................................. 21
WebSpeedTest
0.103 21.Nov.2011
36
Contents
WebSpeedTest
0.103 21.Nov.2011
37
Contents