|
Squid Web Cache master
|
#include "squid.h"#include "compat/socket.h"#include "compat/unistd.h"#include "DiskIO/DiskThreads/CommIO.h"#include "DiskThreads.h"#include "SquidConfig.h"#include "Store.h"#include "mem/Allocator.h"#include "mem/Pool.h"#include <cerrno>#include <csignal>#include <sys/stat.h>#include <fcntl.h>#include <pthread.h>#include <dirent.h>Go to the source code of this file.
Classes | |
| struct | squidaio_request_t |
| struct | squidaio_request_queue_t |
| struct | squidaio_thread_t |
Macros | |
| #define | RIDICULOUS_LENGTH 4096 |
| #define | AIO_LARGE_BUFS 16384 |
| #define | AIO_MEDIUM_BUFS AIO_LARGE_BUFS >> 1 |
| #define | AIO_SMALL_BUFS AIO_LARGE_BUFS >> 2 |
| #define | AIO_TINY_BUFS AIO_LARGE_BUFS >> 3 |
| #define | AIO_MICRO_BUFS 128 |
Typedefs | |
| typedef enum _squidaio_thread_status | squidaio_thread_status |
| typedef struct squidaio_request_t | squidaio_request_t |
| typedef struct squidaio_request_queue_t | squidaio_request_queue_t |
| typedef struct squidaio_thread_t | squidaio_thread_t |
Enumerations | |
| enum | _squidaio_thread_status { _THREAD_STARTING = 0 , _THREAD_WAITING , _THREAD_BUSY , _THREAD_FAILED , _THREAD_DONE } |
Variables | ||
| static squidaio_thread_t * | threads = nullptr | |
| static int | squidaio_initialised = 0 | |
| static Mem::Allocator * | squidaio_large_bufs = nullptr | |
| static Mem::Allocator * | squidaio_medium_bufs = nullptr | |
| static Mem::Allocator * | squidaio_small_bufs = nullptr | |
| static Mem::Allocator * | squidaio_tiny_bufs = nullptr | |
| static Mem::Allocator * | squidaio_micro_bufs = nullptr | |
| static size_t | request_queue_len = 0 | |
| static Mem::Allocator * | squidaio_request_pool = nullptr | |
| static Mem::Allocator * | squidaio_thread_pool = nullptr | |
| static squidaio_request_queue_t | request_queue | |
| struct { | ||
| squidaio_request_t * head | ||
| squidaio_request_t ** tailp | ||
| } | request_queue2 | |
| static squidaio_request_queue_t | done_queue | |
| struct { | ||
| squidaio_request_t * head | ||
| squidaio_request_t ** tailp | ||
| } | done_requests | |
| static pthread_attr_t | globattr | |
| static pthread_t | main_thread | |
| #define AIO_MEDIUM_BUFS AIO_LARGE_BUFS >> 1 |
| #define AIO_SMALL_BUFS AIO_LARGE_BUFS >> 2 |
| #define AIO_TINY_BUFS AIO_LARGE_BUFS >> 3 |
| typedef struct squidaio_request_queue_t squidaio_request_queue_t |
| typedef struct squidaio_request_t squidaio_request_t |
| typedef enum _squidaio_thread_status squidaio_thread_status |
| typedef struct squidaio_thread_t squidaio_thread_t |
| int squidaio_cancel | ( | squidaio_result_t * | resultp | ) |
Definition at line 622 of file aiops.cc.
References _AIO_OP_NONE, squidaio_result_t::_data, squidaio_request_t::cancelled, debugs, squidaio_request_t::request_type, squidaio_result_t::result_type, and squidaio_request_t::resultp.
Referenced by aioCancel().
|
static |
Definition at line 559 of file aiops.cc.
References _AIO_OP_CLOSE, _AIO_OP_OPEN, _AIO_OP_OPENDIR, _AIO_OP_READ, _AIO_OP_STAT, _AIO_OP_UNLINK, _AIO_OP_WRITE, squidaio_result_t::aio_errno, squidaio_result_t::aio_return, squidaio_request_t::cancelled, squidaio_request_t::err, squidaio_request_t::fd, Mem::Allocator::freeOne(), squidaio_request_t::path, squidaio_request_t::request_type, squidaio_request_t::resultp, squidaio_request_t::ret, squidaio_request_pool, squidaio_xfree(), squidaio_xstrfree(), squidaio_request_t::statp, squidaio_request_t::tmpstatp, and xclose().
Referenced by squidaio_poll_done().
| int squidaio_close | ( | int | fd, |
| squidaio_result_t * | resultp | ||
| ) |
Definition at line 750 of file aiops.cc.
References _AIO_OP_CLOSE, Mem::Allocator::alloc(), squidaio_request_t::cancelled, squidaio_request_t::fd, squidaio_request_t::request_type, squidaio_result_t::result_type, squidaio_request_t::resultp, squidaio_queue_request(), and squidaio_request_pool.
Referenced by aioClose().
|
static |
Definition at line 970 of file aiops.cc.
References _AIO_OP_CLOSE, _AIO_OP_OPEN, _AIO_OP_READ, _AIO_OP_UNLINK, _AIO_OP_WRITE, debugs, squidaio_request_t::fd, squidaio_request_t::path, squidaio_request_t::request_type, and squidaio_request_t::ret.
Referenced by squidaio_poll_done().
|
static |
Definition at line 772 of file aiops.cc.
References squidaio_request_t::err, squidaio_request_t::fd, squidaio_request_t::ret, and xclose().
Referenced by squidaio_thread_loop().
|
static |
Definition at line 666 of file aiops.cc.
References squidaio_request_t::err, squidaio_request_t::mode, squidaio_request_t::oflag, squidaio_request_t::path, and squidaio_request_t::ret.
Referenced by squidaio_thread_loop().
|
static |
Definition at line 703 of file aiops.cc.
References squidaio_request_t::bufferp, squidaio_request_t::buflen, squidaio_request_t::err, squidaio_request_t::fd, squidaio_request_t::offset, squidaio_request_t::ret, squidaio_request_t::whence, and xread().
Referenced by squidaio_thread_loop().
|
static |
Definition at line 807 of file aiops.cc.
References squidaio_request_t::err, squidaio_request_t::path, squidaio_request_t::ret, and squidaio_request_t::tmpstatp.
Referenced by squidaio_thread_loop().
|
static |
Definition at line 837 of file aiops.cc.
References squidaio_request_t::err, squidaio_request_t::path, and squidaio_request_t::ret.
Referenced by squidaio_thread_loop().
|
static |
Definition at line 743 of file aiops.cc.
References squidaio_request_t::bufferp, squidaio_request_t::buflen, squidaio_request_t::err, squidaio_request_t::fd, squidaio_request_t::ret, and xwrite().
Referenced by squidaio_thread_loop().
|
static |
Definition at line 154 of file aiops.cc.
References AIO_LARGE_BUFS, AIO_MEDIUM_BUFS, AIO_MICRO_BUFS, AIO_SMALL_BUFS, AIO_TINY_BUFS, size, squidaio_large_bufs, squidaio_medium_bufs, squidaio_micro_bufs, squidaio_small_bufs, and squidaio_tiny_bufs.
Referenced by squidaio_xfree(), squidaio_xmalloc(), and squidaio_xstrfree().
| int squidaio_get_queue_len | ( | void | ) |
Definition at line 964 of file aiops.cc.
References request_queue_len.
Referenced by DiskThreadsIOStrategy::aioStats().
| void squidaio_init | ( | void | ) |
Definition at line 218 of file aiops.cc.
References _THREAD_FAILED, _THREAD_STARTING, AIO_LARGE_BUFS, AIO_MEDIUM_BUFS, AIO_MICRO_BUFS, AIO_SMALL_BUFS, AIO_TINY_BUFS, Mem::Allocator::alloc(), assert, squidaio_request_queue_t::blocked, squidaio_request_queue_t::cond, squidaio_thread_t::current_req, done_queue, fatal(), globattr, squidaio_request_queue_t::head, CommIO::Initialize(), main_thread, memPoolCreate, squidaio_request_queue_t::mutex, squidaio_thread_t::next, NUMTHREADS, request_queue, squidaio_request_queue_t::requests, squidaio_thread_t::requests, squidaio_initialised, squidaio_large_bufs, squidaio_medium_bufs, squidaio_micro_bufs, squidaio_request_pool, squidaio_small_bufs, squidaio_thread_loop(), squidaio_thread_pool, squidaio_tiny_bufs, squidaio_thread_t::status, squidaio_request_queue_t::tailp, squidaio_thread_t::thread, and threads.
Referenced by squidaio_open(), squidaio_stat(), and squidaio_unlink().
| int squidaio_open | ( | const char * | path, |
| int | oflag, | ||
| mode_t | mode, | ||
| squidaio_result_t * | resultp | ||
| ) |
Definition at line 639 of file aiops.cc.
References _AIO_OP_OPEN, Mem::Allocator::alloc(), squidaio_request_t::cancelled, squidaio_request_t::mode, squidaio_request_t::oflag, squidaio_request_t::path, squidaio_request_t::request_type, squidaio_result_t::result_type, squidaio_request_t::resultp, squidaio_init(), squidaio_queue_request(), squidaio_request_pool, and squidaio_xstrdup().
Referenced by aioOpen().
| int squidaio_operations_pending | ( | void | ) |
Definition at line 946 of file aiops.cc.
References done_requests, and request_queue_len.
Referenced by squidaio_sync().
| squidaio_result_t * squidaio_poll_done | ( | void | ) |
Definition at line 902 of file aiops.cc.
References squidaio_request_t::cancelled, debugs, done_requests, squidaio_request_t::err, squidaio_request_t::next, squidaio_request_t::request_type, CommIO::ResetNotifications(), squidaio_request_t::resultp, squidaio_request_t::ret, squidaio_cleanup_request(), squidaio_debug(), and squidaio_poll_queues().
Referenced by DiskThreadsIOStrategy::callback().
|
static |
Definition at line 868 of file aiops.cc.
References squidaio_request_queue_t::cond, done_queue, done_requests, squidaio_request_queue_t::head, squidaio_request_queue_t::mutex, squidaio_request_t::next, request_queue, request_queue2, request_queue_len, and squidaio_request_queue_t::tailp.
Referenced by squidaio_poll_done(), squidaio_shutdown(), and squidaio_sync().
|
static |
Definition at line 465 of file aiops.cc.
References squidaio_result_t::_data, squidaio_request_queue_t::cond, DBG_CRITICAL, DBG_IMPORTANT, debugs, squidaio_request_t::err, MAGIC1, squidaio_request_queue_t::mutex, squidaio_request_t::next, request_queue, request_queue2, request_queue_len, squidaio_request_t::request_type, squidaio_request_t::resultp, squidaio_request_t::ret, RIDICULOUS_LENGTH, squid_curtime, squidaio_sync(), and squidaio_request_queue_t::tailp.
Referenced by squidaio_close(), squidaio_open(), squidaio_read(), squidaio_stat(), squidaio_unlink(), and squidaio_write().
| int squidaio_read | ( | int | fd, |
| char * | bufp, | ||
| size_t | bufs, | ||
| off_t | offset, | ||
| int | whence, | ||
| squidaio_result_t * | resultp | ||
| ) |
Definition at line 673 of file aiops.cc.
References _AIO_OP_READ, Mem::Allocator::alloc(), squidaio_request_t::bufferp, squidaio_request_t::buflen, squidaio_request_t::cancelled, squidaio_request_t::fd, squidaio_request_t::offset, squidaio_request_t::request_type, squidaio_result_t::result_type, squidaio_request_t::resultp, squidaio_queue_request(), squidaio_request_pool, and squidaio_request_t::whence.
Referenced by aioRead().
| void squidaio_shutdown | ( | void | ) |
Definition at line 330 of file aiops.cc.
References CommIO::NotifyIOClose(), request_queue_len, squidaio_initialised, and squidaio_poll_queues().
Referenced by DiskThreadsIOStrategy::done().
| int squidaio_stat | ( | const char * | path, |
| struct stat * | sb, | ||
| squidaio_result_t * | resultp | ||
| ) |
Definition at line 780 of file aiops.cc.
References _AIO_OP_STAT, Mem::Allocator::alloc(), squidaio_request_t::cancelled, squidaio_request_t::path, squidaio_request_t::request_type, squidaio_result_t::result_type, squidaio_request_t::resultp, squidaio_init(), squidaio_queue_request(), squidaio_request_pool, squidaio_xmalloc(), squidaio_xstrdup(), squidaio_request_t::statp, and squidaio_request_t::tmpstatp.
Referenced by aioStat().
| void squidaio_stats | ( | StoreEntry * | sentry | ) |
Definition at line 1000 of file aiops.cc.
References squidaio_thread_t::next, NUMTHREADS, squidaio_thread_t::requests, squidaio_initialised, storeAppendPrintf(), squidaio_thread_t::thread, and threads.
Referenced by DiskThreadsIOStrategy::aioStats().
| int squidaio_sync | ( | void | ) |
Definition at line 952 of file aiops.cc.
References request_queue_len, squidaio_operations_pending(), and squidaio_poll_queues().
Referenced by squidaio_queue_request(), and DiskThreadsIOStrategy::sync().
| void * squidaio_thread_loop | ( | void * | ptr | ) |
Definition at line 346 of file aiops.cc.
References _AIO_OP_CLOSE, _AIO_OP_OPEN, _AIO_OP_OPENDIR, _AIO_OP_READ, _AIO_OP_STAT, _AIO_OP_UNLINK, _AIO_OP_WRITE, _THREAD_BUSY, _THREAD_DONE, _THREAD_WAITING, squidaio_request_t::cancelled, squidaio_request_queue_t::cond, squidaio_thread_t::current_req, done_queue, squidaio_request_t::err, squidaio_request_queue_t::head, squidaio_request_queue_t::mutex, squidaio_request_t::next, CommIO::NotifyIOCompleted(), request_queue, squidaio_request_t::request_type, squidaio_thread_t::requests, squidaio_request_t::ret, squidaio_do_close(), squidaio_do_open(), squidaio_do_read(), squidaio_do_stat(), squidaio_do_unlink(), squidaio_do_write(), squidaio_thread_t::status, and squidaio_request_queue_t::tailp.
Referenced by squidaio_init().
| int squidaio_unlink | ( | const char * | path, |
| squidaio_result_t * | resultp | ||
| ) |
Definition at line 814 of file aiops.cc.
References _AIO_OP_UNLINK, Mem::Allocator::alloc(), squidaio_request_t::cancelled, squidaio_request_t::path, squidaio_request_t::request_type, squidaio_result_t::result_type, squidaio_request_t::resultp, squidaio_init(), squidaio_queue_request(), squidaio_request_pool, and squidaio_xstrdup().
Referenced by aioUnlink().
| int squidaio_write | ( | int | fd, |
| char * | bufp, | ||
| size_t | bufs, | ||
| off_t | offset, | ||
| int | whence, | ||
| squidaio_result_t * | resultp | ||
| ) |
Definition at line 713 of file aiops.cc.
References _AIO_OP_WRITE, Mem::Allocator::alloc(), squidaio_request_t::bufferp, squidaio_request_t::buflen, squidaio_request_t::cancelled, squidaio_request_t::fd, squidaio_request_t::offset, squidaio_request_t::request_type, squidaio_result_t::result_type, squidaio_request_t::resultp, squidaio_queue_request(), squidaio_request_pool, and squidaio_request_t::whence.
Referenced by aioWrite().
| void squidaio_xfree | ( | void * | p, |
| int | size | ||
| ) |
Definition at line 198 of file aiops.cc.
References size, squidaio_get_pool(), and xfree.
Referenced by aioCancel(), DiskThreadsIOStrategy::callback(), and squidaio_cleanup_request().
| void * squidaio_xmalloc | ( | int | size | ) |
Definition at line 173 of file aiops.cc.
References Mem::Allocator::alloc(), size, squidaio_get_pool(), and xmalloc.
Referenced by aioRead(), squidaio_stat(), and squidaio_xstrdup().
|
static |
Definition at line 186 of file aiops.cc.
References squidaio_xmalloc().
Referenced by squidaio_open(), squidaio_stat(), and squidaio_unlink().
|
static |
Definition at line 207 of file aiops.cc.
References squidaio_get_pool(), and xfree.
Referenced by squidaio_cleanup_request().
|
static |
Definition at line 136 of file aiops.cc.
Referenced by squidaio_init(), squidaio_poll_queues(), and squidaio_thread_loop().
| struct { ... } done_requests |
Referenced by squidaio_operations_pending(), squidaio_poll_done(), and squidaio_poll_queues().
|
static |
Definition at line 146 of file aiops.cc.
Referenced by squidaio_init().
| squidaio_request_t* head |
Definition at line 129 of file aiops.cc.
Referenced by Security::Sslv2Record::Sslv2Record(), CbDataListContainer< C >::~CbDataListContainer(), aclFindNfMarkConfig(), aclMapTOS(), aclParseDenyInfoLine(), Splay< V >::begin(), AsyncCall::dequeue(), Splay< V >::destroy(), dump_acl_access(), dump_acl_address(), dump_acl_b_size_t(), dump_acl_list(), dump_acl_tos(), dump_refreshpattern(), CbDataListContainer< C >::empty(), Adaptation::Icap::ModXact::encapsulateHead(), Splay< V >::find(), Splay< V >::finish(), for_each(), free_acl_access(), free_acl_address(), free_acl_b_size_t(), free_acl_tos(), free_cachemgrpasswd(), free_dict(), free_IpAddress_list(), free_refreshpattern(), gen_conf(), gen_default(), gen_default_if_none(), gen_default_postscriptum(), gen_dump(), gen_free(), gen_parse(), idnsSendQueryVC(), IncreaseSum(), SplayConstIterator< V >::init(), Splay< V >::insert(), Security::HandshakeParser::isSslv2Record(), Instance::NamePrefix(), Adaptation::Icap::ModXact::packHead(), parse_acl_access(), parse_acl_address(), parse_acl_b_size_t(), parse_acl_tos(), parse_cachemgrpasswd(), parse_IpAddress_list(), parse_refreshpattern(), Ftp::Client::parseControlReply(), Adaptation::Icap::ModXact::parseHead(), parsePortCfg(), CbDataListContainer< C >::pop_front(), CbDataListContainer< C >::push_back(), Splay< V >::remove(), Splay< V >::start(), Splay< V >::visitEach(), wccp2SortCacheList(), and ClientInfo::writeOrDequeue().
|
static |
Definition at line 151 of file aiops.cc.
Referenced by squidaio_init().
|
static |
Definition at line 126 of file aiops.cc.
Referenced by squidaio_init(), squidaio_poll_queues(), squidaio_queue_request(), and squidaio_thread_loop().
| struct { ... } request_queue2 |
Referenced by squidaio_poll_queues(), and squidaio_queue_request().
|
static |
Definition at line 123 of file aiops.cc.
Referenced by squidaio_get_queue_len(), squidaio_operations_pending(), squidaio_poll_queues(), squidaio_queue_request(), squidaio_shutdown(), and squidaio_sync().
|
static |
Definition at line 109 of file aiops.cc.
Referenced by squidaio_init(), squidaio_shutdown(), and squidaio_stats().
|
static |
Definition at line 117 of file aiops.cc.
Referenced by squidaio_get_pool(), and squidaio_init().
|
static |
Definition at line 118 of file aiops.cc.
Referenced by squidaio_get_pool(), and squidaio_init().
|
static |
Definition at line 121 of file aiops.cc.
Referenced by squidaio_get_pool(), and squidaio_init().
|
static |
Definition at line 124 of file aiops.cc.
Referenced by squidaio_cleanup_request(), squidaio_close(), squidaio_init(), squidaio_open(), squidaio_read(), squidaio_stat(), squidaio_unlink(), and squidaio_write().
|
static |
Definition at line 119 of file aiops.cc.
Referenced by squidaio_get_pool(), and squidaio_init().
|
static |
Definition at line 125 of file aiops.cc.
Referenced by squidaio_init().
|
static |
Definition at line 120 of file aiops.cc.
Referenced by squidaio_get_pool(), and squidaio_init().
| squidaio_request_t ** tailp |
|
static |
Definition at line 108 of file aiops.cc.
Referenced by squidaio_init(), and squidaio_stats().