17c478bd9Sstevel@tonic-gate /* 27c478bd9Sstevel@tonic-gate * CDDL HEADER START 37c478bd9Sstevel@tonic-gate * 47c478bd9Sstevel@tonic-gate * The contents of this file are subject to the terms of the 57c478bd9Sstevel@tonic-gate * Common Development and Distribution License, Version 1.0 only 67c478bd9Sstevel@tonic-gate * (the "License"). You may not use this file except in compliance 77c478bd9Sstevel@tonic-gate * with the License. 87c478bd9Sstevel@tonic-gate * 97c478bd9Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 107c478bd9Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 117c478bd9Sstevel@tonic-gate * See the License for the specific language governing permissions 127c478bd9Sstevel@tonic-gate * and limitations under the License. 137c478bd9Sstevel@tonic-gate * 147c478bd9Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 157c478bd9Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 167c478bd9Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 177c478bd9Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 187c478bd9Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 197c478bd9Sstevel@tonic-gate * 207c478bd9Sstevel@tonic-gate * CDDL HEADER END 217c478bd9Sstevel@tonic-gate */ 22*5d54f3d8Smuffin /* 23*5d54f3d8Smuffin * Copyright 1990 Sun Microsystems, Inc. All rights reserved. 24*5d54f3d8Smuffin * Use is subject to license terms. 25*5d54f3d8Smuffin */ 26*5d54f3d8Smuffin 277c478bd9Sstevel@tonic-gate #pragma ident "%Z%%M% %I% %E% SMI" 287c478bd9Sstevel@tonic-gate 297c478bd9Sstevel@tonic-gate #include <sys/time.h> 307c478bd9Sstevel@tonic-gate #include <sys/resource.h> 317c478bd9Sstevel@tonic-gate 327c478bd9Sstevel@tonic-gate /* 337c478bd9Sstevel@tonic-gate * Backwards compatible vtimes. 347c478bd9Sstevel@tonic-gate */ 357c478bd9Sstevel@tonic-gate struct vtimes { 367c478bd9Sstevel@tonic-gate int vm_utime; /* user time (60'ths) */ 377c478bd9Sstevel@tonic-gate int vm_stime; /* system time (60'ths) */ 387c478bd9Sstevel@tonic-gate /* divide next two by utime+stime to get averages */ 397c478bd9Sstevel@tonic-gate unsigned vm_idsrss; /* integral of d+s rss */ 407c478bd9Sstevel@tonic-gate unsigned vm_ixrss; /* integral of text rss */ 417c478bd9Sstevel@tonic-gate int vm_maxrss; /* maximum rss */ 427c478bd9Sstevel@tonic-gate int vm_majflt; /* major page faults */ 437c478bd9Sstevel@tonic-gate int vm_minflt; /* minor page faults */ 447c478bd9Sstevel@tonic-gate int vm_nswap; /* number of swaps */ 457c478bd9Sstevel@tonic-gate int vm_inblk; /* block reads */ 467c478bd9Sstevel@tonic-gate int vm_oublk; /* block writes */ 477c478bd9Sstevel@tonic-gate }; 487c478bd9Sstevel@tonic-gate 49*5d54f3d8Smuffin static void getvtimes(struct rusage *, struct vtimes *); 50*5d54f3d8Smuffin static int scale60(struct timeval *); 51*5d54f3d8Smuffin 52*5d54f3d8Smuffin int 53*5d54f3d8Smuffin vtimes(struct vtimes *par, struct vtimes *chi) 547c478bd9Sstevel@tonic-gate { 557c478bd9Sstevel@tonic-gate struct rusage ru; 567c478bd9Sstevel@tonic-gate 577c478bd9Sstevel@tonic-gate if (par) { 587c478bd9Sstevel@tonic-gate if (getrusage(RUSAGE_SELF, &ru) < 0) 597c478bd9Sstevel@tonic-gate return (-1); 607c478bd9Sstevel@tonic-gate getvtimes(&ru, par); 617c478bd9Sstevel@tonic-gate } 627c478bd9Sstevel@tonic-gate if (chi) { 637c478bd9Sstevel@tonic-gate if (getrusage(RUSAGE_CHILDREN, &ru) < 0) 647c478bd9Sstevel@tonic-gate return (-1); 657c478bd9Sstevel@tonic-gate getvtimes(&ru, chi); 667c478bd9Sstevel@tonic-gate } 677c478bd9Sstevel@tonic-gate return (0); 687c478bd9Sstevel@tonic-gate } 697c478bd9Sstevel@tonic-gate 70*5d54f3d8Smuffin static void 71*5d54f3d8Smuffin getvtimes(struct rusage *aru, struct vtimes *avt) 727c478bd9Sstevel@tonic-gate { 737c478bd9Sstevel@tonic-gate 747c478bd9Sstevel@tonic-gate avt->vm_utime = scale60(&aru->ru_utime); 757c478bd9Sstevel@tonic-gate avt->vm_stime = scale60(&aru->ru_stime); 767c478bd9Sstevel@tonic-gate avt->vm_idsrss = ((aru->ru_idrss+aru->ru_isrss) / 100) * 60; 777c478bd9Sstevel@tonic-gate avt->vm_ixrss = aru->ru_ixrss / 100 * 60; 787c478bd9Sstevel@tonic-gate avt->vm_maxrss = aru->ru_maxrss; 797c478bd9Sstevel@tonic-gate avt->vm_majflt = aru->ru_majflt; 807c478bd9Sstevel@tonic-gate avt->vm_minflt = aru->ru_minflt; 817c478bd9Sstevel@tonic-gate avt->vm_nswap = aru->ru_nswap; 827c478bd9Sstevel@tonic-gate avt->vm_inblk = aru->ru_inblock; 837c478bd9Sstevel@tonic-gate avt->vm_oublk = aru->ru_oublock; 847c478bd9Sstevel@tonic-gate } 857c478bd9Sstevel@tonic-gate 86*5d54f3d8Smuffin static int 87*5d54f3d8Smuffin scale60(struct timeval *tvp) 887c478bd9Sstevel@tonic-gate { 897c478bd9Sstevel@tonic-gate 907c478bd9Sstevel@tonic-gate return (tvp->tv_sec * 60 + tvp->tv_usec / 16667); 917c478bd9Sstevel@tonic-gate } 92