pagecache.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. // SPDX-License-Identifier: GPL-3.0-or-later
  2. #ifndef NETDATA_PAGECACHE_H
  3. #define NETDATA_PAGECACHE_H
  4. #include "rrdengine.h"
  5. extern struct mrg *main_mrg;
  6. extern struct pgc *main_cache;
  7. extern struct pgc *open_cache;
  8. extern struct pgc *extent_cache;
  9. /* Forward declarations */
  10. struct rrdengine_instance;
  11. #define INVALID_TIME (0)
  12. #define MAX_PAGE_CACHE_FETCH_RETRIES (3)
  13. #define PAGE_CACHE_FETCH_WAIT_TIMEOUT (3)
  14. extern struct rrdeng_cache_efficiency_stats rrdeng_cache_efficiency_stats;
  15. struct page_descr_with_data {
  16. uuid_t *id;
  17. Word_t metric_id;
  18. usec_t start_time_ut;
  19. usec_t end_time_ut;
  20. uint8_t type;
  21. uint32_t update_every_s;
  22. uint32_t page_length;
  23. uint8_t *page;
  24. struct {
  25. struct page_descr_with_data *prev;
  26. struct page_descr_with_data *next;
  27. } link;
  28. };
  29. #define PAGE_INFO_SCRATCH_SZ (8)
  30. struct rrdeng_page_info {
  31. uint8_t scratch[PAGE_INFO_SCRATCH_SZ]; /* scratch area to be used by page-cache users */
  32. usec_t start_time_ut;
  33. usec_t end_time_ut;
  34. uint32_t page_length;
  35. };
  36. struct pg_alignment {
  37. uint32_t page_position;
  38. uint32_t refcount;
  39. uint16_t initial_slots;
  40. };
  41. struct rrdeng_query_handle;
  42. struct page_details_control;
  43. void rrdeng_prep_wait(struct page_details_control *pdc);
  44. void rrdeng_prep_query(struct page_details_control *pdc);
  45. void pg_cache_preload(struct rrdeng_query_handle *handle);
  46. struct pgc_page *pg_cache_lookup_next(struct rrdengine_instance *ctx, struct page_details_control *pdc, time_t now_s, time_t last_update_every_s, size_t *entries);
  47. void pgc_and_mrg_initialize(void);
  48. void pgc_open_add_hot_page(Word_t section, Word_t metric_id, time_t start_time_s, time_t end_time_s, time_t update_every_s, struct rrdengine_datafile *datafile, uint64_t extent_offset, unsigned extent_size, uint32_t page_length);
  49. #endif /* NETDATA_PAGECACHE_H */