All Collections
On Premise Engine
Configuration
On Premise Engine - Virtual Machine Sizing
On Premise Engine - Virtual Machine Sizing
Updated this week

Use this to figure out how big your virtual machine should be for the On Premise Engine.

Emails Per CPU (110K per day)

A 2 core machine (no hyperthreading) can ingest roughly 220K emails per day or 110K emails per CPU. The exact value depends on the speed of your CPU.

The 95th percentile mailbox receives an average of 250 emails per day.

This means if you max out a 2 core machine for daily processing the On Premise Engine could theoretically handle around 800 mailboxes. But that wouldn't be ideal since there are often mailboxes being added with history that needs to be processed and there are other activities happen. Some mailboxes might start to get behind on processing.

Ongoing Daily Scans

We suggest no more than 100 mailboxes per CPU or 200 mailboxes for a 2 CPU machine.

History Scans

For a history scan where you are going back multiple days you can improve the runtime by allocated more CPU cores. The rough estimation is below.

Mailboxes X 250 emails per day X Days of history = Total Emails

Total Emails / CPU Cores / 110K = Days to Process History

Example History Pull

  • 4 core machine

  • 100 mailboxes

  • 365 days of history

100 mailboxes X 250 emails per day X 365 days of history = 9.1M emails

9.1M emails / 4 CPU Cores / 110K = 20 days to process history

RAM Requirements

You should allocate at least 2 GB of RAM per CPU.

Cores, not logical processors

Don't count logical processors as part of the core count.

For example, if you have 8 cores and 16 logical processors then only 8 are "real" cores. The other 8 are hyperthreading cores. You'll never get your performance above 50% when looking at CPU usage based on logical processors. If you're at 50% you're using 100% of your cores.

The important part is that the two logical processors share the same Execution engine, meaning that the units that make up the core are not duplicated. Once, for example, the arithmetic unit is used by one thread, it cannot be used by the other thread. This prevents total parallelism, so does not allow two threads to execute in parallel instructions of the same type - one has to wait for the other to finish.

has_hyperthreading_cores = true

If your server has hyperthreading on the cores then you need to set has_hyperthreading_cores = true in the appsettings.json file or environment variables. Otherwise SigParser will oversubscribe cores which will make performance worse.

Did this answer your question?