[0001]
[0002]
[0003]
[0004]
[0005]
[0006]
[0007]
[0008]
[0009]
[0010]
[0011]
[0012]
[0013]
[0014]
[0015]
[0016]
[0017]
[0018]
[0019]
[0020]
[0021]
[0022]
[0023]
[0024]
[0025]
[0026]
[0027]
[0028]
[0029]
[0030]
[0031]
[0032]
[0033]
[0034]
[0035]
[0036]
[0037]
[0038]
[0039]
[0040]
[0041]
[0042]
[0043]
[0044]
[0045]
[0046]
[0047]
[0048]
[0049]
[0050]
[0051]
[0052]
[0053]
[0054]
[0055]
[0056]
[0057]
[0058]
[0059]
[0060]
[0061]
[0062]
[0063]
[0064]
[0065]
[0066]
[0067]
[0068]
[0069]
[0070]
[0071]
[0072]
[0073]
[0074]
[0075]
[0076]
[0077]
[0078]
[0079]
[0080]
[0081]
[0082]
[0083]
[0084]
[0085]
[0086]
[0087]
[0088]
[0089]
[0090]
[0091]
[0092]
[0093]
[0094]
[0095]
[0096]
[0097]
[0098]
[0099]
[0100]
[0101]
[0102]
[0103]
[0104]
[0105]
[0106]
[0107]
[0108]
[0109]
[0110]
[0111]
[0112]
[0113]
[0114]
[0115]
[0116]
[0117]
[0118]
[0119]
[0120]
[0121]
[0122]
[0123]
[0124]
[0125]
[0126]
[0127]
[0128]
[0129]
[0130]
[0131]
[0132]
[0133]
[0134]
[0135]
[0136]
[0137]
[0138]
[0139]
[0140]
[0141]
[0142]
[0143]
[0144]
[0145]
[0146]
[0147]
[0148]
[0149]
[0150]
[0151]
[0152]
[0153]
[0154]
[0155]
[0156]
[0157]
[0158]
[0159]
[0160]
[0161]
[0162]
[0163]
[0164]
[0165]
[0166]
[0167]
[0168]
[0169]
[0170]
[0171]
[0172]
[0173]
[0174]
[0175]
[0176]
[0177]
[0178]
[0179]
[0180]
[0181]
[0182]
[0183]
[0184]
[0185]
[0186]
[0187]
[0188]
[0189]
[0190]
[0191]
[0192]
[0193]
[0194]
[0195]
[0196]
[0197]
[0198]
[0199]
[0200]
[0201]
[0202]
[0203]
[0204]
[0205]
[0206]
[0207]
[0208]
[0209]
[0210]
[0211]
[0212]
[0213]
[0214]
[0215]
[0216]
[0217]
[0218]
[0219]
[0220]
[0221]
[0222]
[0223]
[0224]
[0225]
[0226]
[0227]
[0228]
[0229]
[0230]
[0231]
[0232]
[0233]
[0234]
[0235]
[0236]
[0237]
[0238]
[0239]
[0240]
[0241]
[0242]
[0243]
[0244]
[0245]
[0246]
[0247]
[0248]
[0249]
[0250]
[0251]
[0252]
[0253]
[0254]
[0255]
[0256]
[0257]
[0258]
[0259]
[0260]
[0261]
[0262]
[0263]
[0264]
[0265]
[0266]
[0267]
[0268]
[0269]
[0270]
[0271]
[0272]
[0273]
[0274]
[0275]
[0276]
[0277]
[0278]
[0279]
[0280]
[0281]
[0282]
[0283]
[0284]
[0285]
[0286]
[0287]
[0288]
[0289]
[0290]
[0291]
[0292]
[0293]
[0294]
[0295]
[0296]
[0297]
[0298]
[0299]
[0300]
[0301]
[0302]
[0303]
[0304]
[0305]
[0306]
[0307]
[0308]
[0309]
[0310]
[0311]
[0312]
[0313]
[0314]
[0315]
[0316]
[0317]
[0318]
[0319]
[0320]
[0321]
[0322]
[0323]
[0324]
[0325]
[0326]
[0327]
[0328]
[0329]
[0330]
[0331]
[0332]
[0333]
[0334]
[0335]
[0336]
[0337]
[0338]
[0339]
[0340]
[0341]
[0342]
[0343]
[0344]
[0345]
[0346]
[0347]
[0348]
[0349]
[0350]
[0351]
[0352]
[0353]
[0354]
[0355]
[0356]
[0357]
[0358]
[0359]
[0360]
[0361]
[0362]
[0363]
[0364]
[0365]
[0366]
[0367]
[0368]
[0369]
[0370]
[0371]
[0372]
[0373]
[0374]
[0375]
[0376]
[0377]
[0378]
[0379]
[0380]
[0381]
[0382]
[0383]
[0384]
[0385]
[0386]
[0387]
[0388]
[0389]
[0390]
[0391]
[0392]
[0393]
[0394]
[0395]
[0396]
[0397]
[0398]
[0399]
[0400]
[0401]
[0402]
[0403]
[0404]
[0405]
[0406]
[0407]
[0408]
[0409]
[0410]
[0411]
[0412]
[0413]
[0414]
[0415]
[0416]
[0417]
[0418]
[0419]
[0420]
[0421]
[0422]
[0423]
[0424]
[0425]
[0426]
[0427]
[0428]
[0429]
[0430]
[0431]
[0432]
[0433]
[0434]
[0435]
[0436]
[0437]
[0438]
[0439]
[0440]
[0441]
[0442]
[0443]
[0444]
[0445]
[0446]
[0447]
[0448]
[0449]
[0450]
[0451]
[0452]
[0453]
[0454]
[0455]
[0456]
[0457]
[0458]
[0459]
[0460]
[0461]
[0462]
[0463]
[0464]
[0465]
[0466]
[0467]
[0468]
[0469]
[0470]
[0471]
[0472]
[0473]
[0474]
[0475]
[0476]
[0477]
[0478]
[0479]
[0480]
[0481]
[0482]
[0483]
[0484]
[0485]
[0486]
[0487]
[0488]
[0489]
[0490]
[0491]
[0492]
[0493]
[0494]
[0495]
[0496]
[0497]
[0498]
[0499]
[0500]
[0501]
[0502]
[0503]
[0504]
[0505]
[0506]
[0507]
[0508]
[0509]
[0510]
[0511]
[0512]
[0513]
[0514]
[0515]
[0516]
[0517]
[0518]
[0519]
[0520]
[0521]
[0522]
[0523]
[0524]
[0525]
[0526]
[0527]
[0528]
[0529]
[0530]
[0531]
[0532]
[0533]
[0534]
[0535]
[0536]
[0537]
[0538]
[0539]
[0540]
[0541]
[0542]
[0543]
[0544]
[0545]
[0546]
[0547]
[0548]
[0549]
[0550]
[0551]
[0552]
[0553]
[0554]
[0555]
[0556]
[0557]
[0558]
[0559]
[0560]
[0561]
[0562]
[0563]
[0564]
[0565]
[0566]
[0567]
[0568]
[0569]
[0570]
[0571]
[0572]
[0573]
[0574]
[0575]
[0576]
[0577]
[0578]
[0579]
[0580]
[0581]
[0582]
[0583]
[0584]
[0585]
[0586]
[0587]
[0588]
[0589]
[0590]
[0591]
[0592]
[0593]
[0594]
[0595]
[0596]
[0597]
[0598]
[0599]
[0600]
[0601]
[0602]
[0603]
[0604]
[0605]
[0606]
[0607]
[0608]
[0609]
[0610]
[0611]
[0612]
[0613]
[0614]
[0615]
[0616]
[0617]
[0618]
[0619]
[0620]
[0621]
[0622]
[0623]
[0624]
[0625]
[0626]
[0627]
[0628]
[0629]
[0630]
[0631]
[0632]
[0633]
[0634]
[0635]
[0636]
[0637]
[0638]
[0639]
[0640]
[0641]
[0642]
[0643]
[0644]
[0645]
[0646]
[0647]
[0648]
[0649]
[0650]
[0651]
[0652]
[0653]
[0654]
[0655]
[0656]
[0657]
[0658]
[0659]
[0660]
[0661]
[0662]
[0663]
[0664]
[0665]
[0666]
[0667]
[0668]
[0669]
[0670]
[0671]
[0672]
[0673]
[0674]
[0675]
[0676]
[0677]
[0678]
[0679]
[0680]
[0681]
[0682]
[0683]
[0684]
[0685]
[0686]
[0687]
[0688]
[0689]
[0690]
[0691]
[0692]
[0693]
[0694]
[0695]
[0696]
[0697]
[0698]
[0699]
[0700]
[0701]
[0702]
[0703]
[0704]
[0705]
[0706]
[0707]
[0708]
[0709]
[0710]
[0711]
[0712]
[0713]
[0714]
[0715]
[0716]
[0717]
[0718]
[0719]
[0720]
[0721]
[0722]
[0723]
[0724]
[0725]
[0726]
[0727]
[0728]
[0729]
[0730]
[0731]
[0732]
[0733]
[0734]
[0735]
[0736]
[0737]
[0738]
[0739]
[0740]
[0741]
[0742]
[0743]
[0744]
[0745]
[0746]
[0747]
[0748]
[0749]
<!DOCTYPE html>
<!-- WASDOC AXP-2.0.0 (CGILIB AXP-1.9.9) -->
<!-- wasDOC Copyright (C) 2019,2020 Mark G.Daniel - Apache-2.0 licenced -->
<!--  3-NOV-2021 02:50 -->
<noscript>NOTE: SOME FUNCTIONALITY EMPLOYS JAVASCRIPT</noscript>
<div id="erreport1" style="display:none;"></div>
<script>
function errorReport(string) {
   for (var cnt = 1; cnt <= 2; cnt++) {
      var err = document.getElementById('erreport'+cnt);
      err.style.display = 'block';
      err.innerHTML += string;
   }
}
</script>
<style type="text/css">
html { font-family: arial, verdana, sans-serif; font-size:12pt; margin:1em; }
h1 { font-size:124%; font-style:bold;
     margin-top:1em; margin-bottom:0.5em; }
h2 { font-size:120%; font-style:bold;
     margin-top:1.1em; margin-bottom:0.4em; }
h3 { font-size:116%; font-style:bold;
     margin-top:1.0em; margin-bottom:0.3em; }
h4 { font-size:112%; font-style:bold;
     margin-top:1.1em; margin-bottom:0.3em; }
h5 { font-size:112%; font-style:bold; 
     margin-top:1.1em; margin-bottom:0.3em; }
h6 { font-size:112%; font-style:bold; padding:0; margin:0; }

h1 .text { text-decoration:underline; }
h1 .numb { padding-right:0.8em; }
h1 .numb:empty { display:none; padding-right:0; }
h2 .numb { padding-right:0.8em; }
h2 .numb:empty { display:none; padding-right:0; }
h3 .numb { padding-right:0.8em; }
h3 .numb:empty { display:none; padding-right:0; }
h4 .numb { padding-right:0.8em; }
h4 .numb:empty { display:none; padding-right:0; }
h5 .numb { display:none; padding-right:0; }
h6 .numb { display:none; padding-right:0; }

kbd { font-family:monospace; }

noscript { font-size:1.2em; }

p { line-height:1.1em; margin-top:1em; margin-bottom:1em; }

.chunk { font-size:130%; text-decoration:underline; }
.head {}
.high {}
.bold { font-weight:bold; }
.center { text-align:center; }
.italic { font-style:italic; }
.left { text-align:left; }
.nowrap { white-space:nowrap; }
.prewrap { white-space:pre; }
.right { text-align:right; }
.strike { text-decoration:line-through; }
.under { text-decoration:underline; }

.backlight { background-color:#f2f2f2; }
.display0 { display:none; }

img { max-width:100%; }
.imglink { }

.link { }
.blank { }

.list { margin-bottom:1em; }
.list li { margin-top:0.5em; }
.list0 li { margin-top:0; }
.item {}

.tabl { border-collapse:collapse; text-align:left; margin:0.4em 2em 0.5em 2em; }
.tabu { border-collapse:collapse; text-align:right; margin:0.4em 2em 0.5em 2em; }

.tabr { vertical-align:top; }
.tabh { padding:0.2em 0 0 2em; margin:0; }
.tabd { padding:0.1em 0 0 2em; margin:0; }
.tabh:first-of-type, td:first-of-type { padding-left:0; }

.tabu .tabh,
.tabu .tabd { border:1px solid gray; padding:0.2em 0.3em 0.2em 0.3em; }
.tab0 { border:none; visibility:hidden; max-width:1em; 
        white-space:nowrap; overflow:hidden; }

.tabauto { margin-left:auto; margin-right:auto; }

.tabr:empty { height:0.2em; }
.tabu .tabh:empty, .tabu .tabd:empty { border:none; visibility:hidden; }

.error { font-size:110%; color:black; background-color:yellow;
         font-family:sans-serif; font-weight:bold; font-style:normal;
         width:95%; border:solid 1px gray; padding:0.5em 1em 0.5em 1em; }
.error::before { content:'\026a0\00a0'; }
.image { }
.page { width:98%; border:1px dashed gray; margin:1.5em 0 1.8em 0; }
.epage { width:98%; border:1px dashed black; margin:1.5em 0 1.8em 0; }
.monosp { font-family:monospace; }
.ppage { display:none; }
.simple { list-style-type:none; }
.valtop { vertical-align:top; }
.valmid { vertical-align:middle; }
.valbot { vertical-align:bottom; }

.code { border-style:solid; border-width:0 0 0 1px; padding-left:1em;
        font-family:monospace; white-space:pre; }
.block { }
.blockof { margin:0.4em 2em 0.5em 2em; }
.example { border-style:dashed; border-width:0 0 0 1px; padding-left:1em;
           margin-top:0.5em; margin-bottom:0.5em; white-space:pre; }
.indent { margin-left:2em; margin-right:2em; }
.noindent { margin-left:0; margin-right:0; }
.inblock { display:inline-block; }
.mono { white-space:pre; font-family:monospace; }
.note { margin:0.4em 2em 0.5em 2em; page-break-inside:avoid; }
.note h5 { margin-top:0 }
.note_hr { width:80%; border:1px solid gray; }
.prop { padding-left:1em; margin-top:0.5em; margin-bottom:0.5em; }
.quote { border-style:dashed; border-width:0 0 0 1px; padding-left:1em;
         margin-top:0.5em; margin-bottom:0.5em; }
.this { display:none; }

a:link,a:visited { color:black; text-decoration:none; }
a:hover,a:active { text-decoration:underline; }
a:focus { outline:0; } 

:target:before { content:''; display:block; height:0.1em; margin:-0.1em; }
a.link:link, a.link:visited,a.link:active 
{ color:midnightBlue; text-decoration:underline; text-decoration-style:solid; }

.TOC1cols1 { width:80%; max-width:80%; }
.TOC1cols2 { column-count:2; width:80%; max-width:80%; }
.TOC1cols3 { column-count:3; max-width:90%; max-width:90%; }
.TOC1cols4 { column-count:4; max-width:100%; max-width:100%; }
.TOC1table { margin-left:2em; white-space:nowrap; break-inside:auto; }
.TOC1table tr { vertical-align:top; text-align:left; break-inside:avoid; break-after:auto; }
.TOC1table td+td { padding:0 0 0 0.5em; }
.TOC1table .numb { width:3em; max-width:3em; }
.TOC1table .sepr { width:5em; max-width:6em; overflow:hidden; }
.TOC1table .majr { font-weight:bold; }
.TOC1table .text { white-space:normal; }

/* These are due to Firefox (at least <= 76) recalcitrant multi-column handling.
   Web search "Split table into css columns, issue in Firefox" (stackoverflow).
   "Good grief, Charlie Brown!" */
 
.TOC1cols2 table,
.TOC1cols2 tbody,
.TOC1cols2 tr,
.TOC1cols3 table,
.TOC1cols3 tbody,
.TOC1cols3 tr,
.TOC1cols4 table,
.TOC1cols4 tbody,
.TOC1cols4 tr { display:block; padding:0; }

.TOC2cols1 { width:60%; max-width:60%; }
.TOC2cols2 { column-count:2; width:70%; max-width:70%; }
.TOC2cols3 { column-count:3; width:80%; max-width:80%; }
.TOC2cols4 { column-count:4; width:90%; max-width:90%; }
.TOC2table { margin-left:2em; white-space:nowrap; break-inside:auto; }
.TOC2table tr { vertical-align:top; text-align:left; break-inside:avoid; break-after:auto; }
.TOC2table .numb { font-weight:bold; padding-right:0.5em; }
.TOC2table .text { width:100%; white-space:normal; }

/* see "recalcitrant" above */
.TOC2cols2 table,
.TOC2cols2 tbody,
.TOC2cols2 tr,
.TOC2cols3 table,
.TOC2cols3 tbody,
.TOC2cols3 tr,
.TOC2cols4 table,
.TOC2cols4 tbody,
.TOC2cols4 tr { display:block; padding:0; }

.NAVtable { margin:0.1em 0 0 2em; }
.NAVtable td { font-size:110%; font-weight:bold; padding:0; margin:0; }
.NAVtable a { padding:0 0.5em 0 0.5em; text-decoration:none; }

.IDXcols1 { width:80%; max-width:80%; }
.IDXcols2 { column-count:2; width:90%; max-width:90%; }
.IDXcols3 { column-count:3; width:95%; max-width:95%;  }
.IDXcols4 { column-count:4; width:100%; max-width:100%;  }
.IDXtable { margin:1em 0 1em 2em; white-space:nowrap; break-inside:auto; }
.IDXtable tr { vertical-align:top; text-align:left; break-inside:avoid; break-after:auto; }
.IDXtable .alpha { font-weight:bold; min-width:2em; }
.IDXtable .text  { width:100%; white-space:normal; }
.IDXtable .para:before { content:'\00b6\00a0'; }

/* see "recalcitrant" above */
.IDXcols2 table,
.IDXcols2 tbody,
.IDXcols2 tr,
.IDXcols3 table,
.IDXcols3 tbody,
.IDXcols3 tr,
.IDXcols4 table,
.IDXcols4 tbody,
.IDXcols4 tr { display:block; padding:0; }

.insight { background-color:cyan; font-family:monospace;
           padding:0 0.2em 0 0.2em; margin:0 0.2em 0 0.2em;
           font-size:100%; font-style:normal; font-weight:normal;
           text-decoration:none; }

.wasdoc { font-family: "Lucida Console", Monaco, monospace; 
          letter-spacing:-0.07em; }

@media screen { .blank::after { content:"\2924"; } 
                .print { display:none; }
}

@media print {
   table { page-break-inside:avoid; }
   .noprint { display:none; }
   .page { border:none; page-break-after: always; }
   .epage { display:none; }
   .ppage { page-break-after:always; }
   .NAVtable { display:none; }
   .NAVprint { display:block!important; }
}

@page { margin:2cm 1cm 2cm 1cm;  }
</style>
<!-- source:0000_features.WASDOC -->

<style type="text/css">._smiley::after { font-size:150%; vertical-align:middle; content:'\263a' }</style>
<style type="text/css">._frowny::after { font-size:150%; vertical-align:middle; content:'\2639' }</style>
<style type="text/css">._button { border: 1px gray solid; border-radius:3px; padding:0.1em; margin:0.1em; font-size:90%; }</style>

<a id="0." href="#"></a>
<title>WASD Features and Facilities &ndash; Server Performance</title>
<a id="11." href="#"></a>
<a id="11.serverperformance" href="#"></a>
<a id="serverperformance" href="#"></a>
<h1 class="head chunk">WASD Features and Facilities</h1>
<h1 class="head"><span class="numb">11.</span><span class="text">Server Performance</span></h1>

<table class="TOC2table">
<tr><td><a href="features011.html#11.1.simplefilerequestturnaround"><span class="numb">11.1</span><span class="text">Simple File Request Turn-Around</span></a>
<tr><td><a href="features011.html#11.2.scripting"><span class="numb">11.2</span><span class="text">Scripting</span></a>
</table>
</div>

<table class="NAVtable NAVprint"><tr>
<td><a href="javascript:window.history.back();">&#8617;&#xFE0E;</a>
<td><a href="features010.html#10.">&#8598;&#xFE0E;</a>
<td><a href="features000.html#0.">&#8593;&#xFE0E;</a>
<td><a href="features012.html#12.">&#8600;&#xFE0E;</a>
<td><a href="javascript:window.history.forward();">&#8618;&#xFE0E;</a>
</table>

<div class="note center">
<a id="11.0.0.0.1" href="#"></a>
<a id="11.thesearev115results" href="#"></a>
<a id="thesearev115results" href="#"></a>
<h5 class="head center"><span class="text">These Are v11.5 Results</span></h5>
<hr class="note_hr">
It is planned to evaluate x86-64 v12 performance once OpenVMS V9.2-1 and native
compilers become available some time later in CY2022.
<hr class="note_hr">
</div>

<p> The server has a single-process, multi-threaded, asynchronous I/O design. On
a single-processor system this is the most efficient approach.  On a
multi-processor system it is limited by the single process context (with
scripts executing within their own context).  For I/O constrained processing
(the most common in general Web environments) the AST-driven approach is quite
efficient.

<p> The test-bench system was an <span class="high bold">DEC PWS 500 with 1 CPU and 1.5GB memory</span>,
running <span class="high bold">VSI OpenVMS V8.4-2L1 and VSI TCP/IP TCPIP V5.7-13ECO5F</span>.

<div class="note">
<a id="11.0.0.0.2" href="#"></a>
<a id="11.sureanoldclunker" href="#"></a>
<a id="sureanoldclunker" href="#"></a>
<h5 class="head center"><span class="text">Sure, an old clunker</span></h5>
<hr class="note_hr">
WASD largely has been developed on this system for 15+ years.

<p> While by today's standards it is a very resource constrained system,
especially by the EV56 (21164A) CPU, it has pretty-much done everything asked
of it for all that time.  Importantly, it has recent releases of system
software, courtesy of VSI's ISV support programme.  For performance purposes,
this allows comparison with recent releases of CSWS (VMS Apache).

<p> The requirements for a test-bench system effectively excludes production
systems, especially external ones, hence working with what is at hand. 

<hr class="note_hr">
</div>

<p> This performance data (WASD v11.5) has been collected very differently to
the next most recent from over a decade ago (WASD v10.0).  Apart from the move
from an HP rx2600 to the vintage PWS 500, the previous benchmarking tools were
WASD-in-house, ApacheBench (AB) and WASDbench (WB), executing on the same
system as the server, eliminating network traffic <span class="high italic">on-the-wire</span>.  The current
absolute benchmarks cannot meaningfully be compared to previous data.  The
relativities seem to be comparable.

<a id="11.0.0.0.3" href="#"></a>
<a id="11.benchmarksetup" href="#"></a>
<a id="benchmarksetup" href="#"></a>
<h5 class="head"><span class="text">Benchmark Setup</span></h5>

<p> These data have been collected using the <span class="high italic">h2load</span> utility
(<a class="link blank" target="_blank" href="https://nghttp2.org/documentation/h2load.1.html">https://nghttp2.org/documentation/h2load.1.html</a>) from the HTTP/2
C Library (<a class="link blank" target="_blank" href="https://nghttp2.org">https://nghttp2.org</a>).  This utility can be used to
configurably load <span class="high bold">HTTP, HTTPS and HTTP/2</span> servers.  Note that the number of
client threads (<span class="high monosp">-t</span>) is explicitly set to the connection concurrency
(<span class="high monosp">-c</span>) to maximise <span class="high italic">h2load</span> processing.

<p> The <span class="high italic">h2load</span> utility is running on a an 8CPU 32GB Mac Pro, across a 500
Mbps LAN to the 100 Mbps interface of the PWS.  The obvious resource
constraints are the single PWS CPU and network interface.  Every effort has
been made to ensure these do not unreasonably constrain the comparison.

<p> Clear text HTTP (port 80) data is collected to measure internal server
processing without the CPU-intensive overhead of encryption.  Encrypted HTTP
(port 443) data provides more real-world scenarios (especially now clear-text
is largely deprecated).  Both WASD and Apache were using OpenSSL 1.1.1 and
negotiated TLS v1.2. 

<p> Output from <span class="high italic">h2load</span> benchmarking runs are included in the
<a class="link blank" target="_blank" href="/wasd_root/exercise/*v115*.txt">WASD_ROOT:[EXERCISE]*V115*.TXT</a> directory
and is summarised below.

<a id="11.0.0.0.4" href="#"></a>
<a id="11.theseresultsareindicativeonly" href="#"></a>
<a id="theseresultsareindicativeonly" href="#"></a>
<h5 class="head"><span class="text">These results are indicative only!</span></h5>

<p> Every endeavour has been made to ensure the comparison is as equitable as
possible.  Both servers execute at the same process priority, access logging
and host name lookup disabled, and runs on the same machine in the same
relatively quiescent environment.  Each test run was interleaved between each
server to try and distribute any environment variations.  Those runs that are
very high throughput use a larger number of requests to improve sample period
validity.  Both servers were configured pretty-much &quot;out-of-the-box&quot;, minimal
changes (generally just enough to get the test environment going).  Multiple
data collections have yielded essentially equivalent relative results.

<p> For the test-bench WASD v11.5 is present on ports 80 and 443.

<a id="11.0.0.0.5" href="#"></a>
<a id="11.apachecomparison" href="#"></a>
<a id="apachecomparison" href="#"></a>
<h5 class="head"><span class="text">Apache Comparison</span></h5>

<p> The Apache comparison used the latest VSI AXPVMS CSWS V2.4-38C (based on
Apache v2.4.38) kit.  Apache is present on ports 7780 and 7443.

<a id="11.0.0.0.6" href="#"></a>
<a id="11.osucomparison" href="#"></a>
<a id="osucomparison" href="#"></a>
<h5 class="head"><span class="text">OSU Comparison</span></h5>

<p> Previous benchmarking included OSU data.  These are no longer collected.

<a id="11.1" href="#"></a>
<a id="11.1.simplefilerequestturnaround" href="#"></a>
<a id="simplefilerequestturnaround" href="#"></a>
<h2 class="head"><span class="numb">11.1</span><span class="text">Simple File Request Turn-Around</span></h2>

<p> A series of tests using batches of accesses. The first test returned an
empty file measuring response and file access time, without any actual
transfer. The second requested a file of 64k characters, testing performance
with a more realistic load.  All were done using one and ten concurrent
requests.

<div class="blockof block center">
<a id="11.1.0.0.1" href="#"></a>
<a id="11.1.http11clear" href="#"></a>
<a id="http11clear" href="#"></a>
<h5 class="head under"><span class="text">HTTP/1.1 clear</span></h5>
<a id="11.1.0.0.2" href="#"></a>
<a id="11.1.concurrency1" href="#"></a>
<a id="concurrency1" href="#"></a>
<h5 class="head"><span class="text">Concurrency 1</span></h5>
<table class="tabu tabauto">
<tr class="tabr">
<th class="tabh">
<th class="tabh" colspan="2">Requests/Second
<th class="tabh" colspan="2">Data Rate MBps
<tr class="tabr">
<th class="tabh">Response
<th class="tabh">WASD
<th class="tabh">Apache
<th class="tabh">WASD
<th class="tabh">Apache
<tr class="tabr">
<td class="tabd">0k
<td class="tabd">352
<td class="tabd">71
<td class="tabd">0.104
<td class="tabd">0.018
<tr class="tabr">
<td class="tabd">64k
<td class="tabd">61
<td class="tabd">36
<td class="tabd">3.740
<td class="tabd">2.230
</table>

<a id="11.1.0.0.3" href="#"></a>
<a id="11.1.concurrency10" href="#"></a>
<a id="concurrency10" href="#"></a>
<h5 class="head"><span class="text">Concurrency 10</span></h5>
<table class="tabu tabauto">
<tr class="tabr">
<th class="tabh">
<th class="tabh" colspan="2">Requests/Second
<th class="tabh" colspan="2">Data Rate MBps
<tr class="tabr">
<th class="tabh">Response
<th class="tabh">WASD
<th class="tabh">Apache
<th class="tabh">WASD
<th class="tabh">Apache
<tr class="tabr">
<td class="tabd">0k
<td class="tabd">1146
<td class="tabd">67
<td class="tabd">0.338
<td class="tabd">0.017
<tr class="tabr">
<td class="tabd">64k
<td class="tabd">124
<td class="tabd">48
<td class="tabd">7.590
<td class="tabd">2.940
</table>

<a id="11.1.0.0.4" href="#"></a>
<a id="11.1.http11encrypted" href="#"></a>
<a id="http11encrypted" href="#"></a>
<h5 class="head under"><span class="text">HTTP/1.1 encrypted</span></h5>
<a id="11.1.0.0.5" href="#"></a>
<a id="11.1.concurrency1" href="#"></a>
<a id="concurrency1" href="#"></a>
<h5 class="head"><span class="text">Concurrency 1</span></h5>
<table class="tabu tabauto">
<tr class="tabr">
<th class="tabh">
<th class="tabh" colspan="2">Requests/Second
<th class="tabh" colspan="2">Data Rate MBps
<tr class="tabr">
<th class="tabh">Response
<th class="tabh">WASD
<th class="tabh">Apache
<th class="tabh">WASD
<th class="tabh">Apache
<tr class="tabr">
<td class="tabd">0k
<td class="tabd">276
<td class="tabd">51
<td class="tabd">0.092
<td class="tabd">0.013
<tr class="tabr">
<td class="tabd">64k
<td class="tabd">21
<td class="tabd">25
<td class="tabd">1.300
<td class="tabd">1.550
</table>

<a id="11.1.0.0.6" href="#"></a>
<a id="11.1.concurrency10" href="#"></a>
<a id="concurrency10" href="#"></a>
<h5 class="head"><span class="text">Concurrency 10</span></h5>
<table class="tabu tabauto">
<tr class="tabr">
<th class="tabh">
<th class="tabh" colspan="2">Requests/Second
<th class="tabh" colspan="2">Data Rate MBps
<tr class="tabr">
<th class="tabh">Response
<th class="tabh">WASD
<th class="tabh">Apache
<th class="tabh">WASD
<th class="tabh">Apache
<tr class="tabr">
<td class="tabd">0k
<td class="tabd">175
<td class="tabd">46
<td class="tabd">0.580
<td class="tabd">0.112
<tr class="tabr">
<td class="tabd">64k
<td class="tabd">39
<td class="tabd">24
<td class="tabd">2.360
<td class="tabd">1.440
</table>

<a id="11.1.0.0.7" href="#"></a>
<a id="11.1.http2encrypted" href="#"></a>
<a id="http2encrypted" href="#"></a>
<h5 class="head under"><span class="text">HTTP/2 (encrypted)</span></h5>
<p> (VMS Apache currently does not support HTTP/2)
<a id="11.1.0.0.8" href="#"></a>
<a id="11.1.concurrency1" href="#"></a>
<a id="concurrency1" href="#"></a>
<h5 class="head"><span class="text">Concurrency 1</span></h5>
<table class="tabu tabauto">
<tr class="tabr">
<th class="tabh">
<th class="tabh" colspan="2">Requests/Second
<th class="tabh" colspan="2">Data Rate MBps
<tr class="tabr">
<th class="tabh">Response
<th class="tabh">WASD
<th class="tabh">Apache
<th class="tabh">WASD
<th class="tabh">Apache
<tr class="tabr">
<td class="tabd">0k
<td class="tabd">191
<td class="tabd">-
<td class="tabd">0.286
<td class="tabd">-
<tr class="tabr">
<td class="tabd">64k
<td class="tabd">20
<td class="tabd">-
<td class="tabd">1.210
<td class="tabd">-
</table>

<a id="11.1.0.0.9" href="#"></a>
<a id="11.1.concurrency10" href="#"></a>
<a id="concurrency10" href="#"></a>
<h5 class="head"><span class="text">Concurrency 10</span></h5>
<table class="tabu tabauto">
<tr class="tabr">
<th class="tabh">
<th class="tabh" colspan="2">Requests/Second
<th class="tabh" colspan="2">Data Rate MBps
<tr class="tabr">
<th class="tabh">Response
<th class="tabh">WASD
<th class="tabh">Apache
<th class="tabh">WASD
<th class="tabh">Apache
<tr class="tabr">
<td class="tabd">0k
<td class="tabd">156
<td class="tabd">-
<td class="tabd">0.240
<td class="tabd">-
<tr class="tabr">
<td class="tabd">64k
<td class="tabd">37
<td class="tabd">-
<td class="tabd">2.250
<td class="tabd">-
</table>

</div>

<p> Data file (non-relevant output snipped):

<ul class="list simple list0">
<li class="item"> <a class="link blank" target="_blank" href="/wasd_root/exercise/perf_files_v115.txt">WASD_ROOT:[EXERCISE]PERF_FILES_V115.TXT</a>
</ul>

<a id="11.1.0.0.10" href="#"></a>
<a id="11.1.filetransferrate" href="#"></a>
<a id="filetransferrate" href="#"></a>
<h5 class="head"><span class="text">File Transfer Rate</span></h5>

<p> Requests for a large <span class="high italic">binary</span> file (3.92MB - 8039 blocks) indicate a
<span class="high bold">potential transfer rate of multiple Mbytes per second</span>.

<div class="blockof block center"><a id="11.1.0.0.11" href="#"></a>
<a id="11.1.dataratembytessecond" href="#"></a>
<a id="dataratembytessecond" href="#"></a>
<h5 class="head"><span class="text">Data Rate - MBytes/Second</span></h5>
<p> (VMS Apache currently does not support HTTP/2)

<table class="tabu tabauto">
<tr class="tabr">
<td class="tabd">
<th class="tabh">Concurrent
<th class="tabh">WASD
<th class="tabh">Apache
<tr class="tabr">
<th class="tabh" colspan="1" rowspan="2">HTTP/1.1<br>(clear)
<td class="tabd">1
<td class="tabd">6.07
<td class="tabd">4.40
<tr class="tabr">
<td class="tabd">10
<td class="tabd">8.85
<td class="tabd">8.70
<tr class="tabr">
<th class="tabh" colspan="1" rowspan="2">HTTP/1.1<br>(encrypted)
<td class="tabd">1
<td class="tabd">2.91
<td class="tabd">3.23
<tr class="tabr">
<td class="tabd">10
<td class="tabd">2.77
<td class="tabd">2.92
<tr class="tabr">
<th class="tabh" colspan="1" rowspan="2">HTTP/2<br>(encrypted)
<td class="tabd">1
<td class="tabd">2.77
<td class="tabd">-
<tr class="tabr">
<td class="tabd">10
<td class="tabd">2.80
<td class="tabd">-
</table>
</div>

<p> Data file (non-relevant output snipped):

<ul class="list simple">
<li class="item"> <a class="link blank" target="_blank" href="/wasd_root/exercise/perf_xfer_v115.txt">WASD_ROOT:[EXERCISE]PERF_XFER_V115.TXT</a>
</ul>

<a id="11.1.0.0.12" href="#"></a>
<a id="11.1.filerecordformat" href="#"></a>
<a id="filerecordformat" href="#"></a>
<h5 class="head"><span class="text">File Record Format</span></h5>

<p> The WASD server can handle STREAM, STREAM_LF, STREAM_CR, FIXED and UNDEFINED
record formats very much more efficiently than VARIABLE or VFC files. With
STREAM, FIXED and UNDEFINED files the assumption is that HTTP carriage-control
is within the file itself (i.e. at least the newline (LF), all that is required
required by browsers), and does not require additional processing.  With
VARIABLE record files the carriage-control is implied and therefore each record
requires additional processing by the server to supply it.  Even with variable
record files having multiple records buffered by the HTTPd before writing them
collectively to the network improving efficiency, stream and binary file reads
are by Virtual Block and are written to the network immediately making the
transfer of these very efficient indeed!

<a id="11.2" href="#"></a>
<a id="11.2.scripting" href="#"></a>
<a id="scripting" href="#"></a>
<h2 class="head"><span class="numb">11.2</span><span class="text">Scripting</span></h2>

<p> A simple performance evaluation shows the relative merits of WASD scripting
and Apache in CGI and persistent environments, using
<a class="link blank" target="_blank" href="/wasd_root/src/cgiplus/cgiplustest.c">WASD_ROOT:[SRC.CGIPLUS]CGIPLUSTEST.C</a>
which executes in standard CGI, CGIplus and Apache loadable module
environments.  CGIplus and Apache modules are somewhat analagous.  A series of
accesses were made.  The first test returned only the HTTP header, evaluating
raw request turn-around time. The second test requested a body of 64k
characters, again testing performance with a more realistic load.

<div class="blockof block center">
<a id="11.2.0.0.1" href="#"></a>
<a id="11.2.concurrency1requestssecond" href="#"></a>
<a id="concurrency1requestssecond" href="#"></a>
<h5 class="head"><span class="text">Concurrency 1 - Requests/Second</span></h5>
<table class="tabu tabauto">
<tr class="tabr">
<th class="tabh">Response
<th class="tabh">WASD CGI
<th class="tabh">WASD CGIplus
<th class="tabh">Apache CGI
<th class="tabh">Apache module
<tr class="tabr">
<td class="tabd">0kB
<td class="tabd">27
<td class="tabd">193
<td class="tabd">5
<td class="tabd">52
<tr class="tabr">
<td class="tabd">64kB
<td class="tabd">14
<td class="tabd">25
<td class="tabd">5
<td class="tabd">31
</table>

<a id="11.2.0.0.2" href="#"></a>
<a id="11.2.concurrency10requestssecond" href="#"></a>
<a id="concurrency10requestssecond" href="#"></a>
<h5 class="head"><span class="text">Concurrency 10 - Requests/Second</span></h5>
<table class="tabu tabauto">
<tr class="tabr">
<th class="tabh">Response
<th class="tabh">WASD CGI
<th class="tabh">WASD CGIplus
<th class="tabh">Apache CGI
<th class="tabh">Apache module
<tr class="tabr">
<td class="tabd">0kB
<td class="tabd">28
<td class="tabd">337
<td class="tabd">4
<td class="tabd">51
<tr class="tabr">
<td class="tabd">64kB
<td class="tabd">16
<td class="tabd">65
<td class="tabd">4
<td class="tabd">37
</table>

</div>

<p> Data file (non-relevant output snipped):

<ul class="list simple list0">
<li class="item"> <a class="link blank" target="_blank" href="/wasd_root/exercise/perf_scripts_v115.txt">WASD_ROOT:[EXERCISE]PERF_SCRIPTS_V115.TXT</a>
</ul>

<a id="11.2.0.0.3" href="#"></a>
<a id="11.2.persistentscripting" href="#"></a>
<a id="persistentscripting" href="#"></a>
<h5 class="head"><span class="text">Persistent Scripting</span></h5>

<p> CGI scripting is notoriously slow (as above), hence the effort
expended by designers in creating persistent scripting environments - those
where the scripting engine (and perhaps other state) is maintained between
requests.  Both WASD and Apache implement these as integrated features,
the former as <span class="high bold">CGIplus/RTE</span>, and in the latter as <span class="high bold">loadable modules</span>.  

<p> The <span class="high italic">CGIplus</span> and <span class="high italic">Apache module</span> data from the above CGIPLUSTEST.EXE
table show the benefits of having scripts persist, reducing activation latency,
thereby increasing throughput, and potentially retaining state, including the
scripts themselves in local caches.   Both WASD and VMS Apache use their
respective <span class="high bold">persistence technologies</span> to provide common scripting
environments, including <span class="high bold">Perl</span>, <span class="high bold">PHP</span> and <span class="high bold">Python</span>.

<p> The WASD CGIplus/RTE technology used to implement its persistent scripting
environments are available for general use and based on CGI principles offer a
ready adaptation of well-known principles.  Most site-specific scripts can also
be built using the libraries, code fragments, and example scripts provided
with the WASD package,  and obtain similar efficiencies and low latencies.
See <a class="link blank" target="_blank" href="../../scripting/scripting.html">WASD Scripting Environment</a> document.
<!-- source:1200_UPDATE.WASDOC -->

<table class="NAVtable NAVprint"><tr>
<td><a href="javascript:window.history.back();">&#8617;&#xFE0E;</a>
<td><a href="features010.html#10.">&#8598;&#xFE0E;</a>
<td><a href="features000.html#0.">&#8593;&#xFE0E;</a>
<td><a href="features012.html#12.">&#8600;&#xFE0E;</a>
<td><a href="javascript:window.history.forward();">&#8618;&#xFE0E;</a>
</table>