Whamcloud - gitweb
New RC 2.16.0-RC5
[fs/lustre-release.git] / lustre / include / lustre_nrs_crr.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2
3 /*
4  * Copyright (c) 2014, Intel Corporation.
5  *
6  * Copyright 2012 Xyratex Technology Limited
7  */
8
9 /*
10  * This file is part of Lustre, http://www.lustre.org/
11  *
12  * Network Request Scheduler (NRS) Client Round Robin over NIDs (CRR-N) policy
13  */
14
15 #ifndef _LUSTRE_NRS_CRR_H
16 #define _LUSTRE_NRS_CRR_H
17
18 /**
19  * \name CRR-N
20  *
21  * CRR-N, Client Round Robin over NIDs
22  * @{
23  */
24 #include <libcfs/linux/linux-hash.h>
25
26 /**
27  * private data structure for CRR-N NRS
28  */
29 struct nrs_crrn_net {
30         struct ptlrpc_nrs_resource      cn_res;
31         struct binheap         *cn_binheap;
32         /* CRR-N NRS - NID hash body */
33         struct rhashtable               cn_cli_hash;
34         /**
35          * Used when a new scheduling round commences, in order to synchronize
36          * all clients with the new round number.
37          */
38         __u64                           cn_round;
39         /**
40          * Determines the relevant ordering amongst request batches within a
41          * scheduling round.
42          */
43         __u64                           cn_sequence;
44         /**
45          * Round Robin quantum; the maximum number of RPCs that each request
46          * batch for each client can have in a scheduling round.
47          */
48         __u16                           cn_quantum;
49 };
50
51 /**
52  * Object representing a client in CRR-N, as identified by its NID
53  */
54 struct nrs_crrn_client {
55         struct ptlrpc_nrs_resource      cc_res;
56         struct rhash_head               cc_rhead;
57         struct lnet_nid                 cc_nid;
58         /**
59          * The round number against which this client is currently scheduling
60          * requests.
61          */
62         __u64                           cc_round;
63         /**
64          * The sequence number used for requests scheduled by this client during
65          * the current round number.
66          */
67         __u64                           cc_sequence;
68         atomic_t                        cc_ref;
69         /**
70          * Round Robin quantum; the maximum number of RPCs the client is allowed
71          * to schedule in a single batch of each round.
72          */
73         __u16                           cc_quantum;
74         /**
75          * # of pending requests for this client, on all existing rounds
76          */
77         __u16                           cc_active;
78 };
79
80 /**
81  * CRR-N NRS request definition
82  */
83 struct nrs_crrn_req {
84         /**
85          * Round number for this request; shared with all other requests in the
86          * same batch.
87          */
88         __u64                   cr_round;
89         /**
90          * Sequence number for this request; shared with all other requests in
91          * the same batch.
92          */
93         __u64                   cr_sequence;
94 };
95
96 /**
97  * CRR-N policy operations.
98  *
99  * Read the RR quantum size of a CRR-N policy.
100  */
101 #define NRS_CTL_CRRN_RD_QUANTUM PTLRPC_NRS_CTL_POL_SPEC_01
102 /**
103  * Write the RR quantum size of a CRR-N policy.
104  */
105 #define NRS_CTL_CRRN_WR_QUANTUM PTLRPC_NRS_CTL_POL_SPEC_02
106
107 /** @} CRR-N */
108 #endif