1 /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
2 * vim:expandtab:shiftwidth=8:tabstop=8:
6 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
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.
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).
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
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
29 * Copyright 2008 Sun Microsystems, Inc. All rights reserved
30 * Use is subject to license terms.
33 * This file is part of Lustre, http://www.lustre.org/
34 * Lustre is a trademark of Sun Microsystems, Inc.
36 * lnet/klnds/ptllnd/ptllnd_modparams.c
38 * Author: PJ Kirner <pjkirner@clusterfs.com>
45 CFS_MODULE_PARM(ntx, "i", int, 0444,
46 "# of TX descriptors");
48 static int max_nodes = 1152;
49 CFS_MODULE_PARM(max_nodes, "i", int, 0444,
50 "maximum number of peer nodes");
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");
56 static int checksum = 0;
57 CFS_MODULE_PARM(checksum, "i", int, 0644,
58 "set non-zero to enable message (not RDMA) checksums");
60 /* NB 250 is the Cray Portals wire timeout */
61 static int timeout = 250;
62 CFS_MODULE_PARM(timeout, "i", int, 0644,
65 static int portal = PTLLND_PORTAL; /* <lnet/ptllnd_wire.h> */
66 CFS_MODULE_PARM(portal, "i", int, 0444,
69 static int pid = PTLLND_PID; /* <lnet/ptllnd_wire.h> */
70 CFS_MODULE_PARM(pid, "i", int, 0444,
73 static int rxb_npages = 1;
74 CFS_MODULE_PARM(rxb_npages, "i", int, 0444,
75 "# of pages per rx buffer");
77 static int rxb_nspare = 8;
78 CFS_MODULE_PARM(rxb_nspare, "i", int, 0444,
79 "# of spare rx buffers");
81 static int credits = 128;
82 CFS_MODULE_PARM(credits, "i", int, 0444,
85 static int peercredits = PTLLND_PEERCREDITS; /* <lnet/ptllnd_wire.h> */
86 CFS_MODULE_PARM(peercredits, "i", int, 0444,
87 "concurrent sends to 1 peer");
89 static int peer_buffer_credits = 0;
90 CFS_MODULE_PARM(peer_buffer_credits, "i", int, 0444,
91 "# per-peer router buffer credits");
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");
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");
101 static int reschedule_loops = 100;
102 CFS_MODULE_PARM(reschedule_loops, "i", int, 0644,
103 "# of loops before scheduler does cond_resched()");
105 static int ack_puts = 0;
106 CFS_MODULE_PARM(ack_puts, "i", int, 0644,
107 "get portals to ack all PUTs");
110 static int ptltrace_on_timeout = 0;
111 CFS_MODULE_PARM(ptltrace_on_timeout, "i", int, 0644,
112 "dump ptltrace on timeout");
114 static int ptltrace_on_fail = 1;
115 CFS_MODULE_PARM(ptltrace_on_fail, "i", int, 0644,
116 "dump ptltrace on Portals failure");
118 static char *ptltrace_basename = "/tmp/lnet-ptltrace";
119 CFS_MODULE_PARM(ptltrace_basename, "s", charp, 0644,
120 "ptltrace dump file basename");
123 static int simulation_bitmap = 0;
124 CFS_MODULE_PARM(simulation_bitmap, "i", int, 0444,
125 "simulation bitmap");
129 kptl_tunables_t kptllnd_tunables = {
131 .kptl_max_nodes = &max_nodes,
132 .kptl_max_procs_per_node = &max_procs_per_node,
133 .kptl_checksum = &checksum,
134 .kptl_portal = &portal,
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,
147 .kptl_ptltrace_on_timeout = &ptltrace_on_timeout,
148 .kptl_ptltrace_on_fail = &ptltrace_on_fail,
149 .kptl_ptltrace_basename = &ptltrace_basename,
152 .kptl_simulation_bitmap = &simulation_bitmap,
157 #if defined(CONFIG_SYSCTL) && !CFS_SYSFS_MODULE_PARM
159 static char ptltrace_basename_space[1024];
162 kptllnd_init_strtunable(char **str_param, char *space, int size)
164 strncpy(space, *str_param, size);
170 #ifndef HAVE_SYSCTL_UNNUMBERED
175 KPTLLND_MAX_PROC_PER_NODE,
182 KPTLLND_PEERTXCREDITS,
183 KPTLLND_PEERRTRCREDITS,
184 KPTLLND_MAX_MSG_SIZE,
185 KPTLLND_PEER_HASH_SIZE,
186 KPTLLND_RESHEDULE_LOOPS,
188 KPTLLND_TRACETIMEOUT,
190 KPTLLND_TRACEBASENAME,
191 KPTLLND_SIMULATION_BITMAP
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
216 static cfs_sysctl_table_t kptllnd_ctl_table[] = {
218 .ctl_name = KPTLLND_NTX,
221 .maxlen = sizeof(int),
223 .proc_handler = &proc_dointvec
226 .ctl_name = KPTLLND_MAX_NODES,
227 .procname = "max_nodes",
229 .maxlen = sizeof(int),
231 .proc_handler = &proc_dointvec
234 .ctl_name = KPTLLND_MAX_PROC_PER_NODE,
235 .procname = "max_procs_per_node",
236 .data = &max_procs_per_node,
237 .maxlen = sizeof(int),
239 .proc_handler = &proc_dointvec
242 .ctl_name = KPTLLND_CHECKSUM,
243 .procname = "checksum",
245 .maxlen = sizeof(int),
247 .proc_handler = &proc_dointvec
250 .ctl_name = KPTLLND_TIMEOUT,
251 .procname = "timeout",
253 .maxlen = sizeof(int),
255 .proc_handler = &proc_dointvec
258 .ctl_name = KPTLLND_PORTAL,
259 .procname = "portal",
261 .maxlen = sizeof(int),
263 .proc_handler = &proc_dointvec
266 .ctl_name = KPTLLND_PID,
269 .maxlen = sizeof(int),
271 .proc_handler = &proc_dointvec
274 .ctl_name = KPTLLND_RXB_PAGES,
275 .procname = "rxb_npages",
277 .maxlen = sizeof(int),
279 .proc_handler = &proc_dointvec
282 .ctl_name = KPTLLND_CREDITS,
283 .procname = "credits",
285 .maxlen = sizeof(int),
287 .proc_handler = &proc_dointvec
290 .ctl_name = KPTLLND_PEERTXCREDITS,
291 .procname = "peercredits",
292 .data = &peercredits,
293 .maxlen = sizeof(int),
295 .proc_handler = &proc_dointvec
298 .ctl_name = KPTLLND_PEERRTRCREDITS,
299 .procname = "peer_buffer_credits",
300 .data = &peer_buffer_credits,
301 .maxlen = sizeof(int),
303 .proc_handler = &proc_dointvec
306 .ctl_name = KPTLLND_MAX_MSG_SIZE,
307 .procname = "max_msg_size",
308 .data = &max_msg_size,
309 .maxlen = sizeof(int),
311 .proc_handler = &proc_dointvec
314 .ctl_name = KPTLLND_PEER_HASH_SIZE,
315 .procname = "peer_hash_table_size",
316 .data = &peer_hash_table_size,
317 .maxlen = sizeof(int),
319 .proc_handler = &proc_dointvec
322 .ctl_name = KPTLLND_RESHEDULE_LOOPS,
323 .procname = "reschedule_loops",
324 .data = &reschedule_loops,
325 .maxlen = sizeof(int),
327 .proc_handler = &proc_dointvec
330 .ctl_name = KPTLLND_ACK_PUTS,
331 .procname = "ack_puts",
333 .maxlen = sizeof(int),
335 .proc_handler = &proc_dointvec
339 .ctl_name = KPTLLND_TRACETIMEOUT,
340 .procname = "ptltrace_on_timeout",
341 .data = &ptltrace_on_timeout,
342 .maxlen = sizeof(int),
344 .proc_handler = &proc_dointvec
347 .ctl_name = KPTLLND_TRACEFAIL,
348 .procname = "ptltrace_on_fail",
349 .data = &ptltrace_on_fail,
350 .maxlen = sizeof(int),
352 .proc_handler = &proc_dointvec
355 .ctl_name = KPTLLND_TRACEBASENAME,
356 .procname = "ptltrace_basename",
357 .data = ptltrace_basename_space,
358 .maxlen = sizeof(ptltrace_basename_space),
360 .proc_handler = &proc_dostring,
361 .strategy = &sysctl_string
366 .ctl_name = KPTLLND_SIMULATION_BITMAP,
367 .procname = "simulation_bitmap",
368 .data = &simulation_bitmap,
369 .maxlen = sizeof(int),
371 .proc_handler = &proc_dointvec
378 static cfs_sysctl_table_t kptllnd_top_ctl_table[] = {
380 .ctl_name = CTL_PTLLND,
381 .procname = "ptllnd",
385 .child = kptllnd_ctl_table
391 kptllnd_tunables_init ()
394 kptllnd_init_strtunable(&ptltrace_basename,
395 ptltrace_basename_space,
396 sizeof(ptltrace_basename_space));
398 kptllnd_tunables.kptl_sysctl =
399 cfs_register_sysctl_table(kptllnd_top_ctl_table, 0);
401 if (kptllnd_tunables.kptl_sysctl == NULL)
402 CWARN("Can't setup /proc tunables\n");
408 kptllnd_tunables_fini ()
410 if (kptllnd_tunables.kptl_sysctl != NULL)
411 cfs_unregister_sysctl_table(kptllnd_tunables.kptl_sysctl);
417 kptllnd_tunables_init ()
423 kptllnd_tunables_fini ()