<br><font size=2 face="sans-serif">OK, I think this explains quite a bit, because even the uncompressed bandwidth usage (200kb in 24 hours) is essentially negligible. At this rate any appreciable amount of server bandwidth would have the capacity for many millions of connections, and other factors (such as kernel limitations, XML parsing, memory constraints) will limit server capacity long before bandwidth becomes an issue. Therefore, adding compression in a heavily strained server will actually decrease its capacity, because internal resources (such as CPU time and memory) will be taken away to save bandwidth, which is plentiful.</font>
<br>
<br><font size=2 face="sans-serif">From the cost perspective, at this rate of transfer, the cost for bandwidth per user is also negligible. Consider that if bandwidth costs $10/GB (this is a number from a web hosting provider, and is probably much higher than one pays for an actual pipe), then supporting one million concurrent users each transferring 200kb in 24 hours costs $2,000 or 0.2 cents per user. Certainly this figure decreases if your bandwidth usage decreases, but either number is negligible when compared to the secondary costs of supporting that many users.</font>
<br>
<br><font size=2 face="sans-serif">The questions, then, are: (1) under what conditions is the bandwidth usage for a client connection non-negligible? and &nbsp;(2) can you achieve the same high compression ratios under these conditions?</font>
<br>
<br><font size=2 face="sans-serif">I hypothesize that the answer to question (1) will imply that the data being exchanged with the client is very non-repetitive and thus non-compressible compared to the 200kb that crossed in 24 hours, and so the answer to (2) will be no. But I will have to look into it further.</font>
<br>
<br><font size=2 face="sans-serif">-Mike</font>
<br>
<br>
<br>
<br>
<table width=100%>
<tr valign=top>
<td>
<td><font size=1 face="sans-serif"><b>&quot;Michael F. March&quot; &lt;march@indirect.com&gt;</b></font>
<br><font size=1 face="sans-serif">Sent by: jdev-admin@jabber.org</font>
<p><font size=1 face="sans-serif">01/06/2002 02:13 PM</font>
<br><font size=1 face="sans-serif">Please respond to jdev</font>
<br>
<td><font size=1 face="Arial">&nbsp; &nbsp; &nbsp; &nbsp; </font>
<br><font size=1 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; To: &nbsp; &nbsp; &nbsp; &nbsp;&lt;jdev@jabber.org&gt;</font>
<br><font size=1 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; cc: &nbsp; &nbsp; &nbsp; &nbsp;</font>
<br><font size=1 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; Subject: &nbsp; &nbsp; &nbsp; &nbsp;Re: [JDEV] GZipping Jabber Messages</font>
<br>
<br><font size=1 face="Arial">&nbsp; &nbsp; &nbsp; &nbsp;</font></table>
<br>
<br><font size=2 face="Courier New">More info:<br>
<br>
I captured XML from a 24 hr Jabber session and the XML from<br>
that session was 179601 bytes and it compressed down to<br>
6966 bytes.<br>
<br>
<br>
<br>
&gt;<br>
&gt; I was port forwarding a Jabber session...<br>
&gt;<br>
&gt;<br>
&gt; &gt; What is the nature of the data you are transferring?<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; After doing a longer session (about 20 minutes), I am getting<br>
&gt; &gt; about 80% in both directions now..<br>
&gt; &gt;<br>
&gt; &gt; &gt; Doing compression with SSH I am getting about 70% compression<br>
&gt; &gt; &gt; outbound and 80% compression inbound..<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; I have not investigated how OpenSSH implements compression on<br>
&gt; &gt; &gt; the TCP stream though so I am not sure how great of gauge this<br>
&gt; &gt; &gt; is..<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Update. I am finding that you can get better compression ratios, up<br>
to<br>
&gt; &gt; &gt; &gt; around 57%, by maintaining the LZ dictionary between packets. Also<br>
&gt; this<br>
&gt; &gt; &gt; &gt; reduces the processor hit asymptotically (but still quite nonzero)<br>
&gt; with<br>
&gt; &gt; &gt; &gt; more packets sent along.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; This technique raises still other problems, though, most notably<br>
&gt; &gt; &gt; &gt; reliability. For this to work the gzip deflater on one end and the<br>
&gt; &gt; &gt; inflater<br>
&gt; &gt; &gt; &gt; on the other end must remain exactly in sync for the duration of the<br>
&gt; &gt; &gt; &gt; connection (hours, days, ...). An error in the compressed stream<br>
would<br>
&gt; &gt; be<br>
&gt; &gt; &gt; &gt; magnified many times over in the inflated stream. So for reliability<br>
&gt; &gt; you<br>
&gt; &gt; &gt; &gt; had better hash or at least checksum all the data going across. That<br>
&gt; &gt; means<br>
&gt; &gt; &gt; &gt; you have to have an envelope format.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; So for bandwidth and processor usage, this does a lot better than I<br>
&gt; &gt; &gt; &gt; expected compared to my original run, but now we are just a few<br>
steps<br>
&gt; &gt; away<br>
&gt; &gt; &gt; &gt; (credential verification, key exchange, and stream encryption) from<br>
&gt; &gt; &gt; &gt; re-doing SSL.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; -Mike<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; ----- Forwarded by Michael F Lin/Cambridge/IBM on 01/05/2002 11:38<br>
&gt; &gt; &gt; AM -----<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Michael F Lin<br>
&gt; &gt; &gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;To:<br>
&gt; jdev@jabber.org<br>
&gt; &gt; &gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 01/04/2002 09:26 &nbsp; &nbsp; &nbsp; &nbsp; cc:<br>
&gt; &gt; &gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PM &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; From: &nbsp; &nbsp;Michael F<br>
&gt; &gt; &gt; Lin/Cambridge/IBM@IBMUS<br>
&gt; &gt; &gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Subject: Re: [JDEV]<br>
&gt; &gt; &gt; GZipping Jabber Messages(Document link: Michael Lin)<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Hi Adam, I looked over some of the DotGNU mailing list archives at<br>
the<br>
&gt; &gt; &gt; &gt; discussion you are referring to.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; One person from DotGNU says<br>
&gt; &gt; &gt; &gt; ---<br>
&gt; &gt; &gt; &gt; At the end of the day, it is easier to just gzip it and forget about<br>
&gt; &gt; &gt; &gt; the problem. &nbsp;No data loss, and roughly the same level of<br>
&gt; &gt; &gt; &gt; compaction. &nbsp;Highly redundant data like XML compresses<br>
&gt; &gt; &gt; &gt; very well. &nbsp;For example, the 6 Mb All.xml file for the C#<br>
&gt; &gt; &gt; &gt; library specification compresses to ~630k using gzip: about<br>
&gt; &gt; &gt; &gt; 10% of the original size.</font>
<br><font size=2 face="Courier New">&gt; &gt; &gt; &gt; ---<br>
&gt; &gt; &gt; &gt; I believe this is misleading in the context of realtime XML streams<br>
&gt; &gt; (e.g.<br>
&gt; &gt; &gt; &gt; Jabber; SOAP; presumably, whatever DotGNU will use) because you are<br>
&gt; not<br>
&gt; &gt; &gt; &gt; compressing 6Mb of data at once. Rather you are compressing small<br>
&gt; &gt; packets,<br>
&gt; &gt; &gt; &gt; a few hundred bytes in length in the case of Jabber, and then<br>
&gt; &gt; transmitting<br>
&gt; &gt; &gt; &gt; them individually. I ran some tests to see how gzip performs under<br>
&gt; &gt; these<br>
&gt; &gt; &gt; &gt; conditions.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; I wrote a program which generates random Jabber &lt;message/&gt; packets.<br>
&gt; The<br>
&gt; &gt; &gt; &gt; body of each message is formed by randomly selecting between 1 and<br>
25<br>
&gt; &gt; &gt; words<br>
&gt; &gt; &gt; &gt; from a 10,000-word English language dictionary file. For each test<br>
&gt; &gt; vector,<br>
&gt; &gt; &gt; &gt; the program runs zlib compress, level 9, on it (equivalent [I think]<br>
&gt; to<br>
&gt; &gt; &gt; &gt; gzip with maximum compression), then records the compressed size and<br>
&gt; &gt; the<br>
&gt; &gt; &gt; &gt; original size. It repeats this until at least 1 million bytes of<br>
&gt; &gt; &gt; &gt; uncompressed data has been processed.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; The results from about a dozen runs of this program are very<br>
&gt; &gt; consistent:<br>
&gt; &gt; a<br>
&gt; &gt; &gt; &gt; compression ratio of 17% in 7 seconds of runtime. A typical result<br>
is<br>
&gt; &gt; &gt; &gt; 1,000,011 total bytes of raw data; 830,654 bytes of compressed data.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; If I comment the code to compress the test vectors, and leave the<br>
code<br>
&gt; &gt; to<br>
&gt; &gt; &gt; &gt; generate the test vectors, the program runs in less than 1 second.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; [This was run on]<br>
&gt; &gt; &gt; &gt; athena% uname -a<br>
&gt; &gt; &gt; &gt; SunOS department-of-alchemy.mit.edu 5.8 Generic_108528-08 sun4u<br>
sparc<br>
&gt; &gt; &gt; &gt; SUNW,Ultra-60<br>
&gt; &gt; &gt; &gt; athena%<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Obviously these are preliminary and nonscientific results only, and<br>
&gt; &gt; there<br>
&gt; &gt; &gt; &gt; are other factors to consider with Jabber, such as the likelihood<br>
&gt; &gt; &gt; &gt; previously mentioned that the XML processing is going to be the<br>
&gt; &gt; limiting<br>
&gt; &gt; &gt; &gt; factor in processor time. I find the topic quite interesting,<br>
however,<br>
&gt; &gt; so<br>
&gt; &gt; &gt; I<br>
&gt; &gt; &gt; &gt; am going to fiddle around with it over the next few days and see if<br>
I<br>
&gt; &gt; can<br>
&gt; &gt; &gt; &gt; get it to do better with custom deflate dictionaries and such.<br>
&gt; &gt; Hopefully<br>
&gt; &gt; I<br>
&gt; &gt; &gt; &gt; will even find time to write something on the topic and post it with<br>
&gt; my<br>
&gt; &gt; &gt; &gt; source code. However, based on these initial results I am very wary<br>
of<br>
&gt; &gt; &gt; &gt; gzipping instant messaging XML because of the apparent high<br>
processing<br>
&gt; &gt; &gt; cost<br>
&gt; &gt; &gt; &gt; and mediocre compression ratio. I will continue to test but my<br>
&gt; &gt; hypothesis<br>
&gt; &gt; &gt; &gt; is that gzip or any generic compression algorithm is going to be<br>
very<br>
&gt; &gt; &gt; &gt; mediocre for Jabber as instant messaging.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; -Mike<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Adam Theo<br>
&gt; &gt; &gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;adamtheo@theoret &nbsp; &nbsp; &nbsp; &nbsp;To: &nbsp; &nbsp; &nbsp; jdev<br>
&gt; &gt; &gt; &lt;jdev@jabber.org&gt;<br>
&gt; &gt; &gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ic.com&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cc:<br>
&gt; &gt; &gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Sent by: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Subject: &nbsp;[JDEV]<br>
&gt; &gt; GZipping<br>
&gt; &gt; &gt; Jabber Messages<br>
&gt; &gt; &gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; jdev-admin@jabber<br>
&gt; &gt; &gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .org<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 01/04/2002 03:32<br>
&gt; &gt; &gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PM<br>
&gt; &gt; &gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Please respond to<br>
&gt; &gt; &gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; jdev<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Hi, all. There's a good discussion going on over at the DotGNU<br>
&gt; &gt; Developer<br>
&gt; &gt; &gt; &gt; list about gzip'ing the XML that is transmitted around on the DotGNU<br>
&gt; &gt; &gt; &gt; platform.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Was wondering if it would be possible to incorporate the same thing<br>
&gt; for<br>
&gt; &gt; &gt; &gt; future versions of the Jabber server? Is it feasible, anyway? They<br>
are<br>
&gt; &gt; &gt; &gt; saying the trade-offs for extra resource consumption would not be<br>
bad<br>
&gt; &gt; at<br>
&gt; &gt; &gt; &gt; all if designed into the server properly, and would reduce bandwidth<br>
&gt; &gt; &gt; &gt; very dramatically (like by 80%, i think). This would be useful for<br>
&gt; &gt; &gt; &gt; high-volume servers with enough processing power, i think...<br>
&gt; &gt; &gt; &gt; --<br>
&gt; &gt; &gt; &gt; &nbsp; &nbsp; /\ &nbsp; &nbsp;-- Adam Theo, Age 22, Tallahassee FL USA --<br>
&gt; &gt; &gt; &gt; &nbsp; &nbsp;//\\ &nbsp; Theoretic Solutions (http://www.theoretic.com)<br>
&gt; &gt; &gt; &gt; &nbsp; /____\ &nbsp; &nbsp;&quot;Software, Internet Services and Advocacy&quot;<br>
&gt; &gt; &gt; &gt; /--||--\ Personal Website (http://www.theoretic.com/adamtheo)<br>
&gt; &gt; &gt; &gt; &nbsp; &nbsp; || &nbsp; &nbsp;Jabber Open IM (http://www.jabber.org)<br>
&gt; &gt; &gt; &gt; &nbsp; &nbsp; || &nbsp; &nbsp;Email &amp; Jabber: adamtheo@theoretic.com<br>
&gt; &gt; &gt; &gt; &nbsp; &nbsp; || &nbsp; &nbsp;AIM: AdamTheo2000 &nbsp; ICQ: 3617306 &nbsp; Y!: AdamTheo2<br>
&gt; &gt; &gt; &gt; &nbsp; &quot;A free-market socialist computer geek patriotic American<br>
buddhist.&quot;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; _______________________________________________<br>
&gt; &gt; &gt; &gt; jdev mailing list<br>
&gt; &gt; &gt; &gt; jdev@jabber.org<br>
&gt; &gt; &gt; &gt; http://mailman.jabber.org/listinfo/jdev<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; _______________________________________________<br>
&gt; &gt; &gt; &gt; jdev mailing list<br>
&gt; &gt; &gt; &gt; jdev@jabber.org<br>
&gt; &gt; &gt; &gt; http://mailman.jabber.org/listinfo/jdev<br>
&gt; &gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; _______________________________________________<br>
&gt; &gt; jdev mailing list<br>
&gt; &gt; jdev@jabber.org<br>
&gt; &gt; http://mailman.jabber.org/listinfo/jdev<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; _______________________________________________<br>
&gt; &gt; jdev mailing list<br>
&gt; &gt; jdev@jabber.org<br>
&gt; &gt; http://mailman.jabber.org/listinfo/jdev<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; jdev mailing list<br>
&gt; jdev@jabber.org<br>
&gt; http://mailman.jabber.org/listinfo/jdev<br>
<br>
_______________________________________________<br>
jdev mailing list<br>
jdev@jabber.org<br>
http://mailman.jabber.org/listinfo/jdev<br>
</font>
<br>
<br>