From: Hannes Laimer <h.laimer@proxmox.com>
To: Christian Ebner <c.ebner@proxmox.com>, pbs-devel@lists.proxmox.com
Subject: Re: [PATCH proxmox{,-backup} v5 00/33] partially fix #6563: add s3 request and traffic counter statistics
Date: Mon, 16 Mar 2026 15:04:46 +0100 [thread overview]
Message-ID: <f1535c0f-0a16-42cd-b4a6-d10a49553d61@proxmox.com> (raw)
In-Reply-To: <20260311130823.724888-1-c.ebner@proxmox.com>
This is a really well put together series, and with the things I've
mentioned this looks very good to me! I did do some testing, and
everything worked.
I am not super sure if having a "hard" limit makes sense, so no new
operations after that?
On 2026-03-11 14:08, Christian Ebner wrote:
> This patch series implements request and traffic counters for the s3
> client, being shared as atomic counters via shared memory and mmapping
> across all s3-client instances.
>
> The shared counters are instantiated on demand for individual
> datastores with s3 backend on s3 client instantiation and stored as
> part of the datastore implementation by loading the mmapped file on
> datastore instantiation, being cached for further access.
>
> Further, counters are being loaded during rrd metrics collection and
> exposed as charts in the datastore summary, including the total
> request counts per method, the total upload and download traffic as
> well as the averaged upload and download rate.
>
> Usage statistics, are not included in this series an will be tackled
> as followup series.
>
> Link to the bugtracker issue:
> https://bugzilla.proxmox.com/show_bug.cgi?id=6563
>
> Changes since version 4:
> - Rebase on top of patch series https://lore.proxmox.com/pbs-devel/20260311095906.202410-1-c.ebner@proxmox.com/T/
> as requested by Fabian in order to facilitate review flow.
>
> Changes since version 3:
> - Extend previous implementation by threshold values for counters and
> mechanism to send notifications once thresholds are exceeded
>
> Changes since version 2:
> - Introduce msync flushing mechanism to periodically persist counters
> state to mmap backing file.
>
> Changes since version 1 (thanks @Robert for feedback):
> - Keep tmpfs check in shmem mapping for pre-existing code, add
> dedicated methods to create mmapped files in persistent locations.
> - Reorder and align atomic counters to 32-byte (half default cache
> line size) to reduce false sharing.
> - Rework request counter init logic, avoid unsafe code and undefined
> behaviour.
> - Rework page size calculation based on new counter alignment.
> - Avoid the need to open and mmap counter file for each rrd data
> collection, keep the per-datastores filehandle cached instead.
>
>
> proxmox:
>
> Christian Ebner (13):
> proxmox-sys: expose msync to flush mmapped contents to filesystem
> shared-memory: add method without tmpfs check for mmap file location
> shared-memory: expose msync to flush in-memory contents to filesystem
> s3-client: add persistent shared request counters for client
> s3-client: add counters for upload/download traffic
> s3-client: account for upload traffic on successful request sending
> s3-client: account for downloaded bytes in incoming response body
> s3-client: request counters: periodically persist counters to file
> s3-client: sync flush request counters on client instance drop
> pbs-api-types: define api type for s3 request statistics
> s3-client: api-types: define request counter thresholds
> pbs-api-types: add notification thresholds to datastore config
> s3-client: implement request counter threshold and exceeding callback
>
> pbs-api-types/src/datastore.rs | 39 ++
> proxmox-s3-client/Cargo.toml | 6 +
> proxmox-s3-client/debian/control | 3 +
> proxmox-s3-client/examples/s3_client.rs | 1 +
> proxmox-s3-client/src/api_types.rs | 59 ++
> proxmox-s3-client/src/client.rs | 96 +++-
> proxmox-s3-client/src/lib.rs | 7 +-
> proxmox-s3-client/src/response_reader.rs | 75 ++-
> .../src/shared_request_counters.rs | 525 ++++++++++++++++++
> proxmox-shared-memory/src/lib.rs | 48 +-
> proxmox-sys/src/mmap.rs | 12 +
> 11 files changed, 852 insertions(+), 19 deletions(-)
> create mode 100644 proxmox-s3-client/src/shared_request_counters.rs
>
>
> proxmox-backup:
>
> Christian Ebner (20):
> metrics: split common module imports into individual use statements
> datastore: collect request statistics for s3 backed datastores
> datastore: expose request counters for s3 backed datastores
> api: s3: add endpoint to reset s3 request counters
> bin: s3: expose request counter reset method as cli command
> datastore: add helper method to get datastore backend type
> ui: improve variable name indirectly fixing typo
> ui: datastore summary: move store to be part of summary panel
> ui: expose s3 request counter statistics in the datastore summary
> metrics: collect s3 datastore statistics as rrd metrics
> api: admin: expose s3 statistics in datastore rrd data
> partially fix #6563: ui: expose s3 rrd charts in datastore summary
> datastore: refactor shared request counter loading into helper
> api: config: update notification thresholds for config and counters
> ui: utils: add helper to render notification threshold property string
> ui: add notification thresholds edit window
> notifications: template data: fix typos in docstrings
> notification: define templates and template data for thresholds
> datastore: add thresholds notification callback on datastore lookup
> api/ui: notifications: add 'thresholds' as notification type value
>
> debian/proxmox-backup-server.install | 2 +
> pbs-datastore/src/datastore.rs | 158 ++++++--
> pbs-datastore/src/lib.rs | 3 +-
> pbs-datastore/src/snapshot_reader.rs | 1 +
> src/api2/admin/datastore.rs | 23 +-
> src/api2/admin/s3.rs | 86 ++++-
> src/api2/config/datastore.rs | 33 +-
> src/api2/config/notifications/mod.rs | 1 +
> src/api2/config/s3.rs | 9 +-
> src/bin/proxmox_backup_manager/s3.rs | 33 ++
> src/server/metric_collection/metric_server.rs | 8 +-
> src/server/metric_collection/mod.rs | 108 +++++-
> src/server/metric_collection/pull_metrics.rs | 18 +-
> src/server/metric_collection/rrd.rs | 34 +-
> src/server/notifications/mod.rs | 39 +-
> src/server/notifications/template_data.rs | 38 +-
> src/tools/mod.rs | 9 +-
> templates/Makefile | 2 +
> .../default/thresholds-exceeded-body.txt.hbs | 9 +
> .../thresholds-exceeded-subject.txt.hbs | 1 +
> www/Makefile | 1 +
> www/Utils.js | 10 +
> www/datastore/OptionView.js | 9 +
> www/datastore/Summary.js | 341 ++++++++++++------
> www/window/NotificationThresholds.js | 113 ++++++
> 25 files changed, 907 insertions(+), 182 deletions(-)
> create mode 100644 templates/default/thresholds-exceeded-body.txt.hbs
> create mode 100644 templates/default/thresholds-exceeded-subject.txt.hbs
> create mode 100644 www/window/NotificationThresholds.js
>
>
> Summary over all repositories:
> 36 files changed, 1759 insertions(+), 201 deletions(-)
>
prev parent reply other threads:[~2026-03-16 14:04 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-11 13:07 Christian Ebner
2026-03-11 13:07 ` [PATCH proxmox v5 01/13] proxmox-sys: expose msync to flush mmapped contents to filesystem Christian Ebner
2026-03-12 11:20 ` applied: " Fabian Grünbichler
2026-03-11 13:07 ` [PATCH proxmox v5 02/13] shared-memory: add method without tmpfs check for mmap file location Christian Ebner
2026-03-12 11:20 ` applied: " Fabian Grünbichler
2026-03-11 13:07 ` [PATCH proxmox v5 03/13] shared-memory: expose msync to flush in-memory contents to filesystem Christian Ebner
2026-03-12 11:20 ` applied: " Fabian Grünbichler
2026-03-11 13:07 ` [PATCH proxmox v5 04/13] s3-client: add persistent shared request counters for client Christian Ebner
2026-03-11 13:07 ` [PATCH proxmox v5 05/13] s3-client: add counters for upload/download traffic Christian Ebner
2026-03-12 14:28 ` Hannes Laimer
2026-03-12 14:40 ` Christian Ebner
2026-03-11 13:07 ` [PATCH proxmox v5 06/13] s3-client: account for upload traffic on successful request sending Christian Ebner
2026-03-11 13:07 ` [PATCH proxmox v5 07/13] s3-client: account for downloaded bytes in incoming response body Christian Ebner
2026-03-12 14:14 ` Hannes Laimer
2026-03-12 14:42 ` Christian Ebner
2026-03-11 13:07 ` [PATCH proxmox v5 08/13] s3-client: request counters: periodically persist counters to file Christian Ebner
2026-03-13 14:16 ` Hannes Laimer
2026-03-11 13:07 ` [PATCH proxmox v5 09/13] s3-client: sync flush request counters on client instance drop Christian Ebner
2026-03-11 13:08 ` [PATCH proxmox v5 10/13] pbs-api-types: define api type for s3 request statistics Christian Ebner
2026-03-11 13:08 ` [PATCH proxmox v5 11/13] s3-client: api-types: define request counter thresholds Christian Ebner
2026-03-11 13:08 ` [PATCH proxmox v5 12/13] pbs-api-types: add notification thresholds to datastore config Christian Ebner
2026-03-11 13:08 ` [PATCH proxmox v5 13/13] s3-client: implement request counter threshold and exceeding callback Christian Ebner
2026-03-12 14:11 ` Hannes Laimer
2026-03-13 14:27 ` Hannes Laimer
2026-03-13 14:56 ` Christian Ebner
2026-03-16 10:36 ` Hannes Laimer
2026-03-16 10:38 ` Christian Ebner
2026-03-11 13:08 ` [PATCH proxmox-backup v5 01/20] metrics: split common module imports into individual use statements Christian Ebner
2026-03-11 13:08 ` [PATCH proxmox-backup v5 02/20] datastore: collect request statistics for s3 backed datastores Christian Ebner
2026-03-11 13:08 ` [PATCH proxmox-backup v5 03/20] datastore: expose request counters " Christian Ebner
2026-03-11 13:08 ` [PATCH proxmox-backup v5 04/20] api: s3: add endpoint to reset s3 request counters Christian Ebner
2026-03-12 14:08 ` Hannes Laimer
2026-03-12 14:43 ` Christian Ebner
2026-03-11 13:08 ` [PATCH proxmox-backup v5 05/20] bin: s3: expose request counter reset method as cli command Christian Ebner
2026-03-11 13:08 ` [PATCH proxmox-backup v5 06/20] datastore: add helper method to get datastore backend type Christian Ebner
2026-03-11 13:08 ` [PATCH proxmox-backup v5 07/20] ui: improve variable name indirectly fixing typo Christian Ebner
2026-03-11 13:08 ` [PATCH proxmox-backup v5 08/20] ui: datastore summary: move store to be part of summary panel Christian Ebner
2026-03-11 13:08 ` [PATCH proxmox-backup v5 09/20] ui: expose s3 request counter statistics in the datastore summary Christian Ebner
2026-03-16 14:02 ` Hannes Laimer
2026-03-11 13:08 ` [PATCH proxmox-backup v5 10/20] metrics: collect s3 datastore statistics as rrd metrics Christian Ebner
2026-03-11 13:08 ` [PATCH proxmox-backup v5 11/20] api: admin: expose s3 statistics in datastore rrd data Christian Ebner
2026-03-11 13:08 ` [PATCH proxmox-backup v5 12/20] partially fix #6563: ui: expose s3 rrd charts in datastore summary Christian Ebner
2026-03-13 14:45 ` Hannes Laimer
2026-03-11 13:08 ` [PATCH proxmox-backup v5 13/20] datastore: refactor shared request counter loading into helper Christian Ebner
2026-03-11 13:08 ` [PATCH proxmox-backup v5 14/20] api: config: update notification thresholds for config and counters Christian Ebner
2026-03-11 13:08 ` [PATCH proxmox-backup v5 15/20] ui: utils: add helper to render notification threshold property string Christian Ebner
2026-03-11 13:08 ` [PATCH proxmox-backup v5 16/20] ui: add notification thresholds edit window Christian Ebner
2026-03-11 13:08 ` [PATCH proxmox-backup v5 17/20] notifications: template data: fix typos in docstrings Christian Ebner
2026-03-11 13:08 ` [PATCH proxmox-backup v5 18/20] notification: define templates and template data for thresholds Christian Ebner
2026-03-11 13:08 ` [PATCH proxmox-backup v5 19/20] datastore: add thresholds notification callback on datastore lookup Christian Ebner
2026-03-11 13:08 ` [PATCH proxmox-backup v5 20/20] api/ui: notifications: add 'thresholds' as notification type value Christian Ebner
2026-03-16 14:04 ` Hannes Laimer [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=f1535c0f-0a16-42cd-b4a6-d10a49553d61@proxmox.com \
--to=h.laimer@proxmox.com \
--cc=c.ebner@proxmox.com \
--cc=pbs-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox