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