1#
2# CDDL HEADER START
3#
4# The contents of this file are subject to the terms of the
5# Common Development and Distribution License (the "License").
6# You may not use this file except in compliance with the License.
7#
8# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9# or http://www.opensolaris.org/os/licensing.
10# See the License for the specific language governing permissions
11# and limitations under the License.
12#
13# When distributing Covered Code, include this CDDL HEADER in each
14# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15# If applicable, add the following below this CDDL HEADER, with the
16# fields enclosed by brackets "[]" replaced with your own identifying
17# information: Portions Copyright [yyyy] [name of copyright owner]
18#
19# CDDL HEADER END
20#
21
22#
23# Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
24# Use is subject to license terms.
25#
26
27#
28# Sun::Solaris::Lgrp documentation.
29#
30
31=head1 NAME
32
33Lgrp - Perl interface to Solaris liblgrp library.
34
35=head1 SYNOPSIS
36
37  use Sun::Solaris::Lgrp qw(:ALL);
38
39  # initialize lgroup interface
40  my $cookie = lgrp_init(LGRP_VIEW_OS | LGRP_VIEW_CALLER);
41  my $l = Sun::Solaris::Lgrp->new(LGRP_VIEW_OS | LGRP_VIEW_CALLER);
42
43  my $version = lgrp_version(LGRP_VER_CURRENT | LGRP_VER_NONE);
44  $version = $l->version(LGRP_VER_CURRENT | LGRP_VER_NONE);
45
46  $home = lgrp_home(P_PID, P_MYID);
47  $home = l->home(P_PID, P_MYID);
48
49  lgrp_affinity_set(P_PID, $pid, $lgrp,
50	LGRP_AFF_STRONG | LGRP_AFF_WEAK | LGRP_AFF_NONE);
51  $l->affinity_set(P_PID, $pid, $lgrp,
52	LGRP_AFF_STRONG | LGRP_AFF_WEAK | LGRP_AFF_NONE);
53
54  my $affinity = lgrp_affinity_get(P_PID, $pid, $lgrp);
55  $affinity = $l->affinity_get(P_PID, $pid, $lgrp);
56
57  my $nlgrps = lgrp_nlgrps($cookie);
58  $nlgrps = $l->nlgrps();
59
60  my $root = lgrp_root($cookie);
61  $root = l->root();
62
63  $latency = lgrp_latency($lgrp1, $lgrp2);
64  $latency = $l->latency($lgrp1, $lgrp2);
65
66  my @children = lgrp_children($cookie, $lgrp);
67  @children = l->children($lgrp);
68
69  my @parents = lgrp_parents($cookie, $lgrp);
70  @parents = l->parents($lgrp);
71
72  my @lgrps = lgrp_lgrps($cookie);
73  @lgrps = l->lgrps();
74
75  @lgrps = lgrp_lgrps($cookie, $lgrp);
76  @lgrps = l->lgrps($lgrp);
77
78  my @leaves = lgrp_leaves($cookie);
79  @leaves = l->leaves();
80
81  my $is_leaf = lgrp_isleaf($cookie, $lgrp);
82  $is_leaf = $l->is_leaf($lgrp);
83
84  my @cpus = lgrp_cpus($cookie, $lgrp,
85	LGRP_CONTENT_HIERARCHY | LGRP_CONTENT_DIRECT);
86  @cpus = l->cpus($lgrp, LGRP_CONTENT_HIERARCHY | LGRP_CONTENT_DIRECT);
87
88  my $memsize = lgrp_mem_size($cookie, $lgrp,
89	LGRP_MEM_SZ_INSTALLED | LGRP_MEM_SZ_FREE,
90	LGRP_CONTENT_HIERARCHY | LGRP_CONTENT_DIRECT);
91  $memsize = l->mem_size($lgrp,
92	LGRP_MEM_SZ_INSTALLED | LGRP_MEM_SZ_FREE,
93	LGRP_CONTENT_HIERARCHY | LGRP_CONTENT_DIRECT);
94
95  my $is_stale = lgrp_cookie_stale($cookie);
96  $stale = l->stale();
97
98  lgrp_fini($cookie);
99
100  # The following is available for API version greater than 1:
101
102  my @lgrps = lgrp_resources($cookie, $lgrp, LGRP_RSRC_CPU);
103
104  # Get latencies from cookie
105  $latency = lgrp_latency_cookie($cookie, $from, $to);
106
107=head1 DESCRIPTION
108
109This module provides access to the C<liblgrp(3LIB)> library and to various
110constants and functions defined in C<sys/lgrp_sys.h> header file. It provides
111both the procedural and object interface to the library. The procedural
112interface requires (in most cases) passing a transparent cookie around. The
113object interface hides all the cookie manipulations from the user.
114
115Functions returning scalar value indicate error by returning B<undef>. The
116caller may examine the B<$!> variable to get the C<errno> value.
117
118Functions returning list value return the number of elements in the list when
119called in scalar context. In case of error the empty list is return in the array
120context and B<undef> is returned in the scalar context.
121
122=head2 CONSTANTS
123
124The constants are exported with B<:CONSTANTS> or B<:ALL> tags:
125
126  use Sun::Solaris::Lgrp ':ALL';
127
128or
129
130  use Sun::Solaris::Lgrp ':CONSTANTS';
131
132The following constants are available for use in Perl programs:
133
134
135  LGRP_NONE
136
137  LGRP_VER_CURRENT
138  LGRP_VER_NONE
139
140  LGRP_VIEW_CALLER
141  LGRP_VIEW_OS
142
143  LGRP_AFF_NONE
144  LGRP_AFF_STRONG
145  LGRP_AFF_WEAK
146
147  LGRP_CONTENT_DIRECT
148  LGRP_CONTENT_HIERARCHY
149
150  LGRP_MEM_SZ_FREE
151  LGRP_MEM_SZ_INSTALLED
152
153  LGRP_RSRC_CPU (1)
154  LGRP_RSRC_MEM (1)
155  LGRP_CONTENT_ALL (1)
156  LGRP_LAT_CPU_TO_MEM(1)
157
158  P_PID
159  P_LWPID
160  P_MYID
161
162(1) Available for versions of the liblgrp(3LIB) API greater than 1.
163
164=head2 functions
165
166A detailed description of each function follows. Since this module is intended
167to provide a Perl interface to the routines in L<liblgrp(3LIB)>, a very short
168description is given for the corresponding functions in this module and a
169reference is given to the complete description in the L<liblgrp(3LIB)> man
170pages. Any differences or additional functionality in the Perl module are
171highlighted and fully documented here.
172
173=over
174
175=item lgrp_init([LGRP_VIEW_CALLER | LGRP_VIEW_OS])
176
177The function initializes the lgroup interface and takes a snapshot of the lgroup
178hierarchy with the given view. Given the view, L<lgrp_init()> returns a cookie
179representing this snapshot of the lgroup hierarchy. This cookie should be used
180with other routines in the lgroup interface needing the lgroup hierarchy. The
181L<lgrp_fini()> function should be called with the cookie when it is no longer
182needed. Unlike L<lgrp_init (3LGRP)>, C<LGRP_VIEW_OS> is assumed as the default if
183no view is provided.
184
185Upon successful completion, L<lgrp_init()> returns a cookie. Otherwise it returns
186B<undef> and sets B<$!> to indicate the error.
187
188See L<lgrp_init(3LGRP)> for more information.
189
190=item lgrp_fini($cookie)
191
192The function takes a cookie, frees the snapshot of the lgroup hierarchy created
193by L<lgrp_init()>, and cleans up anything else set up by L<lgrp_init()>. After
194this function is called, the cookie returned by the lgroup interface might no
195longer be valid and should not be used.
196
197Upon successful completion, 1 is returned. Otherwise, B<undef> is returned and
198B<$!> is set to indicate the error.
199
200See L<lgrp_fini(3LGRP)> for more information.
201
202=item lgrp_view($cookie)
203
204The function takes a cookie representing the snapshot of the lgroup hierarchy
205and returns the snapshot's view of the lgroup hierarchy.
206
207If the given view is C<LGRP_VIEW_CALLER>, the snapshot contains only the
208resources that are available to the caller (such as those with respect to
209processor sets).  When the view is C<LGRP_VIEW_OS>, the snapshot contains what
210is available to the operating system.
211
212Upon succesful completion, the function returns the view for the snapshot of the
213lgroup hierarchy represented by the given cookie. Otherwise, B<undef> is
214returned and C<$!> is set.
215
216See L<lgrp_view(3LGRP)> for more information.
217
218=item lgrp_home($idtype, $id)
219
220Returns the home lgroup for the given process or thread. The B<$idtype> argument
221should be C<P_PID> to specify a process and the B<$id> argument should be its
222process id. Otherwise, the B<$idtype> argument should be C<P_LWPID> to specify a
223thread and the B<$id> argument should be its LWP id. The value C<P_MYID> can be
224used for the id argument to specify the current process or thread.
225
226Upon successful completion, C<lgrp_home()> returns the id of the home lgroup of
227the specified process or thread. Otherwise, B<undef> is returned and B<$!> is
228set to indicate the error.
229
230See L<lgrp_home(3LGRP)> for more information.
231
232=item lgrp_cookie_stale($cookie)
233
234Upon successful completion, the function returns whether the cookie is
235stale. Otherwise, it returns B<undef> and sets B<$!> to indicate the error.
236
237The L<lgrp_cookie_stale()> function will fail with C<EINVAL> if the cookie is
238not valid.
239
240See L<lgrp_cookie_stale(3LGRP)> for more information.
241
242=item lgrp_cpus($cookie, $lgrp, $context)
243
244The function takes a cookie representing a snapshot of the lgroup hierarchy and
245returns the list of CPUs in the lgroup specified by B<$lgrp>. The B<$context>
246argument should be set to one of the following values to specify whether the
247direct contents or everything in this lgroup including its children should be
248returned:
249
250=over
251
252=item LGRP_CONTENT_HIERARCHY
253
254Everything within this hierarchy.
255
256=item LGRP_CONTENT_DIRECT
257
258Directly contained in lgroup.
259
260=back
261
262When called in scalar context, L<lgrp_cpus()> function returns the number of
263CPUs, contained in the specified lgroup.
264
265In case of error B<undef> is returned in scalar context and B<$!> is set to
266indicate the error. In list context the empty list is returned and B<$!> is set.
267
268See L<lgrp_cpus(3LGRP)> for more information.
269
270=item lgrp_children($cookie, $lgrp)
271
272The function takes a cookie representing a snapshot of the lgroup hierarchy and
273returns the list of lgroups that are children of the specified lgroup.
274
275When called in scalar context, L<lgrp_children()> function returns the number of
276children lgroups for the specified lgroup.
277
278In case of error B<undef> or empty list is returned and B<$!> is set to indicate
279the error.
280
281See L<lgrp_children(3LGRP)> for more information.
282
283=item lgrp_parents($cookie, $lgrp)
284
285The function takes a cookie representing a snapshot of the lgroup hierarchy and
286returns the list of parent of the specified lgroup.
287
288When called in scalar context, L<lgrp_parents()> function returns the number of
289parent lgroups for the specified lgroup.
290
291In case of error B<undef> or empty list is returned and B<$!> is set to indicate
292the error.
293
294See L<lgrp_parents(3LGRP)> for more information.
295
296=item lgrp_nlgrps($cookie)
297
298The function takes a cookie representing a snapshot of the lgroup hierarchy.  It
299returns the number of lgroups in the hierarchy where the number is always at
300least one.
301
302In case of error B<undef> is returned and B<$!> is set to EINVAL indicatng that
303the cookie is not valid.
304
305See L<lgrp_nlgrps(3LGRP)> for more information.
306
307=item lgrp_root($cookie)
308
309The function returns the root lgroup ID.  In case of error B<undef> is returned
310and B<$!> is set to EINVAL indicatng that the cookie is not valid.
311
312See L<lgrp_root(3LGRP)> for more information.
313
314=item lgrp_mem_size($cookie, $lgrp, $type, $content)
315
316The function takes a cookie representing a snapshot of the lgroup hierarchy. The
317function returns the memory size of the given lgroup in bytes. The B<$type>
318argument should be set to one of the following values:
319
320=over
321
322=item LGRP_MEM_SZ_FREE
323
324Free memory.
325
326=item LGRP_MEM_SZ_INSTALLED
327
328Installed memory.
329
330=back
331
332The B<$content> argument should be set to one of the following values to specify
333whether the direct contents or everything in this lgroup including its children
334should be returned:
335
336=over
337
338=item LGRP_CONTENT_HIERARCHY
339
340Everything within this hierarchy.
341
342=item LGRP_CONTENT_DIRECT
343
344Directly contained in lgroup.
345
346=back
347
348The total sizes include all the memory in the lgroup including its children,
349while the others reflect only the memory contained directly in the given lgroup.
350
351Upon successful completion, the size in bytes is returned. Otherwise, B<undef>
352is returned and B<$!> is set to indicate the error.
353
354See L<lgrp_mem_size(3LGRP)> for more information.
355
356=item lgrp_version([$version])
357
358The function takes an interface version number, B$version>, as an argument and
359returns an lgroup interface version. The B<$version> argument should be the
360value of C<LGRP_VER_CURRENT> or C<LGRP_VER_NONE> to find out the current lgroup
361interface version on the running system.
362
363If B<$version> is still supported by the implementation, then L<lgrp_version()>
364returns the requested version. If C<LGRP_VER_NONE> is returned, the
365implementation cannot support the requested version.
366
367If B<$version> is C<LGRP_VER_NONE>, L<lgrp_version()> returns the current version of
368the library.
369
370The following example  tests  whether  the  version  of  the
371interface used by the caller is supported:
372
373    lgrp_version(LGRP_VER_CURRENT) == LGRP_VER_CURRENT or
374    	die("Built with unsupported lgroup interface");
375
376See L<lgrp_version(3LGRP)> for more information.
377
378=item lgrp_affinity_set($idtype, $id, $lgrp, $affinity)
379
380The function sets of LWPs specified by the B<$idtype> and B<$id> arguments have
381for the given lgroup.
382
383The function sets the affinity that the LWP or set of LWPs specified by $idtype
384and $id have for the given lgroup. The lgroup affinity can be set to
385C<LGRP_AFF_STRONG>, C<LGRP_AFF_WEAK>, or C<LGRP_AFF_NONE>.
386
387If the B<$idtype> is C<P_PID>, the affinity is retrieved for one of the LWPs in
388the process or set for all the LWPs of the process with process id (PID) B<$id>.
389The affinity is retrieved or set for the LWP of the current process with LWP id
390$id if idtype is C<P_LWPID>. If $id is C<P_MYID>, then the current LWP or
391process is specified.
392
393There are different levels of affinity that can be specified by a thread for a
394particuliar lgroup.  The levels of affinity are the following from strongest to
395weakest:
396
397=over
398
399=item LGRP_AFF_STRONG
400
401Strong affinity.
402
403=item LGRP_AFF_WEAK
404
405Weak affinity.
406
407=item LGRP_AFF_NONE
408
409No affinity.
410
411=back
412
413Upon successful completion, L<lgrp_affinity_set()> return 1.  Otherwise, it
414returns B<undef> and set B<$!> to indicate the error.
415
416See L<lgrp_affinity_set(3LGRP)> for more information.
417
418=item lgrp_affinity_get($idtype, $id, $lgrp)
419
420The function returns the affinity that the LWP has to a given lgrp. See
421L<lgrp_affinity_get()> for detailed description.
422
423See L<lgrp_affinity_get(3LGRP)> for more information.
424
425=item lgrp_latency_cookie($cookie, $from, $to, [$between=LGRP_LAT_CPU_TO_MEM])
426
427The function takes a cookie representing a snapshot of the lgroup hierarchy and
428returns the latency value between a hardware resource in the $from lgroup to a
429hardware resource in the B<$to> lgroup. If B<$from> is the same lgroup as $to, the
430latency value within that lgroup is returned.
431
432The optional B<between> argument should be set to C<LGRP_LAT_CPU_TO_MEM> to specify
433between which hardware resources the latency should be measured. Currently the
434only valid value is C<LGRP_LAT_CPU_TO_MEM> which represents latency from CPU to
435memory.
436
437Upon successful completion, lgrp_latency_cookie() return 1. Otherwise, it
438returns B<undef> and set B<$!> to indicate the error. For LGRP API version 1 the
439L<lgrp_latency_cookie()> is an alias for L<lgrp_latency()>.
440
441See L<lgrp_latency_cookie(3LGRP)> for more information.
442
443=item lgrp_latency($from, $to)
444
445The function is similiar to the L<lgrp_latency_cookie()> function, but returns the
446latency between the given lgroups at the given instant in time.  Since lgroups
447may be freed and reallocated, this function may not be able to provide a
448consistent answer across calls.  For that reason, it is recommended that
449L<lgrp_latency_cookie()> function be used in its place.
450
451See L<lgrp_latency(3LGRP)> for more information.
452
453=item lgrp_resources($cookie, $lgrp, $type)
454
455Return the list of lgroups directly containing resources of the specified type.
456The resources are represented by a set of lgroups in which each lgroup directly
457contains CPU and/or memory resources.
458
459The type can be specified as
460
461=over
462
463=item C<LGRP_RSRC_CPU>
464
465CPU resources
466
467=item C<LGRP_RSRC_MEM>
468
469Memory resources
470
471=back
472
473In case of error B<undef> or empty list is returned and B<$!> is set to indicate
474the error.
475
476This function is only available for API version 2 and will return B<undef> or
477empty list for API version 1 and set $! to C<EINVAL>.
478
479See C<lgrp_resources(3LGRP)> for more information.
480
481=item lgrp_lgrps($cookie, [$lgrp])
482
483Returns list of all lgroups in a hierarchy starting from $lgrp. If B<$lgrp> is
484not specified, uses the value of lgrp_root($cookie). Returns the empty list on
485failure.
486
487When called in scalar context, returns the total number of lgroups in the
488system.
489
490=item lgrp_leaves($cookie, [$lgrp])
491
492Returns list of all leaf lgroups in a hierarchy starting from $lgrp. If $lgrp is
493not specified, uses the value of lgrp_root($cookie). Returns B<undef> or empty
494list on failure.
495
496When called in scalar context, returns the total number of leaf lgroups in the
497system.
498
499=item lgrp_isleaf($cookie, $lgrp)
500
501Returns B<True> if $lgrp is leaf (has no children), B<False> otherwise.
502
503=back
504
505=head2 Object Methods
506
507=over
508
509=item new([$view])
510
511Creates a new Sun::Solaris::Lgrp object. An optional argument is passed to
512L<lgrp_init()> function. By default uses C<LGRP_VIEW_OS>.
513
514=item cookie()
515
516Returns a transparent cookie that may be passed to functions accepting cookie.
517
518=item version([$version])
519
520Without the argument returns the current version of the L<liblgrp(3LIB)>
521library. This is a wrapper for L<lgrp_version()> with C<LGRP_VER_NONE> as the
522default version argument.
523
524=item stale()
525
526Returns B<T> if the lgroup information in the object is stale, B<F>
527otherwise. It is a wrapper for L<lgrp_cookie_stale()>.
528
529=item view()
530
531Returns the snapshot's view of the lgroup hierarchy. It is a wrapper for
532L<lgrp_view()>.
533
534=item root()
535
536Returns the root lgroup. It is a wrapper for L<lgrp_root()>.
537
538=item children($lgrp)
539
540Returns the list of lgroups that are children of the specified lgroup. This is a
541wrapper for L<lgrp_children()>.
542
543=item parents($lgrp)
544
545Returns the list of lgroups that are parents of the specified lgroup. This is a
546wrapper for L<lgrp_parents()>.
547
548=item nlgrps()
549
550Returns the number of lgroups in the hierarchy. This is a wrapper for
551L<lgrp_nlgrps()>.
552
553=item mem_size($lgrp, $type, $content)
554
555Returns the memory size of the given lgroup in bytes. This is a wrapper for
556L<lgrp_mem_size()>.
557
558=item cpus($lgrp, $context)
559
560Returns the list of CPUs in the lgroup specified by $lgrp. This is a wrapper for
561L<lgrp_cpus()>.
562
563=item resources($lgrp, $type)
564
565Returns the list of lgroups directly containing resources of the specified
566type. This is a wrapper for L<lgrp_resources()>.
567
568=item home($idtype, $id)
569
570Returns the home lgroup for the given process or thread. This is a wrapper for
571L<lgrp_home()>.
572
573=item affinity_get($idtype, $id, $lgrp)
574
575Returns the affinity that the LWP has to a given lgrp. This is a wrapper for
576L<lgrp_affinity_get()>.
577
578=item affinity_set($idtype, $id, $lgrp, $affinity)
579
580Sets of LWPs specified by the $idtype and $id arguments have for the given lgroup.
581This is a wrapper for L<lgrp_affinity_set()>.
582
583=item lgrps([$lgrp])
584
585Returns list of all lgroups in a hierarchy starting from $lgrp (or the
586L<lgrp_root()> if $lgrp is not specified). This is a wrapper for L<lgrp_lgrps()>.
587
588=item leaves([$lgrp])
589
590Returns list of all leaf lgroups in a hierarchy starting from B<$lgrp>. If $lgrp
591is not specified, uses the value of lgrp_root(). This is a wrapper for
592L<lgrp_leaves()>.
593
594=item isleaf($lgrp)
595
596Returns B<True> if B<$lgrp> is leaf (has no children), B<False> otherwise.
597This is a wrapper for L<lgrp_isleaf()>.
598
599=item latency($from, $to)
600
601Returns the latency value between a hardware resource in the $from lgroup to a
602hardware resource in the B<$to> lgroup. It will use L<lgrp_latency()> for
603version 1 of liblgrp(3LIB) and L<lgrp_latency_cookie()> for newer versions.
604
605=back
606
607=head2 EXPORTS
608
609By default nothing is exported from this module. The following tags can be used
610to selectively import constants and functions defined in this module:
611
612=over
613
614=item :LGRP_CONSTANTS
615
616LGRP_AFF_NONE, LGRP_AFF_STRONG, LGRP_AFF_WEAK, LGRP_CONTENT_DIRECT,
617LGRP_CONTENT_HIERARCHY, LGRP_MEM_SZ_FREE, LGRP_MEM_SZ_INSTALLED,
618LGRP_VER_CURRENT, LGRP_VER_NONE, LGRP_VIEW_CALLER, LGRP_VIEW_OS,
619LGRP_NONE, LGRP_RSRC_CPU, LGRP_RSRC_MEM, LGRP_CONTENT_ALL,
620LGRP_LAT_CPU_TO_MEM.
621
622=item :PROC_CONSTANTS
623
624P_PID, P_LWPID P_MYID
625
626=item :CONSTANTS
627
628:LGRP_CONSTANTS, :PROC_CONSTANTS
629
630=item :FUNCTIONS
631
632lgrp_affinity_get(), lgrp_affinity_set(), lgrp_children(), lgrp_cookie_stale(),
633lgrp_cpus(), lgrp_fini(), lgrp_home(), lgrp_init(), lgrp_latency(),
634lgrp_latency_cookie(), lgrp_mem_size(), lgrp_nlgrps(), lgrp_parents(),
635lgrp_root(), lgrp_version(), lgrp_view(), lgrp_resources(),
636lgrp_lgrps(), lgrp_leaves(), lgrp_isleaf(), lgrp_lgrps(), lgrp_leaves().
637
638=item :ALL
639
640:CONSTANTS, :FUNCTIONS
641
642=back
643
644=head2 Error values
645
646The functions in this module return B<undef> or an empty list when an underlying
647library function fails. The B<$!> is set to provide more information values for
648the error. The following error codes are possible:
649
650=over
651
652=item EINVAL
653
654The value supplied is not valid.
655
656=item ENOMEM
657
658There was not enough system memory to complete an operation.
659
660=item EPERM
661
662The effective user of the calling process does not have appropriate privileges,
663and its real or effective user ID does not match the real or effective user ID
664of one of the threads.
665
666=item ESRCH
667
668The specified  process or thread was not found.
669
670=back
671
672=head2 Difference in the API versions
673
674The C<liblgrp(3LIB)> is versioned. The exact version which was used to compile a
675module is available through B<lgrp_version> function.
676
677Version 2 of the lgrpp_user API introduced the following constants and
678functions, nbot present in version 1:
679
680=over
681
682=item C<LGRP_RSRC_CPU> constant
683
684=item C<LGRP_RSRC_MEM> constant
685
686=item C<LGRP_CONTENT_ALL> constant
687
688=item C<LGRP_LAT_CPU_TO_MEM> constant
689
690=item C<lgrp_resources()> function
691
692=item C<lgrp_latency_cookie()> function
693
694=back
695
696The C<LGRP_RSRC_CPU> and C<LGRP_RSRC_MEM> are not defined for version 1. The
697L<lgrp_resources()> function is defined for version 1 but always returns empty
698list. The L<lgrp_latency_cookie()> function is an alias for lgrp_latency for
699version 1.
700
701=head1 ATTRIBUTES
702
703See L<attributes(7)> for descriptions of the following attributes:
704
705  ___________________________________________________________
706 |       ATTRIBUTE TYPE        |       ATTRIBUTE VALUE       |
707 |_____________________________|_____________________________|
708 | Availability                | SUNWpl5u                    |
709 |_____________________________|_____________________________|
710 | Interface Stability         | Unstable                    |
711 |_____________________________|_____________________________|
712
713
714=head1 SEE ALSO
715
716L<liblgrp(3LIB)>,
717L<lgrp_affinity_get(3LGRP)>,
718L<lgrp_affinity_set(3LGRP)>,
719L<lgrp_children(3LGRP)>,
720L<lgrp_cookie_stale(3LGRP)>,
721L<lgrp_cpus(3LGRP)>,
722L<lgrp_fini(3LGRP)>,
723L<lgrp_home(3LGRP)>,
724L<lgrp_init(3LGRP)>,
725L<lgrp_latency(3LGRP)>,
726L<lgrp_mem_size(3LGRP)>,
727L<lgrp_nlgrps(3LGRP)>,
728L<lgrp_parents(3LGRP)>,
729L<lgrp_root(3LGRP)>,
730L<lgrp_version(3LGRP)>,
731L<lgrp_view(3LGRP)>,
732L<lgrp_resources(3LGRP)>,
733L<lgrp_latency_cookie(3LGRP)>,
734L<attributes(7)>
735
736=cut
737