c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#! /usr/perl5/bin/perl
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# CDDL HEADER START
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# The contents of this file are subject to the terms of the
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Common Development and Distribution License (the "License").
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# You may not use this file except in compliance with the License.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# or http://www.opensolaris.org/os/licensing.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# See the License for the specific language governing permissions
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# and limitations under the License.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# When distributing Covered Code, include this CDDL HEADER in each
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# If applicable, add the following below this CDDL HEADER, with the
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# fields enclosed by brackets "[]" replaced with your own identifying
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# information: Portions Copyright [yyyy] [name of copyright owner]
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# CDDL HEADER END
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Use is subject to license terms.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# ident "%Z%%M% %I% %E% SMI"
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Tests for Sun::Solaris::Lgrp API.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Before `make install' is performed this script should be runnable with
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# `make test'. After `make install' it should work as `perl Lgrp.t'
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# The test uses Test module which is available on Perl 5.6 and later.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbuse strict;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbuse warnings;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbuse Test;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Tests to run
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbBEGIN { plan tests => 63 }
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbuse Sun::Solaris::Lgrp ':ALL';
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb######################################################################
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy ($home, $fail);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb######################################################################
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Check that all exported constants can be accessed.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb$fail = 0;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbforeach my $constname (qw(
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb LGRP_AFF_NONE LGRP_AFF_STRONG LGRP_AFF_WEAK LGRP_CONTENT_DIRECT
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb LGRP_CONTENT_HIERARCHY LGRP_MEM_SZ_FREE
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb LGRP_MEM_SZ_INSTALLED LGRP_VER_CURRENT LGRP_VER_NONE
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb LGRP_VIEW_CALLER LGRP_VIEW_OS LGRP_RSRC_CPU LGRP_RSRC_MEM
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb LGRP_CONTENT_ALL LGRP_LAT_CPU_TO_MEM)) {
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb next if (eval "my \$a = $constname; 1");
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb $fail++;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb}
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($fail, 0, 'All Constants defined' );
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#########################
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb######################################################################
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Verify lgrp_version
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb##
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy $version = lgrp_version(-1);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($version, LGRP_VER_NONE, 'incorrect lgrp version unsupported');
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb$version = lgrp_version(LGRP_VER_NONE);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($version, LGRP_VER_CURRENT, 'lgrp version is current');
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb$version = lgrp_version(LGRP_VER_CURRENT);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($version, LGRP_VER_CURRENT, 'support LGRP_VER_CURRENT version');
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#######################################################################
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb######################################################################
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Verify that lgrp_init()/lgrp_fini work.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb##
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy $c = lgrp_init(LGRP_VIEW_CALLER);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($c) or
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb die("lgrp_init: $!");
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy $view = lgrp_view($c);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($view, LGRP_VIEW_CALLER, 'View is LGRP_VIEW_CALLER');
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy $fin = lgrp_fini($c);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($fin);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Try to free it again, it should fail.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb$fin = lgrp_fini($c);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($fin, undef, 'lgrp_fini second time should fail');
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb$c = lgrp_init(LGRP_VIEW_OS);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($c) or
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb die("lgrp_init: $!");
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb$view = lgrp_view($c);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($view, LGRP_VIEW_OS, 'View is LGRP_VIEW_OS');
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb######################################################################
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb######################################################################
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# root should have ID 0.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb##
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy $root = lgrp_root($c);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($root, 0, 'root should have id zero');
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb######################################################################
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Verify lgrp_nlgrps()
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb##
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy $nlgrps = lgrp_nlgrps($c);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($nlgrps);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy @lgrps = lgrp_lgrps($c);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok(@lgrps);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok(scalar @lgrps, $nlgrps, 'lgrp_nlgrps() should match number of lgrps');
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($nlgrps, lgrp_lgrps($c), 'lgrp_lgrps() in scalar context is sane');
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb######################################################################
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# All root children should have root as their one and only one parent
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb##
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb$fail = 0;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy @children = lgrp_children($c, $root);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok(scalar @children, lgrp_children($c, $root), 'lgrp_children as scalar');
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy @leaves = lgrp_leaves $c;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok(scalar @leaves);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok(scalar @leaves, lgrp_leaves $c);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok(scalar @children <= scalar @leaves);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy @parents;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy $fail_lgrp_parents = 0;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbforeach my $l (@children) {
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb @parents = lgrp_parents($c, $l) or
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb (print STDERR "# lgrp_parents: $!\n"), $fail++, last;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb my $nparents = @parents;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb my ($parent, @rest) = @parents;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb $fail++ if $parent != $root;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb $fail++ unless $nparents == 1;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb $fail_lgrp_parents++ if $nparents != lgrp_parents($c, $l);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb}
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($fail, 0, 'correct parents for children');
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($fail_lgrp_parents, 0, 'correct lgrp_parents() as scalar');
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb######################################################################
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Illegal parents have no children
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb##
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb@children = lgrp_children($c, -1);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy $nchildren = lgrp_children($c, -1);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok(scalar @children, 0, 'Illegal parents have no children');
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Same in scalar context
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($nchildren, undef, 'No children means undef as scalar');
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb######################################################################
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# root should have no parents.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb##
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb@parents = lgrp_parents($c, $root);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok(scalar @parents, 0, 'root should have no parents');
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Same in scalar context
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok(lgrp_parents($c, $root), 0);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb######################################################################
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Illegal children have no paremts
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb##
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb@parents = lgrp_parents($c, -1);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy $nparents = lgrp_parents($c, -1);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok(scalar @parents, 0, 'Illegal children have no paremts');
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Same in scalar context
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($nparents, undef, 'No parents means undef as scalar');
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb######################################################################
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Root should have non-zero CPUs and memory size
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb##
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy @cpus = lgrp_cpus($c, $root, LGRP_CONTENT_HIERARCHY);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy $ncpus = lgrp_cpus($c, $root, LGRP_CONTENT_HIERARCHY);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok(scalar @cpus, $ncpus);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($ncpus);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok(lgrp_mem_size($c, $root, LGRP_MEM_SZ_INSTALLED, LGRP_CONTENT_HIERARCHY));
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy @ncpus_bad = lgrp_cpus($c, $root, -1);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok(scalar @ncpus_bad, 0, 'Bad argument to lgrp_cpus should return empty');
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy $ncpus_bad = lgrp_cpus($c, $root, -1);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($ncpus_bad, undef, 'Bad argument to lgrp_cpus should return undef');
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb######################################################################
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb######################################################################
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# The cookie should not be stale
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok(! lgrp_cookie_stale($c));
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb######################################################################
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb######################################################################
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Can we call lgrp_latency?
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# The latencies from lgrp_latency and lgrp_latency_cookie should match.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb##
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy $latency = lgrp_latency($root, $root);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok(defined $latency);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy $latency1 = lgrp_latency_cookie($c, $root, $root);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok(defined $latency1);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($latency, $latency1, 'Latencies should match');
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb######################################################################
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Can we call lgrp_resources?
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb##
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy @lgrps_c = lgrp_resources($c, $root, LGRP_RSRC_CPU);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy $nresources = lgrp_resources($c, $root, LGRP_RSRC_CPU);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok(!defined $nresources) if $version < 2;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok(scalar @lgrps_c, 0) if $version < 2;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($nresources) if $version >= 2;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok(@lgrps_c) if $version >= 2;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb##
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# lgrp_fini should always succeed.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok(lgrp_fini($c));
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb######################################################################
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Now test Object-Oriented interface.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb##
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb$c = Sun::Solaris::Lgrp->new or
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb die "Lgrp->new(LGRP_VIEW_OS): $!";
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($c->view, LGRP_VIEW_OS);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($c->stale, 0, 'cookie is not stale');
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($nlgrps, $c->nlgrps, 'nlgrps');
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy @lg1 = $c->lgrps;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok(@lgrps, @lg1);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy@leaves1 = $c->leaves;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok(@leaves, @leaves1) or
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb print STDERR "# \@leaves: @leaves, \@leaves1: @leaves\n";
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($root, $c->root);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb@cpus = lgrp_cpus($c->cookie, $root, LGRP_CONTENT_HIERARCHY);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy @cpus1 = $c->cpus($root, LGRP_CONTENT_HIERARCHY);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok(@cpus, @cpus1) or
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb print STDERR "# \@cpus: @cpus, \@cpus1: @cpus1\n";
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok(lgrp_latency($root, $root), $c->latency($root, $root));
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy @lgrps_c1 = $c->resources($root, LGRP_RSRC_CPU);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok(@lgrps_c, @lgrps_c1);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok(lgrp_version(LGRP_VER_NONE), $c->version);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb######################################################################
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Can we call lgrp_home?
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb##
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb$home = lgrp_home(P_PID, P_MYID);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok(defined($home));
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy $home1 = $c->home(P_PID, P_MYID);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($home1 == $home);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb$home1 = lgrp_home(P_LWPID, 1);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($home1 == $home);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb$home1 = $c->home(P_LWPID, 1);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($home1 == $home);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb######################################################################
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Can we call lgrp_affinity_set?
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb##
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy $affinity;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok(LGRP_AFF_WEAK);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok(P_LWPID);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb$affinity = $c->affinity_set(P_PID, P_MYID, $home, LGRP_AFF_WEAK);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($affinity);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb$affinity = $c->affinity_set(P_LWPID, 1, $home, LGRP_AFF_WEAK);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($affinity);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb$affinity = lgrp_affinity_set(P_PID, P_MYID, $home, LGRP_AFF_WEAK);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($affinity);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb$affinity = lgrp_affinity_set(P_LWPID, 1, $home, LGRP_AFF_WEAK);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($affinity);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb######################################################################
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Can we call lgrp_affinity_get?
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb##
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb$affinity = lgrp_affinity_get(P_PID, P_MYID, $home);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($affinity = LGRP_AFF_WEAK);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb$affinity = lgrp_affinity_get(P_LWPID, 1, $home);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($affinity == LGRP_AFF_WEAK);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb$affinity = $c->affinity_get(P_PID, P_MYID, $home);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($affinity == LGRP_AFF_WEAK);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb$affinity = $c->affinity_get(P_LWPID, 1, $home);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbok($affinity == LGRP_AFF_WEAK);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb######################################################################
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# THE END!
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#########