EMG 6.0 can handle approximately 8000 messages (SMS) per second with corresponding delivery reports, in total over 16000 messages per second on modest hardware. If we add logging message data to MySQL then we reach approx 2700 messages per second. In these tests we use SSD disks which we see gives a 50% performance boost as compared to traditional hard drives.
Hardware configuration
Tests were run on a single Dell PowerEdge R320 server (1U).
CPU | 1 x 2.25 GHz Intel Xeon E5-2430 six-core CPU (Intel HT gives 12 threads) |
Memory | 32 GB |
Raid controller | Dell Perc H310 Mini (embedded) |
Disk | Intel 520 SSD |
Operating System | CentOS 6.3 64-bit (RedHat Enterprise Linux 6.3) with kernel version 2.6.32-279.19.1.el6.x86_64 |
Test setup
For the load test a load generator (emgload) and message sinks (emgsink) were used.
A load generator sent messages to EMG via UCP protocol requesting a delivery report (DLR). The messages were then sent out over SMPP to a message sink which also generated the delivery reports with a random delay between 0 and 10 seconds. The delivery reports were sent back to EMG where they were routed to another UCP connector connected to a message sink.
EMG configuration
EMG version used: ENTERPRISE MESSAGING GATEWAY 6.0.0.33510/20130307 (Linux)
The following general keywords are interesting for performance. The value mentioned is used us tests, unless otherwise indicated for each test case.
Keyword | Value | Description |
PERSISTFILES | Enabled | If present, messages will be persisted to disk, otherwise they are stored in-memory only |
IDWINDOW=x | 100 | How many message ids should be obtained from message id database at a time |
LOGLEVEL=level | INFO | General log level |
DLRSSIZE=x | 1000000 | Max number of internal entries for open delivery reports |
MAXTOTALQUEUESIZE=x | 110000 | Max allowed queue size (in total). When exceeded messages will be rejected |
MAXTOTALQUEUESIZE_SOFT=x | 100000 | Max allowed queue size (in total). When exceeded messages will a 0.1 sec delay will be forced |
MySQL configuration
For some tests we also log messages to a MySQL database and use this additional config:
DBPROFILE=emg
ROUTELOGDB
DISABLE_MESSAGEOPTION
DB emg <
HOST=127.0.0.1
PORT=3306
USERNAME=emg
PASSWORD=xxxxxx
DBNAME=emg
TYPE=MYSQL
INSTANCES=4
>
Test runs
Message is 145 characters (text), sender and recipient are “491234” followed by 7 random digits, in total 13 digits.
Each connector is configured for 10 instances (10 simultaneous connections/threads).
The amount of memory (RAM) used by EMG during these runs is approx 1.5 GB.
All results are given in “mps” (messages/SMS per second).
Test run 1
According to the defaults above.
Result: 8000 mps (plus delivery reports)
Test run 2
According to the defaults above and logging to MySQL.
Result: 2700 mps (plus delivery reports)