Return-Path:
Subversion 1.8 introduces a number of improvements that can reduce +the size of FSFS repositories, the total number of files on disk, the +I/O overhead and gives the user fine-grained control over all of that. +Some of these changes require a format bump, others are backward-compatible. +
+ +The default repository format created by svnadmin create is +now FSFS version 6 which is not be accessible to Subversion 1.7 or older. +To create FSFS repositories compatible with Subversion 1.6 and 1.7, use +the --pre-1.8-compatible parameter. Older repository formats +remain fully supported by Subversion 1.8 but will not support +revprop packing.
+ +You may use svnadmin upgrade to upgrade existing repositories. +However, to fully benefit from the latest +repository size reductions, it is recommended to create a new repository, +adjust its settings and then dump / load or svnsync the content into it. +
+ +Format 6 repositories will not only +pack the revision files but also the revision property files. Upgrading +exisiting packed repositories will automatically pack the revision +properties. Using default settings, this will reduce the number of +revprop files to less than 10 per 1000 revisions in typical usage +scenarios.
+ +The db/fsfs.conf file allows you to fine-tune the +revprop packing strategy (see the comments in that file for a +detailed description of the available options). Please note that any +change in this configuration file will not affect existing data. +Moreover, upgrading repositories will not extend the existing +configuration file, i.e. the server will use the default settings +unless the new options are added explicitly.
+ +It is recommended also to activate +revprop caching when you use revprop packing. Otherwise, access +to timestamps etc. will incur significant overhead.
+ +Many operations will access revision properties to e.g. retrieve +the commit time stamp. Therefore, thousands of revision property +files may be read during a checkout. The UI to enable the revprop +cache is similar to that for the other caches: svnserve +now accepts the --cache-revprops yes parameter. For +mod_dav_svn, the same looks like this in httpd.conf + +
+<IfModule dav_svn_module> + SVNCacheRevProps on +</IfModule> ++ +
With revision property packing +enabled, revprop caching allows you to read hundreds of revprops +at once from a single file. This can give e.g. svn log +a significant performance boost.
+ +For each changed node in an FSFS repository, new versions of +all parent directories will be created. Larger repositories tend +to have relatively deep directory structures with at least one +level (branches, modules or projects) having tens of entries. +The total size of that data may well exceed the size of the actual +change. Subversion 1.8 now supports directory deltification +which eliminates most of that overhead.
+ +In db/fsfs.conf, you may now enable and disable +directory deltification at any time and these settings will be +applied in new revisions. For completeness, node properties may +now be deltified as well although the reductions in repository +size will usually be minimal. By default, directory and property +deltification is off. Also, db/fsfs.conf now allows for +a fine-grained control over how deltification will be applied. +See the comments in that file for a detailed description of the +individual options. +
+ +Another optimization in 1.8 is that node properties with the +same content will only be stored once and then referenced. This +not only slightly reduces the size of the repository but greatly +improves cache efficiency and can also significantly reduce I/O. +
+ +It's backward compatible! Please note that the mechanism +to read deltified data is the same for file content as for directories +and properties. Hence, Subversion 1.6 and 1.7 will be able to read +them but will always write new revisions without that optimization. +It is therefore perfectly legal to create a pre-1.8-compatible repository +in 1.8, to enable various deltification options, to dump/load into +the new repository using 1.8 tooling and to finally use it with a 1.6 +or 1.7 server. +
+ +When representation sharing has been enabled, Subversion 1.8 +will now be able to detect identical files with content within +the same revision and only store them once. This is a common situation +when you for instance import a non-incremental dump file or when +users apply the same change to multiple branches in a single commit. +
+ +Identifying bottlenecks in your Subversion infrastructure may be +difficult because client-side influences (virus scanners, slow disks +etc.) tend to mask other limitations. Therefore, Subversion 1.8 +introduces a very lightweight client that skips most of that local +processing.
+ +svn-bench provides commands similar to the standard +command line interface, adding a null- prefix to them. +Currently implemented are null-export, null-list +and null-log. They support most of the parameters of their +standard command counterparts.
+ ++$ time svn-bench null-export svn://localhost/tsvn_repos/trunk + 179 directories + 3,661 files + 84,902,674 bytes in files + 20,560 properties + 315,031 bytes in properties + +real 0m0.185s +user 0m0.128s +sys 0m0.040s ++ +
By running the client close to or directly on the server machine, +you will be able to determine the raw server speed and compare that +to what the client-side is seeing.
+ +If your server has a 10 Gbit/s or faster network connection, the +multi-stage data copying from caches to the network stack plus frequent +status checks become a bottleneck. Today, most clients won't be able +to generate enough aggregated traffic to make this an issue and an 8-core +server should be able to send about 40Gb/s at 100% CPU load. Future +clients may become able, however, to process 1Gb or even 10Gb per second +and to create a seriously server loads. +
+ +When the server is given the --client-speed N parameter, +it will assume that the clients are able to process data rates of +N Gbit/s. With N>0, the server will take various shortcuts to reduce +the processing overhead. On the downside, it must employ strict time-outs +to prevent clients from interfering each other: In any 1 second interval, +a client must process incoming data at at least 2% of the specified +speed or the operation may be aborted due to timeouts. +
+ +