public inbox for pbs-devel@lists.proxmox.com
 help / color / mirror / Atom feed
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(-)
> 





      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
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal