source: squid-ssl/trunk/fuentes/src/DiskIO/DiskThreads/DiskThreads.h @ 5495

Last change on this file since 5495 was 5495, checked in by Juanma, 2 years ago

Initial release

File size: 3.6 KB
Line 
1/*
2 * Copyright (C) 1996-2015 The Squid Software Foundation and contributors
3 *
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
7 */
8
9/*
10 * DiskThreads.h
11 *
12 * Internal declarations for the DiskThreads routines
13 */
14
15#ifndef __DISKTHREADS_H__
16#define __DISKTHREADS_H__
17
18#include "dlink.h"
19#include "typedefs.h"
20
21/* this non-standard-conformant include is needed in order to have stat(2) and struct stat
22   properly defined on some systems (e.g. OpenBSD 5.4) */
23#if HAVE_SYS_STAT_H
24#include <sys/stat.h>
25#endif
26
27#if AUFS_IO_THREADS
28#define NUMTHREADS AUFS_IO_THREADS
29#else
30#define NUMTHREADS (Config.cacheSwap.n_configured*16)
31#endif
32
33/* Queue limit where swapouts are deferred (load calculation) */
34#define MAGIC1 (NUMTHREADS*Config.cacheSwap.n_configured*5)
35/* Queue limit where swapins are deferred (open/create fails) */
36#define MAGIC2 (NUMTHREADS*Config.cacheSwap.n_configured*20)
37
38/* Which operations to run async */
39#define ASYNC_OPEN 1
40#define ASYNC_CLOSE 0
41#define ASYNC_CREATE 1
42#define ASYNC_WRITE 0
43#define ASYNC_READ 1
44
45enum _squidaio_request_type {
46    _AIO_OP_NONE = 0,
47    _AIO_OP_OPEN,
48    _AIO_OP_READ,
49    _AIO_OP_WRITE,
50    _AIO_OP_CLOSE,
51    _AIO_OP_UNLINK,
52    _AIO_OP_OPENDIR,
53    _AIO_OP_STAT
54};
55typedef enum _squidaio_request_type squidaio_request_type;
56
57typedef void AIOCB(int fd, void *cbdata, const char *buf, int aio_return, int aio_errno);
58
59struct squidaio_result_t {
60    int aio_return;
61    int aio_errno;
62    enum _squidaio_request_type result_type;
63    void *_data;        /* Internal housekeeping */
64    void *data;         /* Available to the caller */
65};
66
67struct squidaio_ctrl_t {
68
69    struct squidaio_ctrl_t *next;
70    int fd;
71    int operation;
72    AIOCB *done_handler;
73    void *done_handler_data;
74    squidaio_result_t result;
75    int len;
76    char *bufp;
77    FREE *free_func;
78    dlink_node node;
79};
80
81void squidaio_init(void);
82void squidaio_shutdown(void);
83int squidaio_cancel(squidaio_result_t *);
84int squidaio_open(const char *, int, mode_t, squidaio_result_t *);
85int squidaio_read(int, char *, size_t, off_t, int, squidaio_result_t *);
86int squidaio_write(int, char *, size_t, off_t, int, squidaio_result_t *);
87int squidaio_close(int, squidaio_result_t *);
88
89int squidaio_stat(const char *, struct stat *, squidaio_result_t *);
90int squidaio_unlink(const char *, squidaio_result_t *);
91int squidaio_opendir(const char *, squidaio_result_t *);
92squidaio_result_t *squidaio_poll_done(void);
93int squidaio_operations_pending(void);
94int squidaio_sync(void);
95int squidaio_get_queue_len(void);
96void *squidaio_xmalloc(int size);
97void squidaio_xfree(void *p, int size);
98void squidaio_stats(StoreEntry *);
99
100void aioInit(void);
101void aioDone(void);
102void aioCancel(int);
103void aioOpen(const char *, int, mode_t, AIOCB *, void *);
104void aioClose(int);
105void aioWrite(int, off_t offset, char *, size_t size, AIOCB *, void *, FREE *);
106void aioRead(int, off_t offset, size_t size, AIOCB *, void *);
107
108void aioStat(char *, struct stat *, AIOCB *, void *);
109void aioUnlink(const char *, AIOCB *, void *);
110int aioQueueSize(void);
111
112#include "DiskIO/DiskFile.h"
113
114class DiskThreadsIOStrategy;
115
116struct AIOCounts {
117    uint64_t open_start;
118    uint64_t open_finish;
119    uint64_t close_start;
120    uint64_t close_finish;
121    uint64_t cancel;
122    uint64_t write_start;
123    uint64_t write_finish;
124    uint64_t read_start;
125    uint64_t read_finish;
126    uint64_t stat_start;
127    uint64_t stat_finish;
128    uint64_t unlink_start;
129    uint64_t unlink_finish;
130    uint64_t check_callback;
131};
132
133extern AIOCounts squidaio_counts;
134extern dlink_list used_list;
135
136#endif
137
Note: See TracBrowser for help on using the repository browser.