4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
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.
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).
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
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
27 * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
28 * Use is subject to license terms.
31 * This file is part of Lustre, http://www.lustre.org/
32 * Lustre is a trademark of Sun Microsystems, Inc.
34 * lnet/klnds/ptllnd/ptllnd_modparams.c
36 * Author: PJ Kirner <pjkirner@clusterfs.com>
43 CFS_MODULE_PARM(ntx, "i", int, 0444,
44 "# of TX descriptors");
46 static int max_nodes = 1152;
47 CFS_MODULE_PARM(max_nodes, "i", int, 0444,
48 "maximum number of peer nodes");
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");
54 static int checksum = 0;
55 CFS_MODULE_PARM(checksum, "i", int, 0644,
56 "set non-zero to enable message (not RDMA) checksums");
58 /* NB 250 is the Cray Portals wire timeout */
59 static int timeout = 250;
60 CFS_MODULE_PARM(timeout, "i", int, 0644,
63 static int portal = PTLLND_PORTAL; /* <lnet/ptllnd_wire.h> */
64 CFS_MODULE_PARM(portal, "i", int, 0444,
67 static int pid = PTLLND_PID; /* <lnet/ptllnd_wire.h> */
68 CFS_MODULE_PARM(pid, "i", int, 0444,
71 static int rxb_npages = 1;
72 CFS_MODULE_PARM(rxb_npages, "i", int, 0444,
73 "# of pages per rx buffer");
75 static int rxb_nspare = 8;
76 CFS_MODULE_PARM(rxb_nspare, "i", int, 0444,
77 "# of spare rx buffers");
79 static int credits = 128;
80 CFS_MODULE_PARM(credits, "i", int, 0444,
83 static int peercredits = PTLLND_PEERCREDITS; /* <lnet/ptllnd_wire.h> */
84 CFS_MODULE_PARM(peercredits, "i", int, 0444,
85 "concurrent sends to 1 peer");
87 static int peer_buffer_credits = 0;
88 CFS_MODULE_PARM(peer_buffer_credits, "i", int, 0444,
89 "# per-peer router buffer credits");
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");
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");
99 static int reschedule_loops = 100;
100 CFS_MODULE_PARM(reschedule_loops, "i", int, 0644,
101 "# of loops before scheduler does cond_resched()");
103 static int ack_puts = 0;
104 CFS_MODULE_PARM(ack_puts, "i", int, 0644,
105 "get portals to ack all PUTs");
108 static int ptltrace_on_timeout = 0;
109 CFS_MODULE_PARM(ptltrace_on_timeout, "i", int, 0644,
110 "dump ptltrace on timeout");
112 static int ptltrace_on_fail = 1;
113 CFS_MODULE_PARM(ptltrace_on_fail, "i", int, 0644,
114 "dump ptltrace on Portals failure");
116 static char *ptltrace_basename = "/tmp/lnet-ptltrace";
117 CFS_MODULE_PARM(ptltrace_basename, "s", charp, 0644,
118 "ptltrace dump file basename");
121 static int simulation_bitmap = 0;
122 CFS_MODULE_PARM(simulation_bitmap, "i", int, 0444,
123 "simulation bitmap");
127 kptl_tunables_t kptllnd_tunables = {
129 .kptl_max_nodes = &max_nodes,
130 .kptl_max_procs_per_node = &max_procs_per_node,
131 .kptl_checksum = &checksum,
132 .kptl_portal = &portal,
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,
145 .kptl_ptltrace_on_timeout = &ptltrace_on_timeout,
146 .kptl_ptltrace_on_fail = &ptltrace_on_fail,
147 .kptl_ptltrace_basename = &ptltrace_basename,
150 .kptl_simulation_bitmap = &simulation_bitmap,
155 #if defined(CONFIG_SYSCTL) && !CFS_SYSFS_MODULE_PARM
157 static char ptltrace_basename_space[1024];
160 kptllnd_init_strtunable(char **str_param, char *space, int size)
162 strncpy(space, *str_param, size);
168 #ifndef HAVE_SYSCTL_UNNUMBERED
173 KPTLLND_MAX_PROC_PER_NODE,
180 KPTLLND_PEERTXCREDITS,
181 KPTLLND_PEERRTRCREDITS,
182 KPTLLND_MAX_MSG_SIZE,
183 KPTLLND_PEER_HASH_SIZE,
184 KPTLLND_RESHEDULE_LOOPS,
186 KPTLLND_TRACETIMEOUT,
188 KPTLLND_TRACEBASENAME,
189 KPTLLND_SIMULATION_BITMAP
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
214 static cfs_sysctl_table_t kptllnd_ctl_table[] = {
216 .ctl_name = KPTLLND_NTX,
219 .maxlen = sizeof(int),
221 .proc_handler = &proc_dointvec
224 .ctl_name = KPTLLND_MAX_NODES,
225 .procname = "max_nodes",
227 .maxlen = sizeof(int),
229 .proc_handler = &proc_dointvec
232 .ctl_name = KPTLLND_MAX_PROC_PER_NODE,
233 .procname = "max_procs_per_node",
234 .data = &max_procs_per_node,
235 .maxlen = sizeof(int),
237 .proc_handler = &proc_dointvec
240 .ctl_name = KPTLLND_CHECKSUM,
241 .procname = "checksum",
243 .maxlen = sizeof(int),
245 .proc_handler = &proc_dointvec
248 .ctl_name = KPTLLND_TIMEOUT,
249 .procname = "timeout",
251 .maxlen = sizeof(int),
253 .proc_handler = &proc_dointvec
256 .ctl_name = KPTLLND_PORTAL,
257 .procname = "portal",
259 .maxlen = sizeof(int),
261 .proc_handler = &proc_dointvec
264 .ctl_name = KPTLLND_PID,
267 .maxlen = sizeof(int),
269 .proc_handler = &proc_dointvec
272 .ctl_name = KPTLLND_RXB_PAGES,
273 .procname = "rxb_npages",
275 .maxlen = sizeof(int),
277 .proc_handler = &proc_dointvec
280 .ctl_name = KPTLLND_CREDITS,
281 .procname = "credits",
283 .maxlen = sizeof(int),
285 .proc_handler = &proc_dointvec
288 .ctl_name = KPTLLND_PEERTXCREDITS,
289 .procname = "peercredits",
290 .data = &peercredits,
291 .maxlen = sizeof(int),
293 .proc_handler = &proc_dointvec
296 .ctl_name = KPTLLND_PEERRTRCREDITS,
297 .procname = "peer_buffer_credits",
298 .data = &peer_buffer_credits,
299 .maxlen = sizeof(int),
301 .proc_handler = &proc_dointvec
304 .ctl_name = KPTLLND_MAX_MSG_SIZE,
305 .procname = "max_msg_size",
306 .data = &max_msg_size,
307 .maxlen = sizeof(int),
309 .proc_handler = &proc_dointvec
312 .ctl_name = KPTLLND_PEER_HASH_SIZE,
313 .procname = "peer_hash_table_size",
314 .data = &peer_hash_table_size,
315 .maxlen = sizeof(int),
317 .proc_handler = &proc_dointvec
320 .ctl_name = KPTLLND_RESHEDULE_LOOPS,
321 .procname = "reschedule_loops",
322 .data = &reschedule_loops,
323 .maxlen = sizeof(int),
325 .proc_handler = &proc_dointvec
328 .ctl_name = KPTLLND_ACK_PUTS,
329 .procname = "ack_puts",
331 .maxlen = sizeof(int),
333 .proc_handler = &proc_dointvec
337 .ctl_name = KPTLLND_TRACETIMEOUT,
338 .procname = "ptltrace_on_timeout",
339 .data = &ptltrace_on_timeout,
340 .maxlen = sizeof(int),
342 .proc_handler = &proc_dointvec
345 .ctl_name = KPTLLND_TRACEFAIL,
346 .procname = "ptltrace_on_fail",
347 .data = &ptltrace_on_fail,
348 .maxlen = sizeof(int),
350 .proc_handler = &proc_dointvec
353 .ctl_name = KPTLLND_TRACEBASENAME,
354 .procname = "ptltrace_basename",
355 .data = ptltrace_basename_space,
356 .maxlen = sizeof(ptltrace_basename_space),
358 .proc_handler = &proc_dostring,
359 .strategy = &sysctl_string
364 .ctl_name = KPTLLND_SIMULATION_BITMAP,
365 .procname = "simulation_bitmap",
366 .data = &simulation_bitmap,
367 .maxlen = sizeof(int),
369 .proc_handler = &proc_dointvec
376 static cfs_sysctl_table_t kptllnd_top_ctl_table[] = {
378 .ctl_name = CTL_PTLLND,
379 .procname = "ptllnd",
383 .child = kptllnd_ctl_table
389 kptllnd_tunables_init ()
392 kptllnd_init_strtunable(&ptltrace_basename,
393 ptltrace_basename_space,
394 sizeof(ptltrace_basename_space));
396 kptllnd_tunables.kptl_sysctl =
397 cfs_register_sysctl_table(kptllnd_top_ctl_table, 0);
399 if (kptllnd_tunables.kptl_sysctl == NULL)
400 CWARN("Can't setup /proc tunables\n");
406 kptllnd_tunables_fini ()
408 if (kptllnd_tunables.kptl_sysctl != NULL)
409 cfs_unregister_sysctl_table(kptllnd_tunables.kptl_sysctl);
415 kptllnd_tunables_init ()
421 kptllnd_tunables_fini ()