Check-in-check-out Test Report (Morning Glory)

20-users testsAvgMax

mod-users21%21%

mod-pubsub5%5%

okapi14%14%

mod-circulation4%4%

mod-circulation-storage5%5%

mod-inventory7%7%

mod-inventory-storage7%7%

mod-patron-blocks1%1%

mod-feesfines17%17%

mod-authtoken31%20-users testsAvgMax


mod-users21%21%


mod-pubsub5%5%


okapi14%14%


mod-circulation4%4%


mod-circulation-storage5%5%


mod-inventory7%7%


mod-inventory-storage7%7%


mod-patron-blocks1%1%


mod-feesfines17%17%


mod-authtoken31%78%














Overview

This is a report for a series of Check-in-check-out test runs against the Lotus release. 

Back End:

  • mod-circulation-23.0.11
  • mod-circulation-storage-14.1.0
  • mod-inventory-18.2.0
  • mod-inventory-storage-24.0.0
  • mod-authtoken-2.11.0
  • mod-pubsub-2.6.0
  • mod-patron-blocks-1.6.0
  • mod-feesfines-18.0.0
  • okapi-4.14.2

Front End:

  • Item Check-in (folio_checkin-7.1.0)
  • Item Check-out (folio_checkout-8.1.0)

Infrastructure:

  • 79 back-end modules deployed in 153 ECS tasks (changed. In Lotus, it was75 back-end modules deployed in 159 ECS tasks)
  • 3 okapi ECS tasks
  • 10 m6i.2xlarge  EC2 instances (changed. In Lotus it was 9 m5.xlarge)
  • 2 db.r6g.xlarge AWS RDS instance
  • INFO logging level
  • mod-inventory (running tasks -2)
    • 1024 CPU units, 1684 MiB
  • mod-inventory-storage (running tasks -2)
    • 1024 CPU units, 1684MB mem
  • mod-circulation (running tasks -2)
    • 1024 CPU units, 896MB mem
  • mod-circulation-storage (running tasks -2)
    • 1024 CPU units, 1024MB mem
  • mod-pubsub (running tasks -2)
    • 1024 CPU units, 1296 MiB
  • mod-patron-blocks (running tasks -2)
    • 1024 CPU units, 896MB mem
  • mod-feesfines (running tasks -2)
    • 128 CPU units, 896MB mem
  • mod-authtoken (running tasks -2)
    • 128 CPU units, 896MB mem
  • okapi (running tasks -3)
    • 1024 CPU units, 1360 MB mem

High-Level Summary

  • Morning Glory performs much better than Lotus response times for check-ins are mid 400ms, checkout 600ms - 800ms, with little variations between 1 and 50 users
  • Worst-performing APIs are only POST /checkin-by-barcode and POST /checkout-by-barcode.  They have improved since Lotus, now averaging in the mid 200ms even in the 50 users scenario.
    • GET /circulation/loans take 107ms on average in the 20 users and 50 users cases.

Test Runs

Test

Virtual Users

Duration

Load generator size (recommended)Load generator Memory(GiB) (recommended)

1.

1 user30 minst3.medium3

2.

5 users30 minst3.medium3

3.

8 users30 minst3.medium3

4.

20 users30 minst3.medium4
5.50 users30 minst3.large6
9.20 users longevity16 hourst3.xlarge14

Results

Response Times (Average of all tests listed above, in seconds)


Average (seconds)50th %tile (seconds)75th %tile (seconds)95th %tile  (seconds)

Check-inCheck-outCheck-inCheck-outCheck-inCheck-outCheck-inCheck-out
1 user0.5160.7950.490.7580.5180.8390.6291.012
5 users0.4180.6460.4080.6240.4330.6720.4930.766
8 users0.4110.6270.40.6060.4240.6460.4780.741
20 users0.4010.6150.3930.60.4130.6320.4560.704
50 users0.3710.6010.3730.590.3950.6160.4360.682

Response times are consistently good, and over 1 second only for check-out in the 95th percentile. The 50 users test has the best response times.

Comparisons to Last Release

The following tables compare Lotus test results against Morning Glory.

Response Time Comparison

In the tables below, the Delta columns express the differences between Lotus and Morning Glory releases in percentage.

In general, there are no regressions in performance instead, there are improvements in response times across the board.  Check-in times improved by at least 30% and check-out times consistently around 35%.  The 50 users' response times are also very similar to the 5 users. This means that the system is very stable from 1 to 50 users.

Note: LT = Lotus build, MG = Morning Glory build


Average50th percentile 
Check-in MGCheck-in LTDeltaCheck-out MGCheck-out LTDeltaCheck-in MGCheck-in LTDeltaCheck-out MGCheck-out LTDelta
1 user0.5160.7329.32%0.7951.18833.08%0.490.68228.15%0.7581.08430.07%
5 users0.4180.6232.58%0.6460.97633.81%0.4080.58229.90%0.6240.91531.80%
8 users0.4110.61533.17%0.6270.97135.43%0.40.58131.15%0.6060.90432.96%
20 users0.4010.66139.33%0.6151.05241.54%0.3930.6236.61%0.60.96737.95%
50 users0.371--0.601--0.373--0.59--


75th percentile95th percentile 
Check-in MGCheck-in LTDeltaCheck-out MGCheck-out LTDeltaCheck-in MGCheck-in LTDeltaCheck-out MGCheck-in LTDelta
1 user0.5180.77433.07%0.8391.2432.34%0.6291.00037.10%1.0121.81244.15%
5 users0.4330.66234.59%0.6721.0234.12%0.4930.84441.59%0.7661.44046.8%
8 users0.4240.65435.17%0.6461.00635.79%0.4780.83642.82%0.7411.42848.1%
20 users0.4130.70241.17%0.6321.10742.91%0.4560.91850.32%0.7041.59355.8%
50 users0.395--0.616--0.436--0.682--

"Worst" API Comparisons

The APIs identified in the table below were the ones that took over 100ms to execute in Lotus and Kiwi in the 75th percentile.  In Morning Glory these APIs are generally better, especially with 5 or more concurrent users. Impressively the response times of POST-checkout-by-barcode and POST-check-in-by-barcode all are under 300ms! GET inventory/items' response times are well under 60ms now compared to being on the border in the Lotus release.

Average Response Time in milliseconds. 

API

1 user  MG (75th %tile)

1 user LT (75th %tile)

5 users MG (75th %tile)

5 users LT (75th %tile) 8 users MG (75th %tile)8 users LT (75th %tile)20 users MG (75th %tile)20 users LT (75th %tile)50 users MG (75th %tile)50 users LT (75th %tile)
POST checkout-by-barcode296435217330211349204384205-
POST checkin-by-barcode 275386199298199315189348186-
GET circulation/loans152222113161109172107196107-
GET inventory/items609744714067397541-

Longevity Test

Longevity test shows that Check Out response time increased as time went on, but not as aggressive as in Lotus. 


Check InCheck Out
1st Hour0.389s0.633s
8th Hour0.348s0.666s
15th Hour0.364s0.754s

In the response time graph below the Checkout Controller time, which gathers all check-out API response times), increased over the 16-hours window, from just 0.633s to 0.754s. 


The DB CPU utilization percentage did not increase over time and was about10% by the end of the test. There are huge spikes every 30 minutes. These are due to the background tasks that run periodically and as the number of loans grew so did the physical resources needed to process all of them.

The number of connections also rose over time, from 348 to 391 connections. It's unclear what (DB connections) caused the DB to use more CPU resources as the test progressed.


Database's memory dipped a bit but no symptoms of memory leaks. The memory level bounced back up right after the test finished. 

Modules CPU Utilization During Longevity Test

Here is a view of the CPU utilization. A couple of observations:

  • mod-authtoken seems to take up CPU resources in a cyclical way from 28% to 32%. 
  • Okapi uses only about 12%CPU on average compared to Lotus about 450-470% CPU on average.
  • mod-users CPU Utilization grows from 20% up to 36%
  • Other modules used less than 20% CPU on average.
  • mod-circulation-storage spikes periodically due to processing background tasks

Here is the Service CPU Utilization graph with the main involved mods.



There do not appear to be any memory leak issues in Morning Glory. There were no spikes and the processes did not crash. 

The timeline highlighted below encompasses all 5 test runs (1, 5, 8, 20, and 50 users).

Modules CPUs and Memory Utilization

The relevant services overall seem to occupy CPU resources nominally. Only mod-authtoken seems to have the spikes but the processes did not crash.


20-users testsAvgMax
mod-users18%18%
mod-pubsub5%5%
okapi11%11%
mod-circulation4%4%
mod-circulation-storage5%5%
mod-inventory6%6%
mod-inventory-storage7%7%
mod-patron-blocks1%1%
mod-feesfines14%15%
mod-authtoken24%66%
50-users testsAvgMax
mod-users38%39%
mod-pubsub7%7%
okapi25%26%
mod-circulation6%7%
mod-circulation-storage9%10%
mod-inventory7%7%
mod-inventory-storage12%14%
mod-patron-blocks2%2%
mod-feesfines31%33%
mod-authtoken47%116%



Services' memory seems to be stable during the test runs. 


AvgMax
mod-users36%36%
mod-pubsub45%45%
okapi50%50%
mod-circulation80%80%
mod-circulation-storage55%56%
mod-inventory91%91%
mod-inventory-storage71%74%
mod-patron-blocks44%44%
mod-feesfines39%39%
mod-authtoken30%30%

Database and network

The freeable memory metric shows how much memory is being consumed and remaining during a test run.  In the graph below memory usage is pretty good and stable throughout the test runs but generally slightly trending down after each run and bounced back almost to the starting point after each test. This does not mean there is a memory leak because the 16 hours longevity test does not reveal any leaks (see above).



Database connections averages are lower than those in Lotus

Users TestedMorning GloryLotus
1334350
5336375
8346375
20351400
50360-




Miscellaneous