Performance

How does OpenMLS (and MLS in general) perform in different settings?

Performance measurements are implemented here and can be run with cargo bench --bench group. Make sure that check in the code which scenarios and group sizes are enabled.

OpenMLS Performance Spreadsheet

Real World Scenarios

Stable group

Many private groups follow this model

  • Group is created by user P1
  • P1 invites a set of N other users
  • The group is used for messaging between the N+1 members
  • Every X messages one user in the group sends an update

Somewhat stable group

This can model a company or team wide group where regularly but infrequently users are added and users leave

  • Group is created by user P1
  • P1 invites a set of N other users
  • The group is used for messaging between the members
  • Every X messages one user in the group sends an update
  • Every Y messages Q users are added
  • Every Z messages R users are removed

High fluctuation group

This models public groups where users frequently join and leave. Real-time scenarios such as gather.town are an example of high fluctuation groups. It is the same scenario as the somewhat stable group but with a very small Y, Z.

Extreme Scenarios

In addition to the three scenarios above extreme and corner cases are interesting.

Every second leave is blank

Only every second leave in the tree is non-blank.

Use Case Scenarios

A collection of common use cases/flows.

Long-time offline device

If a device has been offline for a while, it has to process a large number of application and protocol messages.

Tree scenarios

In addition the scenarios above it is interesting to look at the same scenario but with different states of the tree. For example, take the stable group with N members messaging each other. How is the performance different between a message sent right after group setup, i.e. each member only joined the group without other messages being sent, and a tree where every member has sent an update before the message?

Measurements

  • Group creation
    • create group
    • create proposals
    • create welcome
    • apply commit
  • Join group
    • create group from welcome
  • Send application message
  • Receive application message
  • Send update
    • create proposal
    • create commit
    • apply commit
  • Receive update
    • apply commit
  • Add user sender
    • create proposal
    • create welcome
    • apply commit
  • Existing user getting an add
    • apply commit
  • Remove user sender
    • create proposal
    • create commit
    • apply commit
  • Existing user getting a remove
    • apply commit