/*
 * Migration stats
 *
 * Copyright (c) 2012-2023 Red Hat Inc
 *
 * Authors:
 *  Juan Quintela <quintela@redhat.com>
 *
 * This work is licensed under the terms of the GNU GPL, version 2 or later.
 * See the COPYING file in the top-level directory.
 */

#ifndef QEMU_MIGRATION_STATS_H
#define QEMU_MIGRATION_STATS_H

#include "qemu/stats64.h"

/*
 * Amount of time to allocate to each "chunk" of bandwidth-throttled
 * data.
 */
#define BUFFER_DELAY     100

/*
 * If rate_limit_max is 0, there is special code to remove the rate
 * limit.
 */
#define RATE_LIMIT_DISABLED 0

/*
 * These are the ram migration statistic counters.  It is loosely
 * based on MigrationStats.  We change to Stat64 any counter that
 * needs to be updated using atomic ops (can be accessed by more than
 * one thread).
 */
typedef struct {
    /*
     * Number of bytes that were dirty last time that we synced with
     * the guest memory.  We use that to calculate the downtime.  As
     * the remaining dirty amounts to what we know that is still dirty
     * since last iteration, not counting what the guest has dirtied
     * since we synchronized bitmaps.
     */
    Stat64 dirty_bytes_last_sync;
    /*
     * Number of pages dirtied per second.
     */
    Stat64 dirty_pages_rate;
    /*
     * Number of times we have synchronized guest bitmaps.
     */
    Stat64 dirty_sync_count;
    /*
     * Number of times zero copy failed to send any page using zero
     * copy.
     */
    Stat64 dirty_sync_missed_zero_copy;
    /*
     * Number of bytes sent at migration completion stage while the
     * guest is stopped.
     */
    Stat64 downtime_bytes;
    /*
     * Number of bytes sent through multifd channels.
     */
    Stat64 multifd_bytes;
    /*
     * Number of pages transferred that were not full of zeros.
     */
    Stat64 normal_pages;
    /*
     * Number of bytes sent during postcopy.
     */
    Stat64 postcopy_bytes;
    /*
     * Number of postcopy page faults that we have handled during
     * postcopy stage.
     */
    Stat64 postcopy_requests;
    /*
     * Number of bytes sent during precopy stage.
     */
    Stat64 precopy_bytes;
    /*
     * Amount of transferred data at the start of current cycle.
     */
    Stat64 rate_limit_start;
    /*
     * Maximum amount of data we can send in a cycle.
     */
    Stat64 rate_limit_max;
    /*
     * Total number of bytes transferred.
     */
    Stat64 transferred;
    /*
     * Number of pages transferred that were full of zeros.
     */
    Stat64 zero_pages;
} MigrationAtomicStats;

extern MigrationAtomicStats mig_stats;

/**
 * migration_rate_get: Get the maximum amount that can be transferred.
 *
 * Returns the maximum number of bytes that can be transferred in a cycle.
 */
uint64_t migration_rate_get(void);

/**
 * migration_rate_reset: Reset the rate limit counter.
 *
 * This is called when we know we start a new transfer cycle.
 *
 * @f: QEMUFile used for main migration channel
 */
void migration_rate_reset(QEMUFile *f);

/**
 * migration_rate_set: Set the maximum amount that can be transferred.
 *
 * Sets the maximum amount of bytes that can be transferred in one cycle.
 *
 * @new_rate: new maximum amount
 */
void migration_rate_set(uint64_t new_rate);

/**
 * migration_transferred_bytes: Return number of bytes transferred
 *
 * @f: QEMUFile used for main migration channel
 *
 * Returns how many bytes have we transferred since the beginning of
 * the migration.  It accounts for bytes sent through any migration
 * channel, multifd, qemu_file, rdma, ....
 */
uint64_t migration_transferred_bytes(QEMUFile *f);
#endif
