diff options
| author | cashmere <cashmere@autistici.org> | 2026-09-04 09:05:24 +0200 |
|---|---|---|
| committer | cashmere <cashmere@autistici.org> | 2026-09-04 09:05:24 +0200 |
| commit | 4f49b16079b27d7ce633619e4cddfdf2bffbc952 (patch) | |
| tree | c296c1e7f3c3e2f6859c6d3a1b1b208779b89679 /www/stats.wiki | |
| download | relic-master.tar.gz | |
Diffstat (limited to 'www/stats.wiki')
| -rw-r--r-- | www/stats.wiki | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/www/stats.wiki b/www/stats.wiki new file mode 100644 index 0000000..285bb41 --- /dev/null +++ b/www/stats.wiki @@ -0,0 +1,149 @@ +<title>Fossil Performance</title> + +The questions will inevitably arise: How does Fossil perform? +Does it use a lot of disk space or bandwidth? Is it scalable? + +In an attempt to answer these questions, this report looks at several +projects that use fossil for configuration management and examines how +well they are working. The following table is a summary of the results. +(Last updated on 2018-06-04.) +Explanation and analysis follows the table. + +<table> +<tr> +<th>Project</th> +<th>Number Of Artifacts</th> +<th>Number Of Check-ins</th> +<th>Project Duration<br>(as of 2018-06-04)</th> +<th>Uncompressed Size</th> +<th>Repository Size</th> +<th>Compression Ratio</th> +<th>Clone Bandwidth</th> +</tr> + +<tr align="center"> +<td>[http://www.sqlite.org/src/timeline | SQLite] +<td>77492 +<td>20686 +<td>6580 days<br>18.02 years +<td>5.6 GB +<td>70.0 MB +<td>80:1 +<td>51.1 MB +</tr> + +<tr align="center"> +<td>[http://core.tcl.tk/tcl/timeline | TCL] +<td>161991 +<td>23146 +<td>7375 days<br>20.19 years +<td>8.0 GB +<td>222.0 MB +<td>36:1 +<td>150.5 MB +</tr> + +<tr align="center"> +<td>[/timeline | Fossil] +<td>39148 +<td>11266 +<td>3971 days<br>10.87 years +<td>3.8 GB +<td>42.0 MB +<td>90:1 +<td>27.4 MB +</tr> + +<tr align="center"> +<td>[http://www.sqlite.org/slt/timeline | SLT] +<td>2384 +<td>169 +<td>3474 days<br>9.51 years +<td>2.1 GB +<td>145.9 MB +<td>14:1 +<td>143.4 MB +</tr> + +<tr align="center"> +<td>[http://www.sqlite.org/th3.html | TH3] +<td>12406 +<td>3718 +<td>3539 days<br>9.69 years +<td>544 MB +<td>18.0 MB +<td>30:1 +<td>14.7 MB +</tr> + +<tr align="center"> +<td>[http://www.sqlite.org/docsrc/timeline | SQLite Docs] +<td>8752 +<td>2783 +<td>3857 days<br>10.56 years +<td>349.9 MB +<td>16.3 MB +<td>21:1 +<td>13.57 MB +</tr> + +</table> + +<h2>Measured Attributes</h2> + +In Fossil, every version of every file, every wiki page, every change to +every ticket, and every check-in is a separate "artifact". One way to +think of a Fossil project is as a bag of artifacts. Of course, there is +a lot more than this going on in Fossil. Many of the artifacts have meaning +and are related to other artifacts. But at a low level (for example when +synchronizing two instances of the same project) the only thing that matters +is the unordered collection of artifacts. In fact, one of the key +characteristics of Fossil is that the entire project history can be +reconstructed simply by scanning the artifacts in an arbitrary order. + +The number of check-ins is the number of times that the "commit" command +has been run. A single check-in might change 3 or 4 files, or it might +change dozens or hundreds of files. Regardless of the number of files +changed, it still only counts as one check-in. + +The "Uncompressed Size" is the total size of all the artifacts within +the repository assuming they were all uncompressed and stored +separately on the disk. Fossil makes use of delta compression between related +versions of the same file, and then uses zlib compression on the resulting +deltas. The total resulting repository size is shown after the uncompressed +size. + +On the right end of the table, we show the "Clone Bandwidth". This is the +total number of bytes sent from server back to the client. The number of +bytes sent from client to server is negligible in comparison. +These byte counts include HTTP protocol overhead. + +In the table and throughout this article, +"GB" means gigabytes (10<sup><small>9</small></sup> bytes) +not <a href="http://en.wikipedia.org/wiki/Gibibyte">gibibytes</a> +(2<sup><small>30</small></sup> bytes). Similarly, "MB" and "KB" +means megabytes and kilobytes, not mebibytes and kibibytes. + +<h2>Analysis And Supplemental Data</h2> + +Perhaps the two most interesting data points in the above table are SQLite +and SLT. SQLite is a long-running project with long revision chains. +Some of the files in SQLite have been edited over a thousand times. +Each of these edits is stored as a delta, and hence the SQLite project +gets excellent 80:1 compression. SLT, on the other hand, consists of +many large (megabyte-sized) SQL scripts that have one or maybe two +edits each. There is very little delta compression occurring and so the +overall repository compression ratio is much lower. Note also that +quite a bit more bandwidth is required to clone SLT than SQLite. + +For the first nine years of its development, SQLite was versioned by CVS. +The resulting CVS repository measured over 320MB in size. So, the +developers were surprised to see that the equivalent Fossil project (the +first nine years on SQLite) would clone with only 13MB of bandwidth. +The "sync" protocol +used by fossil has turned out to be surprisingly efficient. A typical +check-in on SQLite might use 3 or 4KB of network bandwidth. +For example, the [04eef9522386a59e] check-in used a single HTTP request +of 2099 bytes and got back a reply of 1116 bytes. +The sync protocol is efficient enough that, once cloned, +Fossil can easily be used over a dial-up connection. |
