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 | |
---|
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, |
---|
52 | _AIO_OP_OPENDIR, |
---|
53 | _AIO_OP_STAT |
---|
54 | }; |
---|
55 | typedef enum _squidaio_request_type squidaio_request_type; |
---|
56 | |
---|
57 | typedef void AIOCB(int fd, void *cbdata, const char *buf, int aio_return, int aio_errno); |
---|
58 | |
---|
59 | struct 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 | |
---|
67 | struct 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 | |
---|
81 | void squidaio_init(void); |
---|
82 | void squidaio_shutdown(void); |
---|
83 | int squidaio_cancel(squidaio_result_t *); |
---|
84 | int squidaio_open(const char *, int, mode_t, squidaio_result_t *); |
---|
85 | int squidaio_read(int, char *, size_t, off_t, int, squidaio_result_t *); |
---|
86 | int squidaio_write(int, char *, size_t, off_t, int, squidaio_result_t *); |
---|
87 | int squidaio_close(int, squidaio_result_t *); |
---|
88 | |
---|
89 | int squidaio_stat(const char *, struct stat *, squidaio_result_t *); |
---|
90 | int squidaio_unlink(const char *, squidaio_result_t *); |
---|
91 | int squidaio_opendir(const char *, squidaio_result_t *); |
---|
92 | squidaio_result_t *squidaio_poll_done(void); |
---|
93 | int squidaio_operations_pending(void); |
---|
94 | int squidaio_sync(void); |
---|
95 | int squidaio_get_queue_len(void); |
---|
96 | void *squidaio_xmalloc(int size); |
---|
97 | void squidaio_xfree(void *p, int size); |
---|
98 | void squidaio_stats(StoreEntry *); |
---|
99 | |
---|
100 | void aioInit(void); |
---|
101 | void aioDone(void); |
---|
102 | void aioCancel(int); |
---|
103 | void aioOpen(const char *, int, mode_t, AIOCB *, void *); |
---|
104 | void aioClose(int); |
---|
105 | void aioWrite(int, off_t offset, char *, size_t size, AIOCB *, void *, FREE *); |
---|
106 | void aioRead(int, off_t offset, size_t size, AIOCB *, void *); |
---|
107 | |
---|
108 | void aioStat(char *, struct stat *, AIOCB *, void *); |
---|
109 | void aioUnlink(const char *, AIOCB *, void *); |
---|
110 | int aioQueueSize(void); |
---|
111 | |
---|
112 | #include "DiskIO/DiskFile.h" |
---|
113 | |
---|
114 | class DiskThreadsIOStrategy; |
---|
115 | |
---|
116 | struct 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 | |
---|
133 | extern AIOCounts squidaio_counts; |
---|
134 | extern dlink_list used_list; |
---|
135 | |
---|
136 | #endif |
---|
137 | |
---|