]>
Commit | Line | Data |
---|---|---|
bbc27441 | 1 | /* |
ef57eb7b | 2 | * Copyright (C) 1996-2016 The Squid Software Foundation and contributors |
bbc27441 AJ |
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 | ||
cd748f27 | 9 | /* |
b9ae18aa | 10 | * DiskThreads.h |
cd748f27 | 11 | * |
b9ae18aa | 12 | * Internal declarations for the DiskThreads routines |
cd748f27 | 13 | */ |
14 | ||
b9ae18aa | 15 | #ifndef __DISKTHREADS_H__ |
16 | #define __DISKTHREADS_H__ | |
cd748f27 | 17 | |
02529124 | 18 | #include "dlink.h" |
6f5dc9e4 | 19 | #include "mem/forward.h" |
02529124 | 20 | |
1de2b87d FC |
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 | ||
32d002cb | 27 | #if AUFS_IO_THREADS |
f85c88f3 | 28 | #define NUMTHREADS AUFS_IO_THREADS |
cd748f27 | 29 | #else |
55f0e6f7 | 30 | #define NUMTHREADS (Config.cacheSwap.n_configured*16) |
cd748f27 | 31 | #endif |
32 | ||
55f0e6f7 | 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 | |
cd748f27 | 44 | |
12e137b0 | 45 | enum _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, | |
12e137b0 | 52 | _AIO_OP_OPENDIR, |
53 | _AIO_OP_STAT | |
54 | }; | |
55 | typedef enum _squidaio_request_type squidaio_request_type; | |
56 | ||
b9ae18aa | 57 | typedef void AIOCB(int fd, void *cbdata, const char *buf, int aio_return, int aio_errno); |
58 | ||
91ea1911 FC |
59 | class squidaio_result_t { |
60 | public: | |
61 | squidaio_result_t() : aio_return(0), aio_errno(0), result_type(_AIO_OP_NONE), _data(nullptr), data(nullptr) {} | |
cd748f27 | 62 | int aio_return; |
63 | int aio_errno; | |
12e137b0 | 64 | enum _squidaio_request_type result_type; |
f53969cc SM |
65 | void *_data; /* Internal housekeeping */ |
66 | void *data; /* Available to the caller */ | |
cd748f27 | 67 | }; |
68 | ||
91ea1911 FC |
69 | class squidaio_ctrl_t { |
70 | MEMPROXY_CLASS(squidaio_ctrl_t); | |
71 | public: | |
72 | squidaio_ctrl_t() : next(nullptr), fd(0), operation(0), done_handler(nullptr), done_handler_data(nullptr), len(0), bufp(0), free_func(nullptr) {} | |
b9ae18aa | 73 | struct squidaio_ctrl_t *next; |
74 | int fd; | |
75 | int operation; | |
76 | AIOCB *done_handler; | |
77 | void *done_handler_data; | |
78 | squidaio_result_t result; | |
79 | int len; | |
80 | char *bufp; | |
81 | FREE *free_func; | |
82 | dlink_node node; | |
83 | }; | |
cd748f27 | 84 | |
d06925a4 | 85 | void squidaio_init(void); |
86 | void squidaio_shutdown(void); | |
c04d4f40 | 87 | int squidaio_cancel(squidaio_result_t *); |
88 | int squidaio_open(const char *, int, mode_t, squidaio_result_t *); | |
ee139403 | 89 | int squidaio_read(int, char *, size_t, off_t, int, squidaio_result_t *); |
90 | int squidaio_write(int, char *, size_t, off_t, int, squidaio_result_t *); | |
c04d4f40 | 91 | int squidaio_close(int, squidaio_result_t *); |
62e76326 | 92 | |
c04d4f40 | 93 | int squidaio_stat(const char *, struct stat *, squidaio_result_t *); |
94 | int squidaio_unlink(const char *, squidaio_result_t *); | |
c04d4f40 | 95 | int squidaio_opendir(const char *, squidaio_result_t *); |
96 | squidaio_result_t *squidaio_poll_done(void); | |
97 | int squidaio_operations_pending(void); | |
98 | int squidaio_sync(void); | |
99 | int squidaio_get_queue_len(void); | |
211f1d0b | 100 | void *squidaio_xmalloc(int size); |
101 | void squidaio_xfree(void *p, int size); | |
b0465494 | 102 | void squidaio_stats(StoreEntry *); |
cd748f27 | 103 | |
104 | void aioInit(void); | |
105 | void aioDone(void); | |
a4b8110e | 106 | void aioCancel(int); |
107 | void aioOpen(const char *, int, mode_t, AIOCB *, void *); | |
cd748f27 | 108 | void aioClose(int); |
ee139403 | 109 | void aioWrite(int, off_t offset, char *, size_t size, AIOCB *, void *, FREE *); |
110 | void aioRead(int, off_t offset, size_t size, AIOCB *, void *); | |
62e76326 | 111 | |
cd748f27 | 112 | void aioStat(char *, struct stat *, AIOCB *, void *); |
113 | void aioUnlink(const char *, AIOCB *, void *); | |
a4b8110e | 114 | int aioQueueSize(void); |
cd748f27 | 115 | |
b9ae18aa | 116 | #include "DiskIO/DiskFile.h" |
d3b3ab85 | 117 | |
b9ae18aa | 118 | class DiskThreadsIOStrategy; |
62e76326 | 119 | |
26ac0430 | 120 | struct AIOCounts { |
22cec59e AJ |
121 | uint64_t open_start; |
122 | uint64_t open_finish; | |
123 | uint64_t close_start; | |
124 | uint64_t close_finish; | |
125 | uint64_t cancel; | |
126 | uint64_t write_start; | |
127 | uint64_t write_finish; | |
128 | uint64_t read_start; | |
129 | uint64_t read_finish; | |
130 | uint64_t stat_start; | |
131 | uint64_t stat_finish; | |
132 | uint64_t unlink_start; | |
133 | uint64_t unlink_finish; | |
134 | uint64_t check_callback; | |
d3b3ab85 | 135 | }; |
136 | ||
b9ae18aa | 137 | extern AIOCounts squidaio_counts; |
138 | extern dlink_list used_list; | |
cd748f27 | 139 | |
140 | #endif | |
f53969cc | 141 |