[[!comment not clear how much optimization is still going on ]]

This page is one of many describing EvaluationFeatures that may be useful when comparing monotone to other similar (and not-so-similar) VCS systems.

Description

The VCS should be fast, especially for common operations.

Partially Supported

Monotone is fast for many operations, including most common ones in a workspace like diff and status and commit, but not universally so. Monotone's speed results are mixed, but generally improving.

Monotone has been implemented for robustness and correctness first, and optimisation later. It includes extensive internal consistency checking and revalidation of information (see RobustRepository) and this comes at some cost in performance. The implementations of some key internal operations have been initially written for clarity and simplicity rather than efficiency, and some are known to be downright wasteful of CPU. These are being optimised or rewritten as benchmarking shows where the hotspots are; this can be done with confidence on the basis of the extensive test suite that ensures correct behaviour is retained with new implementations.

Some operations are known to scale poorly on repositories with very deep histories, even though the problem may not be noticable on newer projects with shorter histories. The 0.30 release introduced major performance improvements as a result of applying this process to some key areas, and further work is ongoing to continue this process for more elements and internal operations. [[!comment 0.30 was a long time ago ]]

The user operations known to be slow include:

  • initial pull of long histories into a fresh db (it is possible to work around this by copying the db file to get started instead)
  • cvs_import of long CVS histories into a fresh db (essentially the same problem, but without the workaround)
  • mtn annotate [[!comment as of 0.48, annotate has been fast enough for me]]

PerformanceWork is active and ongoing to address these issues. Even for deep histories, common developer operations within a workspace are quite fast: usually the limiting factor is disk seek speed reading workspace files to check for changes.

Further Reference

Manual and Tutorial Sections:

Features and Requirements in other evaluations:

Quick Links:     www.monotone.ca    -     Downloads    -     Documentation    -     Wiki    -     Code Forge    -     Build Status