Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/drivers/block/zram/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 4 kB image not shown  

Quelle  zram_drv.h   Sprache: C

 
/*
 * Compressed RAM block device
 *
 * Copyright (C) 2008, 2009, 2010  Nitin Gupta
 *               2012, 2013 Minchan Kim
 *
 * This code is released using a dual license strategy: BSD/GPL
 * You can choose the licence that better fits your requirements.
 *
 * Released under the terms of 3-clause BSD License
 * Released under the terms of GNU General Public License Version 2.0
 *
 */


#ifndef _ZRAM_DRV_H_
#define _ZRAM_DRV_H_

#include <linux/rwsem.h>
#include <linux/zsmalloc.h>

#include "zcomp.h"

#define SECTORS_PER_PAGE_SHIFT (PAGE_SHIFT - SECTOR_SHIFT)
#define SECTORS_PER_PAGE (1 << SECTORS_PER_PAGE_SHIFT)
#define ZRAM_LOGICAL_BLOCK_SHIFT 12
#define ZRAM_LOGICAL_BLOCK_SIZE (1 << ZRAM_LOGICAL_BLOCK_SHIFT)
#define ZRAM_SECTOR_PER_LOGICAL_BLOCK \
 (1 << (ZRAM_LOGICAL_BLOCK_SHIFT - SECTOR_SHIFT))

/*
 * ZRAM is mainly used for memory efficiency so we want to keep memory
 * footprint small and thus squeeze size and zram pageflags into a flags
 * member. The lower ZRAM_FLAG_SHIFT bits is for object size (excluding
 * header), which cannot be larger than PAGE_SIZE (requiring PAGE_SHIFT
 * bits), the higher bits are for zram_pageflags.
 *
 * We use BUILD_BUG_ON() to make sure that zram pageflags don't overflow.
 */

#define ZRAM_FLAG_SHIFT (PAGE_SHIFT + 1)

/* Only 2 bits are allowed for comp priority index */
#define ZRAM_COMP_PRIORITY_MASK 0x3

/* Flags for zram pages (table[page_no].flags) */
enum zram_pageflags {
 ZRAM_SAME = ZRAM_FLAG_SHIFT, /* Page consists the same element */
 ZRAM_ENTRY_LOCK, /* entry access lock bit */
 ZRAM_WB, /* page is stored on backing_device */
 ZRAM_PP_SLOT, /* Selected for post-processing */
 ZRAM_HUGE, /* Incompressible page */
 ZRAM_IDLE, /* not accessed page since last idle marking */
 ZRAM_INCOMPRESSIBLE, /* none of the algorithms could compress it */

 ZRAM_COMP_PRIORITY_BIT1, /* First bit of comp priority index */
 ZRAM_COMP_PRIORITY_BIT2, /* Second bit of comp priority index */

 __NR_ZRAM_PAGEFLAGS,
};

/*
 * Allocated for each disk page.  We use bit-lock (ZRAM_ENTRY_LOCK bit
 * of flags) to save memory.  There can be plenty of entries and standard
 * locking primitives (e.g. mutex) will significantly increase sizeof()
 * of each entry and hence of the meta table.
 */

struct zram_table_entry {
 unsigned long handle;
 unsigned long flags;
#ifdef CONFIG_ZRAM_TRACK_ENTRY_ACTIME
 ktime_t ac_time;
#endif
 struct lockdep_map dep_map;
};

struct zram_stats {
 atomic64_t compr_data_size; /* compressed size of pages stored */
 atomic64_t failed_reads; /* can happen when memory is too low */
 atomic64_t failed_writes; /* can happen when memory is too low */
 atomic64_t notify_free; /* no. of swap slot free notifications */
 atomic64_t same_pages;  /* no. of same element filled pages */
 atomic64_t huge_pages;  /* no. of huge pages */
 atomic64_t huge_pages_since; /* no. of huge pages since zram set up */
 atomic64_t pages_stored; /* no. of pages currently stored */
 atomic_long_t max_used_pages; /* no. of maximum pages stored */
 atomic64_t miss_free;  /* no. of missed free */
#ifdef CONFIG_ZRAM_WRITEBACK
 atomic64_t bd_count;  /* no. of pages in backing device */
 atomic64_t bd_reads;  /* no. of reads from backing device */
 atomic64_t bd_writes;  /* no. of writes from backing device */
#endif
};

#ifdef CONFIG_ZRAM_MULTI_COMP
#define ZRAM_PRIMARY_COMP 0U
#define ZRAM_SECONDARY_COMP 1U
#define ZRAM_MAX_COMPS 4U
#else
#define ZRAM_PRIMARY_COMP 0U
#define ZRAM_SECONDARY_COMP 0U
#define ZRAM_MAX_COMPS 1U
#endif

struct zram {
 struct zram_table_entry *table;
 struct zs_pool *mem_pool;
 struct zcomp *comps[ZRAM_MAX_COMPS];
 struct zcomp_params params[ZRAM_MAX_COMPS];
 struct gendisk *disk;
 /* Prevent concurrent execution of device init */
 struct rw_semaphore init_lock;
 /*
 * the number of pages zram can consume for storing compressed data
 */

 unsigned long limit_pages;

 struct zram_stats stats;
 /*
 * This is the limit on amount of *uncompressed* worth of data
 * we can store in a disk.
 */

 u64 disksize; /* bytes */
 const char *comp_algs[ZRAM_MAX_COMPS];
 s8 num_active_comps;
 /*
 * zram is claimed so open request will be failed
 */

 bool claim; /* Protected by disk->open_mutex */
#ifdef CONFIG_ZRAM_WRITEBACK
 struct file *backing_dev;
 spinlock_t wb_limit_lock;
 bool wb_limit_enable;
 u64 bd_wb_limit;
 struct block_device *bdev;
 unsigned long *bitmap;
 unsigned long nr_pages;
#endif
#ifdef CONFIG_ZRAM_MEMORY_TRACKING
 struct dentry *debugfs_dir;
#endif
 atomic_t pp_in_progress;
};
#endif

Messung V0.5
C=87 H=96 G=91

¤ Dauer der Verarbeitung: 0.3 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.