Whamcloud - gitweb
b=16098
[fs/lustre-release.git] / lnet / klnds / ptllnd / ptllnd_modparams.c
1 /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
2  * vim:expandtab:shiftwidth=8:tabstop=8:
3  *
4  * GPL HEADER START
5  *
6  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 only,
10  * as published by the Free Software Foundation.
11  *
12  * This program is distributed in the hope that it will be useful, but
13  * WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * General Public License version 2 for more details (a copy is included
16  * in the LICENSE file that accompanied this code).
17  *
18  * You should have received a copy of the GNU General Public License
19  * version 2 along with this program; If not, see [sun.com URL with a
20  * copy of GPLv2].
21  *
22  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
23  * CA 95054 USA or visit www.sun.com if you need additional information or
24  * have any questions.
25  *
26  * GPL HEADER END
27  */
28 /*
29  * Copyright  2008 Sun Microsystems, Inc. All rights reserved
30  * Use is subject to license terms.
31  */
32 /*
33  * This file is part of Lustre, http://www.lustre.org/
34  * Lustre is a trademark of Sun Microsystems, Inc.
35  *
36  * lnet/klnds/ptllnd/ptllnd_modparams.c
37  *
38  * Author: PJ Kirner <pjkirner@clusterfs.com>
39  */
40
41
42 #include "ptllnd.h"
43
44 static int ntx = 256;
45 CFS_MODULE_PARM(ntx, "i", int, 0444,
46                 "# of TX descriptors");
47
48 static int max_nodes = 1152;
49 CFS_MODULE_PARM(max_nodes, "i", int, 0444,
50                 "maximum number of peer nodes");
51
52 static int max_procs_per_node = 2;
53 CFS_MODULE_PARM(max_procs_per_node, "i", int, 0444,
54                 "maximum number of processes per peer node to cache");
55
56 static int checksum = 0;
57 CFS_MODULE_PARM(checksum, "i", int, 0644,
58                 "set non-zero to enable message (not RDMA) checksums");
59
60 static int timeout = 50;
61 CFS_MODULE_PARM(timeout, "i", int, 0644,
62                 "timeout (seconds)");
63
64 static int portal = PTLLND_PORTAL;              /* <lnet/ptllnd_wire.h> */
65 CFS_MODULE_PARM(portal, "i", int, 0444,
66                 "portal id");
67
68 static int pid = PTLLND_PID;                    /* <lnet/ptllnd_wire.h> */
69 CFS_MODULE_PARM(pid, "i", int, 0444,
70                 "portals pid");
71
72 static int rxb_npages = 1;
73 CFS_MODULE_PARM(rxb_npages, "i", int, 0444,
74                 "# of pages per rx buffer");
75
76 static int rxb_nspare = 8;
77 CFS_MODULE_PARM(rxb_nspare, "i", int, 0444,
78                 "# of spare rx buffers");
79
80 static int credits = 128;
81 CFS_MODULE_PARM(credits, "i", int, 0444,
82                 "concurrent sends");
83
84 static int peercredits = PTLLND_PEERCREDITS;    /* <lnet/ptllnd_wire.h> */
85 CFS_MODULE_PARM(peercredits, "i", int, 0444,
86                 "concurrent sends to 1 peer");
87
88 static int max_msg_size = PTLLND_MAX_KLND_MSG_SIZE;  /* <lnet/ptllnd_wire.h> */
89 CFS_MODULE_PARM(max_msg_size, "i", int, 0444,
90                 "max size of immediate message");
91
92 static int peer_hash_table_size = 101;
93 CFS_MODULE_PARM(peer_hash_table_size, "i", int, 0444,
94                 "# of slots in the peer hash table");
95
96 static int reschedule_loops = 100;
97 CFS_MODULE_PARM(reschedule_loops, "i", int, 0644,
98                 "# of loops before scheduler does cond_resched()");
99
100 static int ack_puts = 0;
101 CFS_MODULE_PARM(ack_puts, "i", int, 0644,
102                 "get portals to ack all PUTs");
103
104 #ifdef CRAY_XT3
105 static int ptltrace_on_timeout = 0;
106 CFS_MODULE_PARM(ptltrace_on_timeout, "i", int, 0644,
107                 "dump ptltrace on timeout");
108
109 static char *ptltrace_basename = "/tmp/lnet-ptltrace";
110 CFS_MODULE_PARM(ptltrace_basename, "s", charp, 0644,
111                 "ptltrace dump file basename");
112 #endif
113 #ifdef PJK_DEBUGGING
114 static int simulation_bitmap = 0;
115 CFS_MODULE_PARM(simulation_bitmap, "i", int, 0444,
116                 "simulation bitmap");
117 #endif
118
119
120 kptl_tunables_t kptllnd_tunables = {
121         .kptl_ntx                    = &ntx,
122         .kptl_max_nodes              = &max_nodes,
123         .kptl_max_procs_per_node     = &max_procs_per_node,
124         .kptl_checksum               = &checksum,
125         .kptl_portal                 = &portal,
126         .kptl_pid                    = &pid,
127         .kptl_timeout                = &timeout,
128         .kptl_rxb_npages             = &rxb_npages,
129         .kptl_rxb_nspare             = &rxb_nspare,
130         .kptl_credits                = &credits,
131         .kptl_peercredits            = &peercredits,
132         .kptl_max_msg_size           = &max_msg_size,
133         .kptl_peer_hash_table_size   = &peer_hash_table_size,
134         .kptl_reschedule_loops       = &reschedule_loops,
135         .kptl_ack_puts               = &ack_puts,
136 #ifdef CRAY_XT3
137         .kptl_ptltrace_on_timeout    = &ptltrace_on_timeout,
138         .kptl_ptltrace_basename      = &ptltrace_basename,
139 #endif
140 #ifdef PJK_DEBUGGING
141         .kptl_simulation_bitmap      = &simulation_bitmap,
142 #endif
143 };
144
145
146 #if defined(CONFIG_SYSCTL) && !CFS_SYSFS_MODULE_PARM
147 #ifdef CRAY_XT3
148 static char ptltrace_basename_space[1024];
149
150 static void
151 kptllnd_init_strtunable(char **str_param, char *space, int size)
152 {
153         strncpy(space, *str_param, size);
154         space[size - 1] = 0;
155         *str_param = space;
156 }
157 #endif
158
159 static cfs_sysctl_table_t kptllnd_ctl_table[] = {
160         {
161                 .ctl_name = 1,
162                 .procname = "ntx",
163                 .data     = &ntx,
164                 .maxlen   = sizeof(int),
165                 .mode     = 0444,
166                 .proc_handler = &proc_dointvec
167         },
168         {
169                 .ctl_name = 2,
170                 .procname = "max_nodes",
171                 .data     = &max_nodes,
172                 .maxlen   = sizeof(int),
173                 .mode     = 0444,
174                 .proc_handler = &proc_dointvec
175         },
176         {
177                 .ctl_name = 3,
178                 .procname = "max_procs_per_node",
179                 .data     = &max_procs_per_node,
180                 .maxlen   = sizeof(int),
181                 .mode     = 0444,
182                 .proc_handler = &proc_dointvec
183         },
184         {
185                 .ctl_name = 4,
186                 .procname = "checksum",
187                 .data     = &checksum,
188                 .maxlen   = sizeof(int),
189                 .mode     = 0644,
190                 .proc_handler = &proc_dointvec
191         },
192         {
193                 .ctl_name = 5,
194                 .procname = "timeout",
195                 .data     = &timeout,
196                 .maxlen   = sizeof(int),
197                 .mode     = 0644,
198                 .proc_handler = &proc_dointvec
199         },
200         {
201                 .ctl_name = 6,
202                 .procname = "portal",
203                 .data     = &portal,
204                 .maxlen   = sizeof(int),
205                 .mode     = 0444,
206                 .proc_handler = &proc_dointvec
207         },
208         {
209                 .ctl_name = 7,
210                 .procname = "pid",
211                 .data     = &pid,
212                 .maxlen   = sizeof(int),
213                 .mode     = 0444,
214                 .proc_handler = &proc_dointvec
215         },
216         {
217                 .ctl_name = 8,
218                 .procname = "rxb_npages",
219                 .data     = &rxb_npages,
220                 .maxlen   = sizeof(int),
221                 .mode     = 0444,
222                 .proc_handler = &proc_dointvec
223         },
224         {
225                 .ctl_name = 9,
226                 .procname = "credits",
227                 .data     = &credits,
228                 .maxlen   = sizeof(int),
229                 .mode     = 0444,
230                 .proc_handler = &proc_dointvec
231         },
232         {
233                 .ctl_name = 10,
234                 .procname = "peercredits",
235                 .data     = &peercredits,
236                 .maxlen   = sizeof(int),
237                 .mode     = 0444,
238                 .proc_handler = &proc_dointvec
239         },
240         {
241                 .ctl_name = 11,
242                 .procname = "max_msg_size",
243                 .data     = &max_msg_size,
244                 .maxlen   = sizeof(int),
245                 .mode     = 0444,
246                 .proc_handler = &proc_dointvec
247         },
248         {
249                 .ctl_name = 12,
250                 .procname = "peer_hash_table_size",
251                 .data     = &peer_hash_table_size,
252                 .maxlen   = sizeof(int),
253                 .mode     = 0444,
254                 .proc_handler = &proc_dointvec
255         },
256         {
257                 .ctl_name = 13,
258                 .procname = "reschedule_loops",
259                 .data     = &reschedule_loops,
260                 .maxlen   = sizeof(int),
261                 .mode     = 0444,
262                 .proc_handler = &proc_dointvec
263         },
264         {
265                 .ctl_name = 14,
266                 .procname = "ack_puts",
267                 .data     = &ack_puts,
268                 .maxlen   = sizeof(int),
269                 .mode     = 0644,
270                 .proc_handler = &proc_dointvec
271         },
272 #ifdef CRAY_XT3
273         {
274                 .ctl_name = 15,
275                 .procname = "ptltrace_on_timeout",
276                 .data     = &ptltrace_on_timeout,
277                 .maxlen   = sizeof(int),
278                 .mode     = 0644,
279                 .proc_handler = &proc_dointvec
280         },
281         {
282                 .ctl_name = 16,
283                 .procname = "ptltrace_basename",
284                 .data     = ptltrace_basename_space,
285                 .maxlen   = sizeof(ptltrace_basename_space),
286                 .mode     = 0644,
287                 .proc_handler = &proc_dostring,
288                 .strategy = &sysctl_string
289         },
290 #endif
291 #ifdef PJK_DEBUGGING
292         {
293                 .ctl_name = 17,
294                 .procname = "simulation_bitmap",
295                 .data     = &simulation_bitmap,
296                 .maxlen   = sizeof(int),
297                 .mode     = 0444,
298                 .proc_handler = &proc_dointvec
299         },
300 #endif
301
302         {0}
303 };
304
305 static cfs_sysctl_table_t kptllnd_top_ctl_table[] = {
306         {
307                 .ctl_name = 203,
308                 .procname = "ptllnd",
309                 .data     = NULL,
310                 .maxlen   = 0,
311                 .mode     = 0555,
312                 .child    = kptllnd_ctl_table
313         },
314         {0}
315 };
316
317 int
318 kptllnd_tunables_init ()
319 {
320 #ifdef CRAY_XT3
321         kptllnd_init_strtunable(&ptltrace_basename,
322                                 ptltrace_basename_space,
323                                 sizeof(ptltrace_basename_space));
324 #endif
325         kptllnd_tunables.kptl_sysctl =
326                 cfs_register_sysctl_table(kptllnd_top_ctl_table, 0);
327
328         if (kptllnd_tunables.kptl_sysctl == NULL)
329                 CWARN("Can't setup /proc tunables\n");
330
331         return 0;
332 }
333
334 void
335 kptllnd_tunables_fini ()
336 {
337         if (kptllnd_tunables.kptl_sysctl != NULL)
338                 cfs_unregister_sysctl_table(kptllnd_tunables.kptl_sysctl);
339 }
340
341 #else
342
343 int
344 kptllnd_tunables_init ()
345 {
346         return 0;
347 }
348
349 void
350 kptllnd_tunables_fini ()
351 {
352 }
353
354 #endif