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