brintos

brintos / linux-shallow public Read only

0
0
Text · 8.7 KiB · c88a75d Raw
279 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * Copyright 2023 Red Hat4 */5 6#ifndef STATISTICS_H7#define STATISTICS_H8 9#include "types.h"10 11enum {12	STATISTICS_VERSION = 36,13};14 15struct block_allocator_statistics {16	/* The total number of slabs from which blocks may be allocated */17	u64 slab_count;18	/* The total number of slabs from which blocks have ever been allocated */19	u64 slabs_opened;20	/* The number of times since loading that a slab has been re-opened */21	u64 slabs_reopened;22};23 24/**25 * Counters for tracking the number of items written (blocks, requests, etc.)26 * that keep track of totals at steps in the write pipeline. Three counters27 * allow the number of buffered, in-memory items and the number of in-flight,28 * unacknowledged writes to be derived, while still tracking totals for29 * reporting purposes30 */31struct commit_statistics {32	/* The total number of items on which processing has started */33	u64 started;34	/* The total number of items for which a write operation has been issued */35	u64 written;36	/* The total number of items for which a write operation has completed */37	u64 committed;38};39 40/** Counters for events in the recovery journal */41struct recovery_journal_statistics {42	/* Number of times the on-disk journal was full */43	u64 disk_full;44	/* Number of times the recovery journal requested slab journal commits. */45	u64 slab_journal_commits_requested;46	/* Write/Commit totals for individual journal entries */47	struct commit_statistics entries;48	/* Write/Commit totals for journal blocks */49	struct commit_statistics blocks;50};51 52/** The statistics for the compressed block packer. */53struct packer_statistics {54	/* Number of compressed data items written since startup */55	u64 compressed_fragments_written;56	/* Number of blocks containing compressed items written since startup */57	u64 compressed_blocks_written;58	/* Number of VIOs that are pending in the packer */59	u64 compressed_fragments_in_packer;60};61 62/** The statistics for the slab journals. */63struct slab_journal_statistics {64	/* Number of times the on-disk journal was full */65	u64 disk_full_count;66	/* Number of times an entry was added over the flush threshold */67	u64 flush_count;68	/* Number of times an entry was added over the block threshold */69	u64 blocked_count;70	/* Number of times a tail block was written */71	u64 blocks_written;72	/* Number of times we had to wait for the tail to write */73	u64 tail_busy_count;74};75 76/** The statistics for the slab summary. */77struct slab_summary_statistics {78	/* Number of blocks written */79	u64 blocks_written;80};81 82/** The statistics for the reference counts. */83struct ref_counts_statistics {84	/* Number of reference blocks written */85	u64 blocks_written;86};87 88/** The statistics for the block map. */89struct block_map_statistics {90	/* number of dirty (resident) pages */91	u32 dirty_pages;92	/* number of clean (resident) pages */93	u32 clean_pages;94	/* number of free pages */95	u32 free_pages;96	/* number of pages in failed state */97	u32 failed_pages;98	/* number of pages incoming */99	u32 incoming_pages;100	/* number of pages outgoing */101	u32 outgoing_pages;102	/* how many times free page not avail */103	u32 cache_pressure;104	/* number of get_vdo_page() calls for read */105	u64 read_count;106	/* number of get_vdo_page() calls for write */107	u64 write_count;108	/* number of times pages failed to read */109	u64 failed_reads;110	/* number of times pages failed to write */111	u64 failed_writes;112	/* number of gets that are reclaimed */113	u64 reclaimed;114	/* number of gets for outgoing pages */115	u64 read_outgoing;116	/* number of gets that were already there */117	u64 found_in_cache;118	/* number of gets requiring discard */119	u64 discard_required;120	/* number of gets enqueued for their page */121	u64 wait_for_page;122	/* number of gets that have to fetch */123	u64 fetch_required;124	/* number of page fetches */125	u64 pages_loaded;126	/* number of page saves */127	u64 pages_saved;128	/* the number of flushes issued */129	u64 flush_count;130};131 132/** The dedupe statistics from hash locks */133struct hash_lock_statistics {134	/* Number of times the UDS advice proved correct */135	u64 dedupe_advice_valid;136	/* Number of times the UDS advice proved incorrect */137	u64 dedupe_advice_stale;138	/* Number of writes with the same data as another in-flight write */139	u64 concurrent_data_matches;140	/* Number of writes whose hash collided with an in-flight write */141	u64 concurrent_hash_collisions;142	/* Current number of dedupe queries that are in flight */143	u32 curr_dedupe_queries;144};145 146/** Counts of error conditions in VDO. */147struct error_statistics {148	/* number of times VDO got an invalid dedupe advice PBN from UDS */149	u64 invalid_advice_pbn_count;150	/* number of times a VIO completed with a VDO_NO_SPACE error */151	u64 no_space_error_count;152	/* number of times a VIO completed with a VDO_READ_ONLY error */153	u64 read_only_error_count;154};155 156struct bio_stats {157	/* Number of REQ_OP_READ bios */158	u64 read;159	/* Number of REQ_OP_WRITE bios with data */160	u64 write;161	/* Number of bios tagged with REQ_PREFLUSH and containing no data */162	u64 empty_flush;163	/* Number of REQ_OP_DISCARD bios */164	u64 discard;165	/* Number of bios tagged with REQ_PREFLUSH */166	u64 flush;167	/* Number of bios tagged with REQ_FUA */168	u64 fua;169};170 171struct memory_usage {172	/* Tracked bytes currently allocated. */173	u64 bytes_used;174	/* Maximum tracked bytes allocated. */175	u64 peak_bytes_used;176};177 178/** UDS index statistics */179struct index_statistics {180	/* Number of records stored in the index */181	u64 entries_indexed;182	/* Number of post calls that found an existing entry */183	u64 posts_found;184	/* Number of post calls that added a new entry */185	u64 posts_not_found;186	/* Number of query calls that found an existing entry */187	u64 queries_found;188	/* Number of query calls that added a new entry */189	u64 queries_not_found;190	/* Number of update calls that found an existing entry */191	u64 updates_found;192	/* Number of update calls that added a new entry */193	u64 updates_not_found;194	/* Number of entries discarded */195	u64 entries_discarded;196};197 198/** The statistics of the vdo service. */199struct vdo_statistics {200	u32 version;201	/* Number of blocks used for data */202	u64 data_blocks_used;203	/* Number of blocks used for VDO metadata */204	u64 overhead_blocks_used;205	/* Number of logical blocks that are currently mapped to physical blocks */206	u64 logical_blocks_used;207	/* number of physical blocks */208	block_count_t physical_blocks;209	/* number of logical blocks */210	block_count_t logical_blocks;211	/* Size of the block map page cache, in bytes */212	u64 block_map_cache_size;213	/* The physical block size */214	u64 block_size;215	/* Number of times the VDO has successfully recovered */216	u64 complete_recoveries;217	/* Number of times the VDO has recovered from read-only mode */218	u64 read_only_recoveries;219	/* String describing the operating mode of the VDO */220	char mode[15];221	/* Whether the VDO is in recovery mode */222	bool in_recovery_mode;223	/* What percentage of recovery mode work has been completed */224	u8 recovery_percentage;225	/* The statistics for the compressed block packer */226	struct packer_statistics packer;227	/* Counters for events in the block allocator */228	struct block_allocator_statistics allocator;229	/* Counters for events in the recovery journal */230	struct recovery_journal_statistics journal;231	/* The statistics for the slab journals */232	struct slab_journal_statistics slab_journal;233	/* The statistics for the slab summary */234	struct slab_summary_statistics slab_summary;235	/* The statistics for the reference counts */236	struct ref_counts_statistics ref_counts;237	/* The statistics for the block map */238	struct block_map_statistics block_map;239	/* The dedupe statistics from hash locks */240	struct hash_lock_statistics hash_lock;241	/* Counts of error conditions */242	struct error_statistics errors;243	/* The VDO instance */244	u32 instance;245	/* Current number of active VIOs */246	u32 current_vios_in_progress;247	/* Maximum number of active VIOs */248	u32 max_vios;249	/* Number of times the UDS index was too slow in responding */250	u64 dedupe_advice_timeouts;251	/* Number of flush requests submitted to the storage device */252	u64 flush_out;253	/* Logical block size */254	u64 logical_block_size;255	/* Bios submitted into VDO from above */256	struct bio_stats bios_in;257	struct bio_stats bios_in_partial;258	/* Bios submitted onward for user data */259	struct bio_stats bios_out;260	/* Bios submitted onward for metadata */261	struct bio_stats bios_meta;262	struct bio_stats bios_journal;263	struct bio_stats bios_page_cache;264	struct bio_stats bios_out_completed;265	struct bio_stats bios_meta_completed;266	struct bio_stats bios_journal_completed;267	struct bio_stats bios_page_cache_completed;268	struct bio_stats bios_acknowledged;269	struct bio_stats bios_acknowledged_partial;270	/* Current number of bios in progress */271	struct bio_stats bios_in_progress;272	/* Memory usage stats. */273	struct memory_usage memory_usage;274	/* The statistics for the UDS index */275	struct index_statistics index;276};277 278#endif /* not STATISTICS_H */279