SlideShare a Scribd company logo
Gnocchi Numbers
(more) Benchmarking 2.1.x
Test Configuration
- 4 physical hosts
- CentOS 7.2.1511
- 24 physical cores (hyperthreaded), 256 GB memory
- 25 - 1TB disks, 10K RPM
- 1Gb network
- PostgreSQL 9.2.15 (single node)
- Shared with ceph and compute service
Default everything, except 300 connections vs 100(default)
- Ceph 10.2.2 (4 nodes, 1 monitoring, 3 OSD)
- 30 OSDs (1 TB disk), Journals share SSD, 2 replica, 2048 placement groups
- OSD nodes shared with (idle) compute service
- Gnocchi Master (~ June 3rd, 2016)
Host Configuration
- Host1
- OpenStack Controller Node (Ceilometer, Heat, Nova-stuff, Neutron, Cinder, Glance, Horizon)
- Ceph Monitoring service
- Gnocchi API
- Host2
- OpenStack Compute Node
- Ceph OSD node (10 OSDs)
- Host3
- Ceph OSD node (10 OSDs)
- Host4
- OpenStack Compute Node
- Ceph OSD node (10 OSDs)
- PostgreSQL
Testing Methodology
- Start 3 metricd services - 24 workers each
- POST 1000 generic resources spread across 20 workers, 20 metrics each.
- POST Every 10 minutes
- 1 minute granularity, 10 points/metric/request
- 20 000 metrics, medium archive policy
- 1 min for a day, 1 hr for a week, 1 day for a year, 8 aggregates each
Batch1 metricd details
- POST time (50 posts) - avg=10.8s (-65.5%), stdev=0.79
- Injection time - ~ 144 seconds
- Stats
- Per metric injection - avg=0.462s, min=0.235s, max=1.693s, stdev=0.174
- Average IO time - ~66% of _add_measures()
- Overhead - ~10.8% (~9.89% minus all IO once metric locked)
- Comparison to 20OSD w/ shared journal
- POST - 65.5% quicker
- Injection time - 27% quicker
Batch2 metricd details
- POST time (50 posts) - avg=30.6s, stdev=2.72
- Injection time - ~ 400 seconds
- Stats
- Per metric injection - avg=1.316s, min=0.286s, max=5.758s, stdev=0.844
- Average IO time - ~76.0% of _add_measures()
- Overhead - ~9.23% (~6.78% minus all IO once metric locked)
- Comparison to 20OSD w/ shared journal
- POST - 70% quicker
- Injection time - 28.4% quicker
Batch3 metricd details
- POST time (50 posts) - avg=30.2s, stdev=2.87
- Injection time - ~ 408 seconds
- Stats
- Per metric injection - avg=1.33s, min=0.285s, max=5.647s, stdev=0.824
- Average IO time - ~74.9% of _add_measures()
- Overhead - ~9.58% (~6.95% minus all IO once metric locked)
- Comparison to 20OSD w/ shared journal
- POST - 65.4% quicker
- Injection time - 26% quicker
Metric Processing Rate
Job Distribution
Gnocchi Contention
Estimated 37%
wasted on no op*
Estimated 13%
wasted on no op*
* based on assumption
each contention
wastes 1.6ms
Ceph Profile
Ceph Profile
- Read speed
- avg = 6727 kB/s (+32%)
- max = 28293 kB/s (+47%)
- stdev = 4185 (+69%)
- Write speed
- avg = 1565 kB/s (+36%)
- max = 8655 kB/s (+94%)
- stdev = 1262 (+65%)
- Operations
- avg = 8349 op/s (+36%)
- max = 31791 op/s (+62%)
- stdev = 5289 (+77%)
Difference compared to 20OSD, non-SSD deployment
Tuning Ceph
Hardware Configurations
- Ceph 10.2.2
- 30 OSDs (1 TB disk), Journals share SSD, 2 replica, 2048 placement groups
- OSD nodes shared with (idle) compute service
- Network File System
- 8 - 1TB 10K HDD, RAID0
- Separate host from metricd services
Ceph Hardware - Processing Rate
Ceph Hardware - Processing Rate
Ceph Test Configurations
‘Default’ (30OSD+JOURNAL SSD)
[osd]
osd journal size = 10000
osd pool default size = 3
osd pool default min size = 2
osd crush chooseleaf type = 1
8 Threads
[osd]
osd journal size = 10000
osd pool default size = 3
osd pool default min size = 2
osd crush chooseleaf type = 1
osd op threads = 8
filestore op threads = 8
journal max write entries = 50000
journal queue max ops = 50000
24 Threads
[osd]
osd journal size = 10000
osd pool default size = 3
osd pool default min size = 2
osd crush chooseleaf type = 1
osd op threads = 24
filestore op threads = 24
journal max write entries = 50000
journal queue max ops = 50000
36 Threads
[osd]
osd journal size = 10000
osd pool default size = 3
osd pool default min size = 2
osd crush chooseleaf type = 1
osd op threads = 36
filestore op threads = 36
journal max write entries = 50000
journal queue max ops = 50000
36 + fs queue
[osd]
osd journal size = 10000
osd pool default size = 3
osd pool default min size = 2
osd crush chooseleaf type = 1
osd op threads = 36
filestore op threads = 36
filestore queue max ops = 50000
filestore queue committing max ops = 50000
journal max write entries = 50000
journal queue max ops = 50000
Ceph Configurations - Metrics processed per 5s
Ceph Configurations - Processing Rate
Tuned vs Untuned
- Comparing Batch3 (36 + fs queue) vs Batch3 (default)
- POST time (50 posts) - avg=21.1s (-30.1%), stdev=0.904 (-68.5%)
- Injection time - ~ 199 seconds (-51.2%)
- Stats
- Per metric injection
- avg=0.596s(-55.2%)
- stdev=0.477(-42.1%)
- min=0.286s(+0%)
- max=9.12s (+38%)
- Overhead - ~15.2% (~14.1% minus all IO once metric locked)
- Consistent write performance between batches!
Ceph Profile
- Read speed
- avg = 10978 kB/s (+63%)
- max = 27104 kB/s (-4%)
- stdev = 5230 (+25%)
- Write speed
- avg = 2521 kB/s (+61%)
- max = 5304 kB/s (-39%)
- stdev = 994(-21%)
- Operations
- avg = 13534 op/s (+62%)
- max = 30398 op/s (-4%)
- stdev = 5739(+9%)
Difference compared to default 30OSD+SSD journal configuration using standard Ceph configurations
Gnocchi Design Tuning
Optimisation Opportunities
- Gnocchi has a lot of IO
- By default, over 25 reads and 25 writes for every single metric
- Serialising and deserialising each time
- Degradation as number of points grows (up to object split size)
- Needs to read in full object with related points, update, and write full object for each aggregate
even if updating one point out of thousands.
Current Serialisation
Simpler serialisation merged into master and
backported to 2.1
Effects of IO
Serialisation Format
Existing
{‘values’:{<timestamp>: float,
<timestamp>: float,
...
<timestamp>: float}}
- ~18B/point or ~10B/point (compressed)
- Not appendable
- Msgpack serialisation, super fast
Proposed
delimiter+float+delimiter+float+.
..+delimiter+float
- 9B/point (or much if compressed)
- Appendable
- Delimiter can be used to describe subsequent
bytes
- Timestamp computed by offset
- eg. Position 9 to 17 is data x seconds from
start
- Zero padding required if first point not start of split
- Handles compression much better
Comparing Serialisation Formats
Existing deserialisation needs to be sorted. It
is more comparable if factored in.
Looking to 3.x
- Testing larger datasets (a few thousand points/metric)
- Benchmarking new proposed format
- Study effects of alternative storage solutions
- Try to add in support for intermediary storage in memory

More Related Content

PDF
Gnocchi Profiling 2.1.x
PDF
Gnocchi v4 (preview)
PDF
Gnocchi v3
PDF
Gnocchi v3 brownbag
PDF
Gnocchi v4 - past and present
PDF
Anatomy of an action
PPTX
HBaseCon 2013: OpenTSDB at Box
PDF
OpenTSDB 2.0
Gnocchi Profiling 2.1.x
Gnocchi v4 (preview)
Gnocchi v3
Gnocchi v3 brownbag
Gnocchi v4 - past and present
Anatomy of an action
HBaseCon 2013: OpenTSDB at Box
OpenTSDB 2.0

What's hot (20)

PDF
OpenTSDB for monitoring @ Criteo
PDF
Building a Fast, Resilient Time Series Store with Cassandra (Alex Petrov, Dat...
PPTX
Cassandra Backups and Restorations Using Ansible (Joshua Wickman, Knewton) | ...
PPTX
Update on OpenTSDB and AsyncHBase
PDF
"Metrics: Where and How", Vsevolod Polyakov
PDF
Thanos - Prometheus on Scale
PDF
Мониторинг. Опять, rootconf 2016
PPTX
Metrics: where and how
PDF
Neo4j after 1 year in production
PPTX
1404 app dev series - session 8 - monitoring & performance tuning
PPTX
CloudClustering: Toward a scalable machine learning toolkit for Windows Azure
PDF
InfluxDB IOx Tech Talks: The Impossible Dream: Easy-to-Use, Super Fast Softw...
PDF
MesosCon 2018
PDF
Путь мониторинга 2.0 всё стало другим / Всеволод Поляков (Grammarly)
PDF
Advanced Apache Cassandra Operations with JMX
PDF
Technology Updates of PG-Strom at Aug-2014 (PGUnconf@Tokyo)
PDF
Linux Cluster and Distributed Resource Manager
PPTX
Всеволод Поляков (DevOps Team Lead в Grammarly)
PPTX
Partner Webinar: MongoDB and Softlayer on Bare Metal: Stability, Performance,...
PPTX
Weather of the Century: Design and Performance
OpenTSDB for monitoring @ Criteo
Building a Fast, Resilient Time Series Store with Cassandra (Alex Petrov, Dat...
Cassandra Backups and Restorations Using Ansible (Joshua Wickman, Knewton) | ...
Update on OpenTSDB and AsyncHBase
"Metrics: Where and How", Vsevolod Polyakov
Thanos - Prometheus on Scale
Мониторинг. Опять, rootconf 2016
Metrics: where and how
Neo4j after 1 year in production
1404 app dev series - session 8 - monitoring & performance tuning
CloudClustering: Toward a scalable machine learning toolkit for Windows Azure
InfluxDB IOx Tech Talks: The Impossible Dream: Easy-to-Use, Super Fast Softw...
MesosCon 2018
Путь мониторинга 2.0 всё стало другим / Всеволод Поляков (Grammarly)
Advanced Apache Cassandra Operations with JMX
Technology Updates of PG-Strom at Aug-2014 (PGUnconf@Tokyo)
Linux Cluster and Distributed Resource Manager
Всеволод Поляков (DevOps Team Lead в Grammarly)
Partner Webinar: MongoDB and Softlayer on Bare Metal: Stability, Performance,...
Weather of the Century: Design and Performance
Ad

Similar to Gnocchi Profiling v2 (20)

PPTX
Build an affordable Cloud Stroage
PDF
orca_fosdem_FINAL
PDF
What's New in PostgreSQL 17? - Mydbops MyWebinar Edition 35
PDF
Apache Cassandra at Macys
PPTX
Exploring Parallel Merging In GPU Based Systems Using CUDA C.
PDF
Replication MongoDB Days 2013
PDF
Best Practices with PostgreSQL on Solaris
PDF
Analytics at Speed: Introduction to ClickHouse and Common Use Cases. By Mikha...
PDF
Advanced Cassandra Operations via JMX (Nate McCall, The Last Pickle) | C* Sum...
PDF
System Capa Planning_DBA oracle edu
PDF
Build an High-Performance and High-Durable Block Storage Service Based on Ceph
PPTX
Tuning Elasticsearch Indexing Pipeline for Logs
PDF
DUG'20: 12 - DAOS in Lenovo’s HPC Innovation Center
PPTX
Cloud Storage Introduction ( CEPH )
PPTX
Monitoring MySQL with OpenTSDB
PDF
10 Key MongoDB Performance Indicators
PPTX
Geneve
PDF
Summit demystifying systemd1
PDF
TritonSort: A Balanced Large-Scale Sorting System (NSDI 2011)
PDF
Csw2016 wheeler barksdale-gruskovnjak-execute_mypacket
Build an affordable Cloud Stroage
orca_fosdem_FINAL
What's New in PostgreSQL 17? - Mydbops MyWebinar Edition 35
Apache Cassandra at Macys
Exploring Parallel Merging In GPU Based Systems Using CUDA C.
Replication MongoDB Days 2013
Best Practices with PostgreSQL on Solaris
Analytics at Speed: Introduction to ClickHouse and Common Use Cases. By Mikha...
Advanced Cassandra Operations via JMX (Nate McCall, The Last Pickle) | C* Sum...
System Capa Planning_DBA oracle edu
Build an High-Performance and High-Durable Block Storage Service Based on Ceph
Tuning Elasticsearch Indexing Pipeline for Logs
DUG'20: 12 - DAOS in Lenovo’s HPC Innovation Center
Cloud Storage Introduction ( CEPH )
Monitoring MySQL with OpenTSDB
10 Key MongoDB Performance Indicators
Geneve
Summit demystifying systemd1
TritonSort: A Balanced Large-Scale Sorting System (NSDI 2011)
Csw2016 wheeler barksdale-gruskovnjak-execute_mypacket
Ad

Recently uploaded (20)

PPTX
MYSQL Presentation for SQL database connectivity
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PPT
Teaching material agriculture food technology
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
NewMind AI Monthly Chronicles - July 2025
PDF
cuic standard and advanced reporting.pdf
PDF
Encapsulation theory and applications.pdf
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PPTX
A Presentation on Artificial Intelligence
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
MYSQL Presentation for SQL database connectivity
20250228 LYD VKU AI Blended-Learning.pptx
Teaching material agriculture food technology
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
NewMind AI Monthly Chronicles - July 2025
cuic standard and advanced reporting.pdf
Encapsulation theory and applications.pdf
Diabetes mellitus diagnosis method based random forest with bat algorithm
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
A Presentation on Artificial Intelligence
CIFDAQ's Market Insight: SEC Turns Pro Crypto
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Agricultural_Statistics_at_a_Glance_2022_0.pdf
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Unlocking AI with Model Context Protocol (MCP)
Chapter 3 Spatial Domain Image Processing.pdf
Advanced methodologies resolving dimensionality complications for autism neur...

Gnocchi Profiling v2

  • 2. Test Configuration - 4 physical hosts - CentOS 7.2.1511 - 24 physical cores (hyperthreaded), 256 GB memory - 25 - 1TB disks, 10K RPM - 1Gb network - PostgreSQL 9.2.15 (single node) - Shared with ceph and compute service Default everything, except 300 connections vs 100(default) - Ceph 10.2.2 (4 nodes, 1 monitoring, 3 OSD) - 30 OSDs (1 TB disk), Journals share SSD, 2 replica, 2048 placement groups - OSD nodes shared with (idle) compute service - Gnocchi Master (~ June 3rd, 2016)
  • 3. Host Configuration - Host1 - OpenStack Controller Node (Ceilometer, Heat, Nova-stuff, Neutron, Cinder, Glance, Horizon) - Ceph Monitoring service - Gnocchi API - Host2 - OpenStack Compute Node - Ceph OSD node (10 OSDs) - Host3 - Ceph OSD node (10 OSDs) - Host4 - OpenStack Compute Node - Ceph OSD node (10 OSDs) - PostgreSQL
  • 4. Testing Methodology - Start 3 metricd services - 24 workers each - POST 1000 generic resources spread across 20 workers, 20 metrics each. - POST Every 10 minutes - 1 minute granularity, 10 points/metric/request - 20 000 metrics, medium archive policy - 1 min for a day, 1 hr for a week, 1 day for a year, 8 aggregates each
  • 5. Batch1 metricd details - POST time (50 posts) - avg=10.8s (-65.5%), stdev=0.79 - Injection time - ~ 144 seconds - Stats - Per metric injection - avg=0.462s, min=0.235s, max=1.693s, stdev=0.174 - Average IO time - ~66% of _add_measures() - Overhead - ~10.8% (~9.89% minus all IO once metric locked) - Comparison to 20OSD w/ shared journal - POST - 65.5% quicker - Injection time - 27% quicker
  • 6. Batch2 metricd details - POST time (50 posts) - avg=30.6s, stdev=2.72 - Injection time - ~ 400 seconds - Stats - Per metric injection - avg=1.316s, min=0.286s, max=5.758s, stdev=0.844 - Average IO time - ~76.0% of _add_measures() - Overhead - ~9.23% (~6.78% minus all IO once metric locked) - Comparison to 20OSD w/ shared journal - POST - 70% quicker - Injection time - 28.4% quicker
  • 7. Batch3 metricd details - POST time (50 posts) - avg=30.2s, stdev=2.87 - Injection time - ~ 408 seconds - Stats - Per metric injection - avg=1.33s, min=0.285s, max=5.647s, stdev=0.824 - Average IO time - ~74.9% of _add_measures() - Overhead - ~9.58% (~6.95% minus all IO once metric locked) - Comparison to 20OSD w/ shared journal - POST - 65.4% quicker - Injection time - 26% quicker
  • 10. Gnocchi Contention Estimated 37% wasted on no op* Estimated 13% wasted on no op* * based on assumption each contention wastes 1.6ms
  • 12. Ceph Profile - Read speed - avg = 6727 kB/s (+32%) - max = 28293 kB/s (+47%) - stdev = 4185 (+69%) - Write speed - avg = 1565 kB/s (+36%) - max = 8655 kB/s (+94%) - stdev = 1262 (+65%) - Operations - avg = 8349 op/s (+36%) - max = 31791 op/s (+62%) - stdev = 5289 (+77%) Difference compared to 20OSD, non-SSD deployment
  • 14. Hardware Configurations - Ceph 10.2.2 - 30 OSDs (1 TB disk), Journals share SSD, 2 replica, 2048 placement groups - OSD nodes shared with (idle) compute service - Network File System - 8 - 1TB 10K HDD, RAID0 - Separate host from metricd services
  • 15. Ceph Hardware - Processing Rate
  • 16. Ceph Hardware - Processing Rate
  • 17. Ceph Test Configurations ‘Default’ (30OSD+JOURNAL SSD) [osd] osd journal size = 10000 osd pool default size = 3 osd pool default min size = 2 osd crush chooseleaf type = 1 8 Threads [osd] osd journal size = 10000 osd pool default size = 3 osd pool default min size = 2 osd crush chooseleaf type = 1 osd op threads = 8 filestore op threads = 8 journal max write entries = 50000 journal queue max ops = 50000 24 Threads [osd] osd journal size = 10000 osd pool default size = 3 osd pool default min size = 2 osd crush chooseleaf type = 1 osd op threads = 24 filestore op threads = 24 journal max write entries = 50000 journal queue max ops = 50000 36 Threads [osd] osd journal size = 10000 osd pool default size = 3 osd pool default min size = 2 osd crush chooseleaf type = 1 osd op threads = 36 filestore op threads = 36 journal max write entries = 50000 journal queue max ops = 50000 36 + fs queue [osd] osd journal size = 10000 osd pool default size = 3 osd pool default min size = 2 osd crush chooseleaf type = 1 osd op threads = 36 filestore op threads = 36 filestore queue max ops = 50000 filestore queue committing max ops = 50000 journal max write entries = 50000 journal queue max ops = 50000
  • 18. Ceph Configurations - Metrics processed per 5s
  • 19. Ceph Configurations - Processing Rate
  • 20. Tuned vs Untuned - Comparing Batch3 (36 + fs queue) vs Batch3 (default) - POST time (50 posts) - avg=21.1s (-30.1%), stdev=0.904 (-68.5%) - Injection time - ~ 199 seconds (-51.2%) - Stats - Per metric injection - avg=0.596s(-55.2%) - stdev=0.477(-42.1%) - min=0.286s(+0%) - max=9.12s (+38%) - Overhead - ~15.2% (~14.1% minus all IO once metric locked) - Consistent write performance between batches!
  • 21. Ceph Profile - Read speed - avg = 10978 kB/s (+63%) - max = 27104 kB/s (-4%) - stdev = 5230 (+25%) - Write speed - avg = 2521 kB/s (+61%) - max = 5304 kB/s (-39%) - stdev = 994(-21%) - Operations - avg = 13534 op/s (+62%) - max = 30398 op/s (-4%) - stdev = 5739(+9%) Difference compared to default 30OSD+SSD journal configuration using standard Ceph configurations
  • 23. Optimisation Opportunities - Gnocchi has a lot of IO - By default, over 25 reads and 25 writes for every single metric - Serialising and deserialising each time - Degradation as number of points grows (up to object split size) - Needs to read in full object with related points, update, and write full object for each aggregate even if updating one point out of thousands.
  • 24. Current Serialisation Simpler serialisation merged into master and backported to 2.1
  • 26. Serialisation Format Existing {‘values’:{<timestamp>: float, <timestamp>: float, ... <timestamp>: float}} - ~18B/point or ~10B/point (compressed) - Not appendable - Msgpack serialisation, super fast Proposed delimiter+float+delimiter+float+. ..+delimiter+float - 9B/point (or much if compressed) - Appendable - Delimiter can be used to describe subsequent bytes - Timestamp computed by offset - eg. Position 9 to 17 is data x seconds from start - Zero padding required if first point not start of split - Handles compression much better
  • 27. Comparing Serialisation Formats Existing deserialisation needs to be sorted. It is more comparable if factored in.
  • 28. Looking to 3.x - Testing larger datasets (a few thousand points/metric) - Benchmarking new proposed format - Study effects of alternative storage solutions - Try to add in support for intermediary storage in memory