2 * Copyright (C) 1996-2016 The Squid Software Foundation and contributors
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.
12 * Internal declarations for the DiskThreads routines
15 #ifndef __DISKTHREADS_H__
16 #define __DISKTHREADS_H__
19 #include "mem/forward.h"
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) */
28 #define NUMTHREADS AUFS_IO_THREADS
30 #define NUMTHREADS (Config.cacheSwap.n_configured*16)
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)
38 /* Which operations to run async */
41 #define ASYNC_CREATE 1
45 enum _squidaio_request_type
{
55 typedef enum _squidaio_request_type squidaio_request_type
;
57 typedef void AIOCB(int fd
, void *cbdata
, const char *buf
, int aio_return
, int aio_errno
);
59 class squidaio_result_t
64 enum _squidaio_request_type result_type
= _AIO_OP_NONE
;
65 void *_data
= nullptr; /* Internal housekeeping */
66 void *data
= nullptr; /* Available to the caller */
71 MEMPROXY_CLASS(squidaio_ctrl_t
);
73 squidaio_ctrl_t() : done_handler(NULL
), free_func(NULL
) {}
75 squidaio_ctrl_t
*next
= nullptr;
79 void *done_handler_data
= nullptr;
80 squidaio_result_t result
;
87 void squidaio_init(void);
88 void squidaio_shutdown(void);
89 int squidaio_cancel(squidaio_result_t
*);
90 int squidaio_open(const char *, int, mode_t
, squidaio_result_t
*);
91 int squidaio_read(int, char *, size_t, off_t
, int, squidaio_result_t
*);
92 int squidaio_write(int, char *, size_t, off_t
, int, squidaio_result_t
*);
93 int squidaio_close(int, squidaio_result_t
*);
95 int squidaio_stat(const char *, struct stat
*, squidaio_result_t
*);
96 int squidaio_unlink(const char *, squidaio_result_t
*);
97 int squidaio_opendir(const char *, squidaio_result_t
*);
98 squidaio_result_t
*squidaio_poll_done(void);
99 int squidaio_operations_pending(void);
100 int squidaio_sync(void);
101 int squidaio_get_queue_len(void);
102 void *squidaio_xmalloc(int size
);
103 void squidaio_xfree(void *p
, int size
);
104 void squidaio_stats(StoreEntry
*);
109 void aioOpen(const char *, int, mode_t
, AIOCB
*, void *);
111 void aioWrite(int, off_t offset
, char *, size_t size
, AIOCB
*, void *, FREE
*);
112 void aioRead(int, off_t offset
, size_t size
, AIOCB
*, void *);
114 void aioStat(char *, struct stat
*, AIOCB
*, void *);
115 void aioUnlink(const char *, AIOCB
*, void *);
116 int aioQueueSize(void);
118 #include "DiskIO/DiskFile.h"
120 class DiskThreadsIOStrategy
;
125 uint64_t open_start
= 0;
126 uint64_t open_finish
= 0;
127 uint64_t close_start
= 0;
128 uint64_t close_finish
= 0;
130 uint64_t write_start
= 0;
131 uint64_t write_finish
= 0;
132 uint64_t read_start
= 0;
133 uint64_t read_finish
= 0;
134 uint64_t stat_start
= 0;
135 uint64_t stat_finish
= 0;
136 uint64_t unlink_start
= 0;
137 uint64_t unlink_finish
= 0;
138 uint64_t check_callback
= 0;
141 extern AIOCounts squidaio_counts
;
142 extern dlink_list used_list
;