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