/* * Copyright (c) 2020 Red Hat, Inc. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ #ifndef KERNEL_STATISTICS_H #define KERNEL_STATISTICS_H #include "header.h" #include "types.h" typedef struct { /** Number of not REQ_WRITE bios */ uint64_t read; /** Number of REQ_WRITE bios */ uint64_t write; /** Number of REQ_DISCARD bios */ uint64_t discard; /** Number of REQ_FLUSH bios */ uint64_t flush; /** Number of REQ_FUA bios */ uint64_t fua; } BioStats; typedef struct { /** Tracked bytes currently allocated. */ uint64_t bytesUsed; /** Maximum tracked bytes allocated. */ uint64_t peakBytesUsed; } MemoryUsage; /** UDS index statistics */ typedef struct { /** Number of chunk names stored in the index */ uint64_t entriesIndexed; /** Number of post calls that found an existing entry */ uint64_t postsFound; /** Number of post calls that added a new entry */ uint64_t postsNotFound; /** Number of query calls that found an existing entry */ uint64_t queriesFound; /** Number of query calls that added a new entry */ uint64_t queriesNotFound; /** Number of update calls that found an existing entry */ uint64_t updatesFound; /** Number of update calls that added a new entry */ uint64_t updatesNotFound; /** Current number of dedupe queries that are in flight */ uint32_t currDedupeQueries; /** Maximum number of dedupe queries that have been in flight */ uint32_t maxDedupeQueries; } IndexStatistics; typedef struct { uint32_t version; uint32_t releaseVersion; /** The VDO instance */ uint32_t instance; /** Current number of active VIOs */ uint32_t currentVIOsInProgress; /** Maximum number of active VIOs */ uint32_t maxVIOs; /** Number of times the UDS index was too slow in responding */ uint64_t dedupeAdviceTimeouts; /** Number of flush requests submitted to the storage device */ uint64_t flushOut; /** Logical block size */ uint64_t logicalBlockSize; /** Bios submitted into VDO from above */ BioStats biosIn; BioStats biosInPartial; /** Bios submitted onward for user data */ BioStats biosOut; /** Bios submitted onward for metadata */ BioStats biosMeta; BioStats biosJournal; BioStats biosPageCache; BioStats biosOutCompleted; BioStats biosMetaCompleted; BioStats biosJournalCompleted; BioStats biosPageCacheCompleted; BioStats biosAcknowledged; BioStats biosAcknowledgedPartial; /** Current number of bios in progress */ BioStats biosInProgress; /** Memory usage stats. */ MemoryUsage memoryUsage; /** The statistics for the UDS index */ IndexStatistics index; } KernelStatistics; /** * Get the root for all stats proc files. * * @return The proc root **/ static inline const char *getProcRoot(void) { return "vdo"; } /** * Get the proc file path for reading KernelStatistics. * * @return The proc file path **/ static inline const char *getKernelStatisticsProcFile(void) { return "kernel_stats"; } #endif /* not KERNEL_STATISTICS_H */