]>
Commit | Line | Data |
---|---|---|
1 | /* | |
2 | * Copyright (C) 1996-2023 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 | /* DEBUG: section 79 Squid-side DISKD I/O functions. */ | |
10 | ||
11 | #ifndef __STORE_DISKDIOSTRATEGY_H__ | |
12 | #define __STORE_DISKDIOSTRATEGY_H__ | |
13 | ||
14 | struct diomsg; | |
15 | ||
16 | /// \ingroup diskd | |
17 | class SharedMemory | |
18 | { | |
19 | ||
20 | public: | |
21 | void put(ssize_t); | |
22 | void *get(ssize_t *); | |
23 | void init(int ikey, int magic2); | |
24 | SharedMemory() : nbufs(0), buf(nullptr), inuse_map(nullptr), id(0) {} | |
25 | ||
26 | int nbufs; | |
27 | char *buf; | |
28 | char *inuse_map; | |
29 | int id; | |
30 | }; | |
31 | ||
32 | #include "DiskIO/DiskIOStrategy.h" | |
33 | #include "StoreIOState.h" | |
34 | ||
35 | class DiskFile; | |
36 | ||
37 | class DiskdFile; | |
38 | class Lock; | |
39 | class ReadRequest; | |
40 | ||
41 | /// \ingroup diskd | |
42 | class DiskdIOStrategy : public DiskIOStrategy | |
43 | { | |
44 | ||
45 | public: | |
46 | DiskdIOStrategy(); | |
47 | bool shedLoad() override; | |
48 | int load() override; | |
49 | RefCount<DiskFile> newFile(char const *path) override; | |
50 | bool unlinkdUseful() const override; | |
51 | void unlinkFile (char const *) override; | |
52 | ConfigOption *getOptionTree() const override; | |
53 | void init() override; | |
54 | void sync() override; | |
55 | int callback() override; | |
56 | void statfs(StoreEntry & sentry) const override; | |
57 | int send(int mtype, int id, DiskdFile *theFile, size_t size, off_t offset, ssize_t shm_offset, Lock *requestor); | |
58 | ||
59 | /** public for accessing return address's */ | |
60 | SharedMemory shm; | |
61 | ||
62 | private: | |
63 | static size_t newInstance(); | |
64 | static size_t nextInstanceID; | |
65 | void openFailed(); | |
66 | bool optionQ1Parse(char const *option, const char *value, int reconfiguring); | |
67 | void optionQ1Dump(StoreEntry * e) const; | |
68 | bool optionQ2Parse(char const *option, const char *value, int reconfiguring); | |
69 | void optionQ2Dump(StoreEntry * e) const; | |
70 | int send(int mtype, int id, RefCount<StoreIOState> sio, size_t size, off_t offset, ssize_t shm_offset); | |
71 | int SEND(diomsg * M, int mtype, int id, size_t size, off_t offset, ssize_t shm_offset); | |
72 | void handle(diomsg * M); | |
73 | void unlinkDone(diomsg * M); | |
74 | ||
75 | /** | |
76 | * magic1 is the number of messages away which we | |
77 | * stop allowing open/create for. | |
78 | */ | |
79 | int magic1; | |
80 | ||
81 | /** | |
82 | * magic2 is the point at which we start blocking on msgsnd/msgrcv. | |
83 | * If a queue has magic2 (or more) messages away, then we read the | |
84 | * queue until the level falls below magic2. Recommended value | |
85 | * is 75% of SHMBUFS. | |
86 | */ | |
87 | int magic2; | |
88 | ||
89 | int away; | |
90 | int smsgid; | |
91 | int rmsgid; | |
92 | int wfd; | |
93 | size_t instanceID; | |
94 | }; | |
95 | ||
96 | /// \ingroup diskd | |
97 | #define SHMBUF_BLKSZ SM_PAGE_SIZE | |
98 | ||
99 | /// \ingroup diskd | |
100 | struct diskd_stats_t { | |
101 | int open_fail_queue_len; | |
102 | int block_queue_len; | |
103 | int max_away; | |
104 | int max_shmuse; | |
105 | int shmbuf_count; | |
106 | int sent_count; | |
107 | int recv_count; | |
108 | int sio_id; | |
109 | ||
110 | struct { | |
111 | int ops; | |
112 | int success; | |
113 | int fail; | |
114 | } | |
115 | ||
116 | open, create, close, unlink, read, write; | |
117 | }; | |
118 | ||
119 | /// \ingroup diskd | |
120 | extern diskd_stats_t diskd_stats; | |
121 | ||
122 | #endif | |
123 |