[
https://issues.apache.org/jira/browse/CASSANDRA-20250?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17924320#comment-17924320
]
Dmitry Konstantinov edited comment on CASSANDRA-20250 at 2/6/25 1:00 AM:
-------------------------------------------------------------------------
A very limited version of the logic as a sketch of the idea:
[https://github.com/apache/cassandra/compare/trunk...netudima:cassandra:20250_proto-trunk]
Notes:
* I have focused on the thread local counting algorithm itself and have not
touched yet the integration part about interfaces/metric factory/Meter/etc
* I have to use AtomicLongArray and AtomicReference to provide some visibility
for the reader (getCount() operation) thread of the updates done by writer
threads (inc()-like operations) from JMM point of view. I use relaxed versions
(getPlain/lazySet) of reads/writes to reduce the overheads for writers
* I used the approach with dead threads processing during a read, not sure it
is the best one but for WeakReference way as of now I do no see how to avoid a
potential losing of writes made by a terminated thread..
As a next step I want to add a JMH test to compare it with LongAdder counter
version.
was (Author: dnk):
A very limited version of the logic as a sketch of the idea:
[https://github.com/apache/cassandra/compare/trunk...netudima:cassandra:20250_proto-trunk]
Notes:
* I have focused on the thread local counting algorithm itself and have not
touched yet the integration part about interfaces/metric factory/Meter/etc
* I have to use AtomicLongArray and AtomicReference to provide some visibility
for the reader (getCount() operation) thread of the updates done by writer
threads (inc()-like operations) from JMM point of view. I use relaxed versions
(getPlain/setLazy) of reads/writes to reduce the overheads for writers
* I used the approach with dead threads processing during a read, not sure it
is the best one but for WeakReference way as of now I do no see how to avoid a
potential losing of writes made by a terminated thread..
As a next step I want to add a JMH test to compare it with LongAdder counter
version.
> Provide the ability to disable specific metrics collection
> ----------------------------------------------------------
>
> Key: CASSANDRA-20250
> URL: https://issues.apache.org/jira/browse/CASSANDRA-20250
> Project: Apache Cassandra
> Issue Type: New Feature
> Components: Observability/Metrics
> Reporter: Dmitry Konstantinov
> Priority: Normal
> Attachments: cpu_profile_insert.html
>
>
> Cassandra has a lot of metrics collected, many of them are collected per
> table, so their instance number is multiplied by number of tables. From one
> side it gives a better observability, from another side metrics are not for
> free, there is an overhead associated with them:
> 1) CPU overhead: in case of simple CPU bound load: I already see like 5.5% of
> total CPU spent for metrics in cpu framegraphs for read load and 11% for
> write load.
> Example: [^cpu_profile_insert.html] (search by "codahale" pattern)
> 2) memory overhead: we spend memory for entities used to aggregate metrics
> such as LongAdders and reservoirs + for MBeans (String concatenation within
> object names is a major cause of it, for each table+metric name combination a
> new String is created)
>
> The idea of this ticket is to allow an operator to configure a list of
> disabled metrics in cassandra.yaml, like:
> {code:java}
> disabled_metrics:
> - metric_a
> - metric_b
> {code}
> From implementation point of view I see two possible approaches (which can be
> combined):
> # Generic: when a metric is registering if it is listed in disabled_metrics
> we do not publish it via JMX and provide a noop implementation of metric
> object (such as histogram) for it.
> Logging analogy: log level check within log method
> # Specialized: for some metrics the process of value calculation is not for
> free and introduces an overhead as well, in such cases it would be useful to
> check within specific logic using an API (like: isMetricEnabled) do we need
> to do it. Example of such metric:
> ClientRequestSizeMetrics.recordRowAndColumnCountMetrics
> Logging analogy: an explicit 'if (isDebugEnabled())' condition used when a
> message parameter is expensive.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]