Whamcloud - gitweb
b=15332,i=liang:
[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
20  * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
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 /* NB 250 is the Cray Portals wire timeout */
61 static int timeout = 250;
62 CFS_MODULE_PARM(timeout, "i", int, 0644,
63                 "timeout (seconds)");
64
65 static int portal = PTLLND_PORTAL;              /* <lnet/ptllnd_wire.h> */
66 CFS_MODULE_PARM(portal, "i", int, 0444,
67                 "portal id");
68
69 static int pid = PTLLND_PID;                    /* <lnet/ptllnd_wire.h> */
70 CFS_MODULE_PARM(pid, "i", int, 0444,
71                 "portals pid");
72
73 static int rxb_npages = 1;
74 CFS_MODULE_PARM(rxb_npages, "i", int, 0444,
75                 "# of pages per rx buffer");
76
77 static int rxb_nspare = 8;
78 CFS_MODULE_PARM(rxb_nspare, "i", int, 0444,
79                 "# of spare rx buffers");
80
81 static int credits = 128;
82 CFS_MODULE_PARM(credits, "i", int, 0444,
83                 "concurrent sends");
84
85 static int peercredits = PTLLND_PEERCREDITS;    /* <lnet/ptllnd_wire.h> */
86 CFS_MODULE_PARM(peercredits, "i", int, 0444,
87                 "concurrent sends to 1 peer");
88
89 static int peer_buffer_credits = 0;
90 CFS_MODULE_PARM(peer_buffer_credits, "i", int, 0444,
91                 "# per-peer router buffer credits");
92
93 static int max_msg_size = PTLLND_MAX_KLND_MSG_SIZE;  /* <lnet/ptllnd_wire.h> */
94 CFS_MODULE_PARM(max_msg_size, "i", int, 0444,
95                 "max size of immediate message");
96
97 static int peer_hash_table_size = 101;
98 CFS_MODULE_PARM(peer_hash_table_size, "i", int, 0444,
99                 "# of slots in the peer hash table");
100
101 static int reschedule_loops = 100;
102 CFS_MODULE_PARM(reschedule_loops, "i", int, 0644,
103                 "# of loops before scheduler does cond_resched()");
104
105 static int ack_puts = 0;
106 CFS_MODULE_PARM(ack_puts, "i", int, 0644,
107                 "get portals to ack all PUTs");
108
109 #ifdef CRAY_XT3
110 static int ptltrace_on_timeout = 0;
111 CFS_MODULE_PARM(ptltrace_on_timeout, "i", int, 0644,
112                 "dump ptltrace on timeout");
113
114 static int ptltrace_on_fail = 1;
115 CFS_MODULE_PARM(ptltrace_on_fail, "i", int, 0644,
116                 "dump ptltrace on Portals failure");
117
118 static char *ptltrace_basename = "/tmp/lnet-ptltrace";
119 CFS_MODULE_PARM(ptltrace_basename, "s", charp, 0644,
120                 "ptltrace dump file basename");
121 #endif
122 #ifdef PJK_DEBUGGING
123 static int simulation_bitmap = 0;
124 CFS_MODULE_PARM(simulation_bitmap, "i", int, 0444,
125                 "simulation bitmap");
126 #endif
127
128
129 kptl_tunables_t kptllnd_tunables = {
130         .kptl_ntx                    = &ntx,
131         .kptl_max_nodes              = &max_nodes,
132         .kptl_max_procs_per_node     = &max_procs_per_node,
133         .kptl_checksum               = &checksum,
134         .kptl_portal                 = &portal,
135         .kptl_pid                    = &pid,
136         .kptl_timeout                = &timeout,
137         .kptl_rxb_npages             = &rxb_npages,
138         .kptl_rxb_nspare             = &rxb_nspare,
139         .kptl_credits                = &credits,
140         .kptl_peertxcredits          = &peercredits,
141         .kptl_peerrtrcredits         = &peer_buffer_credits,
142         .kptl_max_msg_size           = &max_msg_size,
143         .kptl_peer_hash_table_size   = &peer_hash_table_size,
144         .kptl_reschedule_loops       = &reschedule_loops,
145         .kptl_ack_puts               = &ack_puts,
146 #ifdef CRAY_XT3
147         .kptl_ptltrace_on_timeout    = &ptltrace_on_timeout,
148         .kptl_ptltrace_on_fail       = &ptltrace_on_fail,
149         .kptl_ptltrace_basename      = &ptltrace_basename,
150 #endif
151 #ifdef PJK_DEBUGGING
152         .kptl_simulation_bitmap      = &simulation_bitmap,
153 #endif
154 };
155
156
157 #if defined(CONFIG_SYSCTL) && !CFS_SYSFS_MODULE_PARM
158 #ifdef CRAY_XT3
159 static char ptltrace_basename_space[1024];
160
161 static void
162 kptllnd_init_strtunable(char **str_param, char *space, int size)
163 {
164         strncpy(space, *str_param, size);
165         space[size - 1] = 0;
166         *str_param = space;
167 }
168 #endif
169
170 #ifndef HAVE_SYSCTL_UNNUMBERED
171
172 enum {
173         KPTLLND_NTX     = 1,
174         KPTLLND_MAX_NODES,
175         KPTLLND_MAX_PROC_PER_NODE,
176         KPTLLND_CHECKSUM,
177         KPTLLND_TIMEOUT,
178         KPTLLND_PORTAL,
179         KPTLLND_PID,
180         KPTLLND_RXB_PAGES,
181         KPTLLND_CREDITS,
182         KPTLLND_PEERTXCREDITS,
183         KPTLLND_PEERRTRCREDITS,
184         KPTLLND_MAX_MSG_SIZE,
185         KPTLLND_PEER_HASH_SIZE,
186         KPTLLND_RESHEDULE_LOOPS,
187         KPTLLND_ACK_PUTS,
188         KPTLLND_TRACETIMEOUT,
189         KPTLLND_TRACEFAIL,
190         KPTLLND_TRACEBASENAME,
191         KPTLLND_SIMULATION_BITMAP
192 };
193 #else
194
195 #define KPTLLND_NTX             CTL_UNNUMBERED
196 #define KPTLLND_MAX_NODES       CTL_UNNUMBERED
197 #define KPTLLND_MAX_PROC_PER_NODE CTL_UNNUMBERED
198 #define KPTLLND_CHECKSUM        CTL_UNNUMBERED
199 #define KPTLLND_TIMEOUT         CTL_UNNUMBERED
200 #define KPTLLND_PORTAL          CTL_UNNUMBERED
201 #define KPTLLND_PID             CTL_UNNUMBERED
202 #define KPTLLND_RXB_PAGES       CTL_UNNUMBERED
203 #define KPTLLND_CREDITS         CTL_UNNUMBERED
204 #define KPTLLND_PEERTXCREDITS   CTL_UNNUMBERED
205 #define KPTLLND_PEERRTRCREDITS  CTL_UNNUMBERED
206 #define KPTLLND_MAX_MSG_SIZE    CTL_UNNUMBERED
207 #define KPTLLND_PEER_HASH_SIZE  CTL_UNNUMBERED
208 #define KPTLLND_RESHEDULE_LOOPS CTL_UNNUMBERED
209 #define KPTLLND_ACK_PUTS        CTL_UNNUMBERED
210 #define KPTLLND_TRACETIMEOUT    CTL_UNNUMBERED
211 #define KPTLLND_TRACEFAIL       CTL_UNNUMBERED
212 #define KPTLLND_TRACEBASENAME   CTL_UNNUMBERED
213 #define KPTLLND_SIMULATION_BITMAP CTL_UNNUMBERED
214 #endif
215
216 static cfs_sysctl_table_t kptllnd_ctl_table[] = {
217         {
218                 .ctl_name = KPTLLND_NTX,
219                 .procname = "ntx",
220                 .data     = &ntx,
221                 .maxlen   = sizeof(int),
222                 .mode     = 0444,
223                 .proc_handler = &proc_dointvec
224         },
225         {
226                 .ctl_name = KPTLLND_MAX_NODES,
227                 .procname = "max_nodes",
228                 .data     = &max_nodes,
229                 .maxlen   = sizeof(int),
230                 .mode     = 0444,
231                 .proc_handler = &proc_dointvec
232         },
233         {
234                 .ctl_name = KPTLLND_MAX_PROC_PER_NODE,
235                 .procname = "max_procs_per_node",
236                 .data     = &max_procs_per_node,
237                 .maxlen   = sizeof(int),
238                 .mode     = 0444,
239                 .proc_handler = &proc_dointvec
240         },
241         {
242                 .ctl_name = KPTLLND_CHECKSUM,
243                 .procname = "checksum",
244                 .data     = &checksum,
245                 .maxlen   = sizeof(int),
246                 .mode     = 0644,
247                 .proc_handler = &proc_dointvec
248         },
249         {
250                 .ctl_name = KPTLLND_TIMEOUT,
251                 .procname = "timeout",
252                 .data     = &timeout,
253                 .maxlen   = sizeof(int),
254                 .mode     = 0644,
255                 .proc_handler = &proc_dointvec
256         },
257         {
258                 .ctl_name = KPTLLND_PORTAL,
259                 .procname = "portal",
260                 .data     = &portal,
261                 .maxlen   = sizeof(int),
262                 .mode     = 0444,
263                 .proc_handler = &proc_dointvec
264         },
265         {
266                 .ctl_name = KPTLLND_PID,
267                 .procname = "pid",
268                 .data     = &pid,
269                 .maxlen   = sizeof(int),
270                 .mode     = 0444,
271                 .proc_handler = &proc_dointvec
272         },
273         {
274                 .ctl_name = KPTLLND_RXB_PAGES,
275                 .procname = "rxb_npages",
276                 .data     = &rxb_npages,
277                 .maxlen   = sizeof(int),
278                 .mode     = 0444,
279                 .proc_handler = &proc_dointvec
280         },
281         {
282                 .ctl_name = KPTLLND_CREDITS,
283                 .procname = "credits",
284                 .data     = &credits,
285                 .maxlen   = sizeof(int),
286                 .mode     = 0444,
287                 .proc_handler = &proc_dointvec
288         },
289         {
290                 .ctl_name = KPTLLND_PEERTXCREDITS,
291                 .procname = "peercredits",
292                 .data     = &peercredits,
293                 .maxlen   = sizeof(int),
294                 .mode     = 0444,
295                 .proc_handler = &proc_dointvec
296         },
297         {
298                 .ctl_name = KPTLLND_PEERRTRCREDITS,
299                 .procname = "peer_buffer_credits",
300                 .data     = &peer_buffer_credits,
301                 .maxlen   = sizeof(int),
302                 .mode     = 0444,
303                 .proc_handler = &proc_dointvec
304         },
305         {
306                 .ctl_name = KPTLLND_MAX_MSG_SIZE,
307                 .procname = "max_msg_size",
308                 .data     = &max_msg_size,
309                 .maxlen   = sizeof(int),
310                 .mode     = 0444,
311                 .proc_handler = &proc_dointvec
312         },
313         {
314                 .ctl_name = KPTLLND_PEER_HASH_SIZE,
315                 .procname = "peer_hash_table_size",
316                 .data     = &peer_hash_table_size,
317                 .maxlen   = sizeof(int),
318                 .mode     = 0444,
319                 .proc_handler = &proc_dointvec
320         },
321         {
322                 .ctl_name = KPTLLND_RESHEDULE_LOOPS,
323                 .procname = "reschedule_loops",
324                 .data     = &reschedule_loops,
325                 .maxlen   = sizeof(int),
326                 .mode     = 0444,
327                 .proc_handler = &proc_dointvec
328         },
329         {
330                 .ctl_name = KPTLLND_ACK_PUTS,
331                 .procname = "ack_puts",
332                 .data     = &ack_puts,
333                 .maxlen   = sizeof(int),
334                 .mode     = 0644,
335                 .proc_handler = &proc_dointvec
336         },
337 #ifdef CRAY_XT3
338         {
339                 .ctl_name = KPTLLND_TRACETIMEOUT,
340                 .procname = "ptltrace_on_timeout",
341                 .data     = &ptltrace_on_timeout,
342                 .maxlen   = sizeof(int),
343                 .mode     = 0644,
344                 .proc_handler = &proc_dointvec
345         },
346         {
347                 .ctl_name = KPTLLND_TRACEFAIL,
348                 .procname = "ptltrace_on_fail",
349                 .data     = &ptltrace_on_fail,
350                 .maxlen   = sizeof(int),
351                 .mode     = 0644,
352                 .proc_handler = &proc_dointvec
353         },
354         {
355                 .ctl_name = KPTLLND_TRACEBASENAME,
356                 .procname = "ptltrace_basename",
357                 .data     = ptltrace_basename_space,
358                 .maxlen   = sizeof(ptltrace_basename_space),
359                 .mode     = 0644,
360                 .proc_handler = &proc_dostring,
361                 .strategy = &sysctl_string
362         },
363 #endif
364 #ifdef PJK_DEBUGGING
365         {
366                 .ctl_name = KPTLLND_SIMULATION_BITMAP,
367                 .procname = "simulation_bitmap",
368                 .data     = &simulation_bitmap,
369                 .maxlen   = sizeof(int),
370                 .mode     = 0444,
371                 .proc_handler = &proc_dointvec
372         },
373 #endif
374
375         {0}
376 };
377
378 static cfs_sysctl_table_t kptllnd_top_ctl_table[] = {
379         {
380                 .ctl_name = CTL_PTLLND,
381                 .procname = "ptllnd",
382                 .data     = NULL,
383                 .maxlen   = 0,
384                 .mode     = 0555,
385                 .child    = kptllnd_ctl_table
386         },
387         {0}
388 };
389
390 int
391 kptllnd_tunables_init ()
392 {
393 #ifdef CRAY_XT3
394         kptllnd_init_strtunable(&ptltrace_basename,
395                                 ptltrace_basename_space,
396                                 sizeof(ptltrace_basename_space));
397 #endif
398         kptllnd_tunables.kptl_sysctl =
399                 cfs_register_sysctl_table(kptllnd_top_ctl_table, 0);
400
401         if (kptllnd_tunables.kptl_sysctl == NULL)
402                 CWARN("Can't setup /proc tunables\n");
403
404         return 0;
405 }
406
407 void
408 kptllnd_tunables_fini ()
409 {
410         if (kptllnd_tunables.kptl_sysctl != NULL)
411                 cfs_unregister_sysctl_table(kptllnd_tunables.kptl_sysctl);
412 }
413
414 #else
415
416 int
417 kptllnd_tunables_init ()
418 {
419         return 0;
420 }
421
422 void
423 kptllnd_tunables_fini ()
424 {
425 }
426
427 #endif