I’m afraid that in the future we might need to add non WAL related metrics under this interface. This is why it might make sense to keep the name generic.
— Denis > On May 30, 2017, at 12:29 PM, Dmitriy Setrakyan <dsetrak...@apache.org> wrote: > > It looks to me like all global metrics have to do with WAL. Why not call > them IgniteWalMetrics then? > > On Tue, May 30, 2017 at 11:58 AM, Denis Magda <dma...@apache.org> wrote: > >>> Also, I see your argument about separating memory from disk metrics, but >> I >>> think it makes sense to combine them, because it is hard to separate them >>> from user standpoint. Let's call them IgniteStorageMetrics or something >> of >>> the kind. >> >> The issue is that we can’t combine all of them because these >> >>>> public interface PersistenceMemoryMetrics extends MemoryMetrics { >>>> public double getPageEvictionRate(); >>>> >>>> public double getPageMissRate(); >>>> >>>> public long getDirtyPages(); >>>> >>>> public long getPagesOnDisk(); >>>> } >> >> >> are calculated per memory policy (memory region) while these >> >>>> public interface PersistenceStoreMetrics { >>>> //WAL-related metrics >>>> public double getWalLoggingRate(); >>>> >>>> public int getWalArchiveSegments(); >>>> >>>> public double getWalFsyncAverage(); >>>> >>>> //checkpoint-related metrics >>>> public double getCpTime(); >>>> >>>> public double getCpFsyncTime(); >>>> >>>> public long getCpTotalPages(); >>>> >>>> public long[] getCpPagesByType(); >>>> >>>> public long getCpCopiedOnWritePages(); >>>> } >> >> are global. >> >> >> — >> Denis >> >>> On May 30, 2017, at 11:44 AM, Dmitriy Setrakyan <dsetrak...@apache.org> >> wrote: >>> >>> Several questions: >>> >>> 1. What is "getWalFsyncAverage()"? Is it time? If yes, then it should >> be >>> consistent with other time metrics, and should be called >>> "getWalFsyncAverageTime()" >>> 2. I see "getPagesOnDisk()", should we also have "getPagesInMemory()"? >>> 3. Also, how about WAL total pages count or total size, whichever one >> is >>> easier? >>> 4. How about the WAL size that has not been checkpointed yet? >>> 5. How about WAL history size (the number of WAL files that we are >>> rotating through)? >>> >>> Also, I see your argument about separating memory from disk metrics, but >> I >>> think it makes sense to combine them, because it is hard to separate them >>> from user standpoint. Let's call them IgniteStorageMetrics or something >> of >>> the kind. >>> >>> D. >>> >>> >>> On Mon, May 29, 2017 at 9:24 AM, Sergey Chugunov < >> sergey.chugu...@gmail.com> >>> wrote: >>> >>>> Hello Denis, >>>> >>>> I have an idea of how we could clarify proposed above approach to >>>> collecting metrics for PDS. >>>> >>>> I suggest to split all metrics into two major groups (disk-related and >>>> memory-related) and group them in the following interfaces: >>>> >>>> public interface PersistenceMemoryMetrics extends MemoryMetrics { >>>> public double getPageEvictionRate(); >>>> >>>> public double getPageMissRate(); >>>> >>>> public long getDirtyPages(); >>>> >>>> public long getPagesOnDisk(); >>>> } >>>> >>>> public interface PersistenceStoreMetrics { >>>> //WAL-related metrics >>>> public double getWalLoggingRate(); >>>> >>>> public int getWalArchiveSegments(); >>>> >>>> public double getWalFsyncAverage(); >>>> >>>> //checkpoint-related metrics >>>> public double getCpTime(); >>>> >>>> public double getCpFsyncTime(); >>>> >>>> public long getCpTotalPages(); >>>> >>>> public long[] getCpPagesByType(); >>>> >>>> public long getCpCopiedOnWritePages(); >>>> } >>>> >>>> From my standpoint it is important to distinguish between PDS metrics >> that >>>> are related mostly to memory management (from the first interface) and >>>> metrics bound to disk operations (from the second interface). >>>> >>>> First group of metrics is useful when collected per Memory Policy. It >>>> doesn't provide a lot of information when collected across many Memory >>>> Policies. >>>> >>>> Second group is now global (this may change in the future if Persistence >>>> Policies are introduced) and allows to easily spot any high-level issues >>>> with durable storage configuration or performance. More specific >> questions >>>> like "how this Memory Policy loads a durable storage subsystem?" may be >>>> deduced from PersistenceMemoryMetrics indicators. >>>> >>>> Denis, does it make sense for you? >>>> >>>> Any other ideas/questions/improvements or metrics to add to these >>>> interfaces? >>>> >>>> I would like to discuss all the details here before creating any tickets >>>> for the change. >>>> >>>> Thanks, >>>> Sergey. >>>> >>>> >>>> On Fri, May 19, 2017 at 9:26 PM, Denis Magda <dma...@apache.org> wrote: >>>> >>>>> Dmitriy, >>>>> >>>>> I have some high level concerns. >>>>> >>>>> Presently, Ignite already exposes memory/data related metrics via >>>>> MemoryMetrics and CacheMetrics interface. >>>>> >>>>> Looking at PersistentStoreMetrics interface I can’t get why methods >> like >>>>> getMemorySize(), getPagesInMemory(), getPagesSizeInMemory(), etc. are >> NOT >>>>> in MemoryMetrics interface. >>>>> >>>>> Next, I wouldn’t make out PersistentStore*Cache*Metrics interface that >>>>> contains a big subset of the methods from PersistentStoreMetric. There >>>> just >>>>> should be some API call that either returns global metrics or cache >>>>> specific ones. Plus, some of the methods might be added to existing >>>>> CacheInterface. Why not. >>>>> >>>>> I prefer to address this first. Guys, any other thoughts on this? >>>>> >>>>> — >>>>> Denis >>>>> >>>>>> On May 17, 2017, at 4:16 AM, Dmitriy Govorukhin < >>>>> dmitriy.govoruk...@gmail.com> wrote: >>>>>> >>>>>> Folk, >>>>>> >>>>>> As you know, ignite 2.1 will contain new module (pds), it will be >>>>>> provide ability to store data on disk. Let's discuss what type of >>>>>> metrics we need for this? >>>>>> I think it must be metrics per memory policy, per cache, checkpoint, >>>>>> and global metrics which will be aggregate all metrics. >>>>>> >>>>>> I did sketch. >>>>>> >>>>>> PersistentStoreMetrics.java >>>>>> >>>>>> public interface PersistentStoreMetrics { >>>>>> >>>>>> // Global metrics. >>>>>> >>>>>> public long getMemorySize(); >>>>>> >>>>>> public long getDiskSize(); >>>>>> >>>>>> public long getPagesInMemory(); >>>>>> >>>>>> public long getPagesSizeInMemory(); >>>>>> >>>>>> public long getPagesOnDisk(); >>>>>> >>>>>> public long getPagesSizeOnDisk(); >>>>>> >>>>>> public long getFreePages(); >>>>>> >>>>>> public long getFreePagesSize(); >>>>>> >>>>>> public long getDirtyPages(); >>>>>> >>>>>> public long getDirtyPagesSize(); >>>>>> >>>>>> public long walLog(); >>>>>> >>>>>> public long walLogSize(); >>>>>> >>>>>> // Frequency. >>>>>> >>>>>> public long getPagesRead(); >>>>>> >>>>>> public long getPagesWrite(); >>>>>> >>>>>> public long getFsync(); >>>>>> >>>>>> public long getWal(); >>>>>> >>>>>> public long getAverageWalFsyncTime(); >>>>>> >>>>>> // Per cache. >>>>>> >>>>>> public PersistentStoreCacheMetrics cache(String name); >>>>>> >>>>>> public PersistentStoreCacheMetrics cache(int cacheId); >>>>>> >>>>>> // For last checkpoint. >>>>>> >>>>>> public PersistentStoreCheckpointMetrics getLastCheckPoint(); >>>>>> } >>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>> >>>>>> PersistentStoreCacheMetrics.java >>>>>> >>>>>> public interface PersistentStoreCacheMetrics { >>>>>> >>>>>> public String name(); >>>>>> >>>>>> public double getFillFactor(); >>>>>> >>>>>> public double getFillFactor(int part); >>>>>> >>>>>> public long getMemorySize(); >>>>>> >>>>>> public long getDiskSize(); >>>>>> >>>>>> public long getPagesInMemory(); >>>>>> >>>>>> public long getPagesSizeInMemory(); >>>>>> >>>>>> public long getPagesOnDisk(); >>>>>> >>>>>> public long getPagesSizeOnDisk(); >>>>>> >>>>>> public long getFreePages(); >>>>>> >>>>>> public long getFreePagesSize(); >>>>>> >>>>>> public long getDirtyPages(); >>>>>> >>>>>> public long getDirtyPagesSize(); >>>>>> >>>>>> public long getPagesRead(); >>>>>> >>>>>> public long getPagesWritten(); >>>>>> } >>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>> >>>>>> PersistentStoreCheckpointMetrics.java >>>>>> >>>>>> public interface PersistentStoreCheckpointMetrics { >>>>>> >>>>>> public long getTotalPages(); >>>>>> >>>>>> //TODO Page type is internal? >>>>>> public long[] pagesType(); >>>>>> >>>>>> public long getExecutingTime(); >>>>>> >>>>>> public long getFsyncTime(); >>>>>> >>>>>> public long getPagesCopyOnWrite(); >>>>>> } >>>>> >>>>> >>>> >> >>