<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
<title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
A modern CPU can run, at most, around 10 million -assembly based-
instructions per second.<br>
See <a class="moz-txt-link-freetext" href="http://en.wikipedia.org/wiki/Instructions_per_second">http://en.wikipedia.org/wiki/Instructions_per_second</a><br>
A regular expression compare is likely at least 20 or so assembly
instructions.<br>
That gives around 500,000 regular expression compares if you are
using 100% of the<br>
CPU just for that. A reasonable amount of CPU to consume would be
30% ( at most ).<br>
So; you are left with around 150k regular expression checks per
second.<br>
<br>
Lets suppose there are 500 different domains. On average, you will
be doing 250 if/else<br>
checks per call. 150k / 250 = 600. That means that you will get,
under fair conditions, a max<br>
of about 600 hits per second. The person asking the question likely
has 500 domains running.<br>
That gives a little over 1 hit possible per second per domain. Do
you think that is an acceptable<br>
solution for this person? I think not.<br>
<br>
Compare it to a hash lookup. A hash lookup, using a good minimal
perfect hashing algorithms,<br>
will take at most around 10 operations. Using the same math as
above, that gives around 300k<br>
lookups per second. A hash would be roughly 500 times faster than
using if/else...<br>
<br>
On 3/7/2011 1:35 PM, Per Buer wrote:
<blockquote
cite="mid:AANLkTinFt7ZSEms1s_7eNN1t_-3-bqDxJfEmGTf0oSS9@mail.gmail.com"
type="cite">
<div>Hi,</div>
<div><br>
</div>
On Sun, Mar 6, 2011 at 11:39 PM, AD <span dir="ltr"><<a
moz-do-not-send="true" href="mailto:straightflush@gmail.com">straightflush@gmail.com</a>></span>
wrote:<br>
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt
0.8ex; border-left: 1px solid rgb(204, 204, 204);
padding-left: 1ex;">
<br>
<div> what is the best way to run an instance of varnish that
may need different vcl configurations for each hostname.
This could end up being 100-500 includes to map to each
hostname and then a long if/then block based on the
hostname. Is there a more scalable way to deal with this?</div>
</blockquote>
<div><br>
</div>
<div>CPU and memory bandwidth is abundant on modern servers. I'm
actually not sure that having a 500 entries long if/else
statement will hamper performance at all. Remember, there will
be no system calls. I would guess a modern server will execute
at least a four million regex-based if/else per second per CPU
core if most of the code and data will be in the on die cache.
So executing 500 matches should take about 0.5ms.</div>
<div><br>
</div>
<div>It might not make sense to optimize this. </div>
<div><br>
</div>
</div>
-- <br>
Per Buer, Varnish Software<br>
Phone: +47 21 98 92 61 / Mobile: +47 958 39 117 / Skype: per.buer<br>
Varnish makes websites fly!<br>
Want to learn more about Varnish? <a moz-do-not-send="true"
href="http://www.varnish-software.com/whitepapers"
target="_blank">http://www.varnish-software.com/whitepapers</a><br>
<br>
<pre wrap="">
<fieldset class="mimeAttachmentHeader"></fieldset>
_______________________________________________
varnish-misc mailing list
<a class="moz-txt-link-abbreviated" href="mailto:varnish-misc@varnish-cache.org">varnish-misc@varnish-cache.org</a>
<a class="moz-txt-link-freetext" href="http://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc">http://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc</a></pre>
</blockquote>
<br>
</body>
</html>