Дескриптор библиотеки libcache
#include <sys/cache.h>
struct cache_ctrl {
_Uint32t cache_line_size;
_Uint32t cache_flush_rate;
_Uint32t cache_invalidate_rate;
_Uint32t flags;
int fd;
struct cache_funcs cf;
void *dll;
struct cacheattr_entry **cachelist;
int ncaches;
struct syspage_entry *syspage;
unsigned bitmask;
};
Тип используется в качестве дескриптора состояния библиотеки libcache
, который хранит в том числе информацию для внутреннего использования библиотекой. Структура включает следующие поля:
- cache_line_size
- После выполнения функции данное поле будет содержать размер строки кэша в байтах. Если в системе реализован протокол отслеживания шины, это поле может содержать ноль.
- cache_flush_rate
- Предоставляет драйверу индикацию о стоимости очистки кеша:
- CACHE_OP_RATE_SNOOP
- Из-за механизма отслеживания шины операция очистки кеша имеет незначительную стоимость.
- CACHE_OP_RATE_INLINE
- Операции очистки кэша реализуются с помощью встроенных подпрограмм, зависящих от ЦП, и стоят недорого.
- CACHE_OP_RATE_CALLOUT
- Операции очистки кеша реализуются путем вызова внешней функции, что вызывает небольшие накладные расходы ЦП.
- CACHE_OP_RATE_MSYNC
- Операции очистки кеша реализуются путем вызова msync(). Поскольку эта функция реализована с помощью системного вызова, операция будет очень дорогостоящей. Очень маловероятно, что библиотека в конечном итоге вызовет msync(), но в этом случае драйвер потенциально может достичь лучшей производительности, отображая буферы данных как некэшируемые, чтобы избежать необходимости выполнять операции синхронизации кеша.
- cache_invalidate_rate
- Предоставляет драйверу индикацию стоимости выполнения процедуры аннулирования кеша. Значения, определенные для этого поля, аналогичны тем, которые определены для поля cache_flush_rate.
- fd
- Драйверу следует установить данное поле в значение
NOFD
.
На другие поля в структуре не следует ссылаться или изменять их.
ЗОСРВ «Нейтрино»
cache_fini(), CACHE_FLUSH(), cache_init(), CACHE_INVAL()
Предыдущий раздел: Описание API библиотеки cache