Whamcloud - gitweb
first part of 2.6.26 support (lnet/libcfs part)
[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 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 #ifndef HAVE_SYSCTL_UNNUMBERED
160
161 enum {
162         KPTLLND_NTX     = 1,
163         KPTLLND_MAX_NODES,
164         KPTLLND_MAX_PROC_PER_NODE,
165         KPTLLND_CHECKSUM,
166         KPTLLND_TIMEOUT,
167         KPTLLND_PORTAL,
168         KPTLLND_PID,
169         KPTLLND_RXB_PAGES,
170         KPTLLND_CREDITS,
171         KPTLLND_PEERCREDITS,
172         KPTLLND_MAX_MSG_SIZE,
173         KPTLLND_PEER_HASH_SIZE,
174         KPTLLND_RESHEDULE_LOOPS,
175         KPTLLND_ACK_PUTS,
176         KPTLLND_TRACETIMEOUT,
177         KPTLLND_TRACEBASENAME,
178         KPTLLND_SIMULATION_BITMAP
179 };
180 #else
181
182 #define KPTLLND_NTX             CTL_UNNUMBERED
183 #define KPTLLND_MAX_NODES       CTL_UNNUMBERED
184 #define KPTLLND_MAX_PROC_PER_NODE CTL_UNNUMBERED
185 #define KPTLLND_CHECKSUM        CTL_UNNUMBERED
186 #define KPTLLND_TIMEOUT         CTL_UNNUMBERED
187 #define KPTLLND_PORTAL          CTL_UNNUMBERED
188 #define KPTLLND_PID             CTL_UNNUMBERED
189 #define KPTLLND_RXB_PAGES       CTL_UNNUMBERED
190 #define KPTLLND_CREDITS         CTL_UNNUMBERED
191 #define KPTLLND_PEERCREDITS     CTL_UNNUMBERED
192 #define KPTLLND_MAX_MSG_SIZE    CTL_UNNUMBERED
193 #define KPTLLND_PEER_HASH_SIZE  CTL_UNNUMBERED
194 #define KPTLLND_RESHEDULE_LOOPS CTL_UNNUMBERED
195 #define KPTLLND_ACK_PUTS        CTL_UNNUMBERED
196 #define KPTLLND_TRACETIMEOUT    CTL_UNNUMBERED
197 #define KPTLLND_TRACEBASENAME   CTL_UNNUMBERED
198 #define KPTLLND_SIMULATION_BITMAP CTL_UNNUMBERED
199 #endif
200
201 static cfs_sysctl_table_t kptllnd_ctl_table[] = {
202         {
203                 .ctl_name = KPTLLND_NTX,
204                 .procname = "ntx",
205                 .data     = &ntx,
206                 .maxlen   = sizeof(int),
207                 .mode     = 0444,
208                 .proc_handler = &proc_dointvec
209         },
210         {
211                 .ctl_name = KPTLLND_MAX_NODES,
212                 .procname = "max_nodes",
213                 .data     = &max_nodes,
214                 .maxlen   = sizeof(int),
215                 .mode     = 0444,
216                 .proc_handler = &proc_dointvec
217         },
218         {
219                 .ctl_name = KPTLLND_MAX_PROC_PER_NODE,
220                 .procname = "max_procs_per_node",
221                 .data     = &max_procs_per_node,
222                 .maxlen   = sizeof(int),
223                 .mode     = 0444,
224                 .proc_handler = &proc_dointvec
225         },
226         {
227                 .ctl_name = KPTLLND_CHECKSUM,
228                 .procname = "checksum",
229                 .data     = &checksum,
230                 .maxlen   = sizeof(int),
231                 .mode     = 0644,
232                 .proc_handler = &proc_dointvec
233         },
234         {
235                 .ctl_name = KPTLLND_TIMEOUT,
236                 .procname = "timeout",
237                 .data     = &timeout,
238                 .maxlen   = sizeof(int),
239                 .mode     = 0644,
240                 .proc_handler = &proc_dointvec
241         },
242         {
243                 .ctl_name = KPTLLND_PORTAL,
244                 .procname = "portal",
245                 .data     = &portal,
246                 .maxlen   = sizeof(int),
247                 .mode     = 0444,
248                 .proc_handler = &proc_dointvec
249         },
250         {
251                 .ctl_name = KPTLLND_PID,
252                 .procname = "pid",
253                 .data     = &pid,
254                 .maxlen   = sizeof(int),
255                 .mode     = 0444,
256                 .proc_handler = &proc_dointvec
257         },
258         {
259                 .ctl_name = KPTLLND_RXB_PAGES,
260                 .procname = "rxb_npages",
261                 .data     = &rxb_npages,
262                 .maxlen   = sizeof(int),
263                 .mode     = 0444,
264                 .proc_handler = &proc_dointvec
265         },
266         {
267                 .ctl_name = KPTLLND_CREDITS,
268                 .procname = "credits",
269                 .data     = &credits,
270                 .maxlen   = sizeof(int),
271                 .mode     = 0444,
272                 .proc_handler = &proc_dointvec
273         },
274         {
275                 .ctl_name = KPTLLND_PEERCREDITS,
276                 .procname = "peercredits",
277                 .data     = &peercredits,
278                 .maxlen   = sizeof(int),
279                 .mode     = 0444,
280                 .proc_handler = &proc_dointvec
281         },
282         {
283                 .ctl_name = KPTLLND_MAX_MSG_SIZE,
284                 .procname = "max_msg_size",
285                 .data     = &max_msg_size,
286                 .maxlen   = sizeof(int),
287                 .mode     = 0444,
288                 .proc_handler = &proc_dointvec
289         },
290         {
291                 .ctl_name = KPTLLND_PEER_HASH_SIZE,
292                 .procname = "peer_hash_table_size",
293                 .data     = &peer_hash_table_size,
294                 .maxlen   = sizeof(int),
295                 .mode     = 0444,
296                 .proc_handler = &proc_dointvec
297         },
298         {
299                 .ctl_name = KPTLLND_RESHEDULE_LOOPS,
300                 .procname = "reschedule_loops",
301                 .data     = &reschedule_loops,
302                 .maxlen   = sizeof(int),
303                 .mode     = 0444,
304                 .proc_handler = &proc_dointvec
305         },
306         {
307                 .ctl_name = KPTLLND_ACK_PUTS,
308                 .procname = "ack_puts",
309                 .data     = &ack_puts,
310                 .maxlen   = sizeof(int),
311                 .mode     = 0644,
312                 .proc_handler = &proc_dointvec
313         },
314 #ifdef CRAY_XT3
315         {
316                 .ctl_name = KPTLLND_TRACETIMEOUT,
317                 .procname = "ptltrace_on_timeout",
318                 .data     = &ptltrace_on_timeout,
319                 .maxlen   = sizeof(int),
320                 .mode     = 0644,
321                 .proc_handler = &proc_dointvec
322         },
323         {
324                 .ctl_name = KPTLLND_TRACEBASENAME,
325                 .procname = "ptltrace_basename",
326                 .data     = ptltrace_basename_space,
327                 .maxlen   = sizeof(ptltrace_basename_space),
328                 .mode     = 0644,
329                 .proc_handler = &proc_dostring,
330                 .strategy = &sysctl_string
331         },
332 #endif
333 #ifdef PJK_DEBUGGING
334         {
335                 .ctl_name = KPTLLND_SIMULATION_BITMAP,
336                 .procname = "simulation_bitmap",
337                 .data     = &simulation_bitmap,
338                 .maxlen   = sizeof(int),
339                 .mode     = 0444,
340                 .proc_handler = &proc_dointvec
341         },
342 #endif
343
344         {0}
345 };
346
347 static cfs_sysctl_table_t kptllnd_top_ctl_table[] = {
348         {
349                 .ctl_name = CTL_PTLLND,
350                 .procname = "ptllnd",
351                 .data     = NULL,
352                 .maxlen   = 0,
353                 .mode     = 0555,
354                 .child    = kptllnd_ctl_table
355         },
356         {0}
357 };
358
359 int
360 kptllnd_tunables_init ()
361 {
362 #ifdef CRAY_XT3
363         kptllnd_init_strtunable(&ptltrace_basename,
364                                 ptltrace_basename_space,
365                                 sizeof(ptltrace_basename_space));
366 #endif
367         kptllnd_tunables.kptl_sysctl =
368                 cfs_register_sysctl_table(kptllnd_top_ctl_table, 0);
369
370         if (kptllnd_tunables.kptl_sysctl == NULL)
371                 CWARN("Can't setup /proc tunables\n");
372
373         return 0;
374 }
375
376 void
377 kptllnd_tunables_fini ()
378 {
379         if (kptllnd_tunables.kptl_sysctl != NULL)
380                 cfs_unregister_sysctl_table(kptllnd_tunables.kptl_sysctl);
381 }
382
383 #else
384
385 int
386 kptllnd_tunables_init ()
387 {
388         return 0;
389 }
390
391 void
392 kptllnd_tunables_fini ()
393 {
394 }
395
396 #endif