1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256
|
namebench has an opt-in feature that enables users to upload and share results.
This is a technical description to show exactly what data is communicated to
the server via JSON.
Many performance numbers are duplicated within the submitted data. For
instance, we upload the individual durations for each query, along with an
average. This is done as a performance enhancement, since the client has
already calculated all of the averages, saving AppEngine from duplicating
effort.
-------------------------------------------------------------------------------
# Lets start with the most interesting number from a privacy perspective:
#
# The client_id is a simple signed integer, designed to detect subsequent runs
# from the same user, so that the new runs can be hidden. To arrive at a unique
# integer, we create a long string containing the following text, and create an
# integer checksum of that data (see site_connector.py):
#
# platform.platform() Operating system name and version
# sys.version Python interpreter version
# platform.node() Hostname of machine
# os.getenv('HOME') Filesystem path to home directory
#
# The checksum is calculated using the crc32() function from the zlib library.
# We purposefully chose such a simple algorithm with a higher rate of collision
# than MD5 or SHA1. For our purpose, a simple 32-bit integer is good enough to
# detect subsequent submissions from the same user within 6 hours.
# This item is deleted from the datastore within 12h.
'client_id': 1078802240,
# This is a simple random integer to prevent a duplicate submission in the case of a
# client or server error. This item is deleted from the datastore within 12h.
'submit_id': 34923485,
# A user may request that this submission is unlisted directly.
'hidden': False,
'data':
{
"nameservers":[
{
"timeout_count":0,
# How long the health checks took for this host.
"check_average":433.1902027130127,
# Any node_ids reported by a nameserver. This is removed for internal hosts.
"node_ids":[
"3.nyc"
],
# This is obfuscated for internal hosts.
"ip":"208.67.220.220",
# How long each benchmark query took in ms. Normally there would be 250 of these.
"durations":[
[
671.98014259338379,
611.4649772644043,
625.26202201843262,
630.34987449645996,
628.66091728210449,
697.69501686096191,
716.68291091918945,
715.0270938873291,
713.67907524108887,
715.93189239501953,
716.09187126159668,
714.63704109191895,
715.09003639221191,
721.9398021697998,
710.00409126281738,
717.65494346618652,
711.21597290039062,
716.58420562744141,
715.98601341247559,
715.15107154846191,
182.373046875,
64.732074737548828,
37.251949310302734,
62.382221221923828,
54.202795028686523
]
],
"is_disabled":false,
"is_global":false,
"error_count":0,
"nx_count":0,
# The performance ranking of this server in your tests.
"position":0,
"is_failure_prone":false,
# pre-computed average for all runs.
"overall_average":571.28124237060547,
# Index hosts are a pre-defined list of queries that are always
# queried for submissions. This allows providers to compare results
# on an individual query basis. The hosts do not differ between submissions.
"index":[
[
"www.google.com.",
"A",
716.68291091918945,
2,
30,
"google.navigation.opendns.com. -> 208.67.217.231, 208.67.217.230"
],
[
"www.amazon.com.",
"A",
95.599889755249023,
1,
15,
"207.171.166.252"
],
[
"www.wikipedia.org.",
"A",
142.0438289642334,
3,
3308,
"rr.wikimedia.org. -> rr.pmtpa.wikimedia.org. -> 208.80.152.2"
],
[
"www.twitter.com.",
"A",
151.8549919128418,
2,
509,
"twitter.com. -> 128.242.240.148"
],
[
"yahoo.com.",
"A",
166.63408279418945,
1,
19068,
"209.191.122.70, 67.195.160.76, 69.147.125.65, 72.30.2.43, 98.137.149.56"
],
[
"a.root-servers.net.",
"A",
101.4409065246582,
1,
604799,
"198.41.0.4"
],
[
"www.google-analytics.com.",
"A",
60.657978057861328,
2,
82164,
"www-google-analytics.l.google.com. -> 72.14.204.102, 72.14.204.113, 72.14.204.100, 72.14.204.101"
],
[
"www.youtube.com.",
"A",
65.762996673583984,
2,
86118,
"youtube-ui.l.google.com. -> 74.125.93.113, 74.125.93.100, 74.125.93.139, 74.125.93.102, 74.125.93.138, 74.125.93.101"
],
[
"www.baidu.com.",
"A",
61.342954635620117,
2,
959,
"www.a.shifen.com. -> 220.181.6.175"
],
[
"www.facebook.com.",
"A",
100.84199905395508,
1,
40,
"66.220.146.11"
]
],
"is_reference":true,
"is_custom":false,
"name":"",
# Any errors the nameserver has.
"notes":[
{
"url":"http://code.google.com/p/namebench/wiki/FAQ#What_does_\"Incorrect_result_for...\"_mean?",
"text":"www.google.com is hijacked: google.navigation.opendns.com"
}
],
# This is masked for internal hostnames.
"hostname":"resolver2.opendns.com",
# If this host is currently in use by the system, this is the positional element. 0 would signify
# a primary nameserver.
"sys_position":null,
# If the nameserver returns a version number, it would be returned here. This is removed for
# private IP's.
"version":"",
"is_regional":false,
# OARC port diversity data - only available for public IP's.
"port_behavior":"208.67.217.8 is GREAT: 26 queries in 2.0 seconds from 26 ports with std dev 18425",
# Precomputed slowest and fastest times for any query.
"duration_max":721.9398021697998,
"duration_min":37.251949310302734,
# An average for each run.
"averages":[
571.28124237060547
]
},
{
# ... additional nameservers would have data stored here ...
}
],
# This is GeoIP data returned by the Google Gears JSON API, and is
# used to make results available on a geographic basis.
"geodata":{
"city":"Manchester",
"region_name":"New Hampshire",
# Whether or not we used Google (default) or Maxmind for GeoIP data.
"source":"gloc",
# The lat/long accuracy is reduced to only provide city-level
# accuracy, which is enough for us to keep up with city name changes.
"longitude":-71.454,
"latitude":42.995,
"country_code":"US",
"country_name":"United States"
},
# These are the options selected by the user.
"config":{
"query_count":25,
"benchmark_thread_count":2,
"template":"html",
"health_thread_count":40,
"version":"1.3-BETA1",
"only":true,
"select_mode":"automatic",
"platform":"Mac OS X",
"num_servers":11,
"hide_results":0,
"ping_timeout":0.5,
"timeout":3.5,
"run_count":1,
"input_source":"chrome",
"health_timeout":3.75,
"upload_results":true
}
}
|