Date: Tue, 02 Apr 2002 01:16:57 -0500 From: Jon Ringuette <wintermute@imeme.net> To: freebsd-hackers@freebsd.org Subject: diff of proposed top changes Message-ID: <3CA94CD9.6070805@imeme.net>
next in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format. --------------090801080508010405020304 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit These changes will allow top to run in a jail, or proceed on even though certain stats can not be obtained. Unfortunatly you do loss some error messages when doing so. Ps. If I should be submitting these elsewhere please let me know. dff -c machine.c newmachine.c > machine.c.diff --------------090801080508010405020304 Content-Type: text/plain; name="machine.c.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="machine.c.diff" *** machine.c Tue Jul 31 16:27:05 2001 --- machine.c.new Tue Apr 2 01:11:03 2002 *************** *** 246,254 **** else if (namelength > 15) namelength = 15; ! if ((kd = kvm_open(NULL, NULL, NULL, O_RDONLY, "kvm_open")) == NULL) ! return -1; ! /* get the list of symbols we want to access in the kernel */ (void) kvm_nlist(kd, nlst); --- 246,255 ---- else if (namelength > 15) namelength = 15; ! /* Changed to be NULL instead of kvm_open for parm 5 so it will no longer display error messages if there was a ! problem reading and thus not obstructing the screen */ ! if ((kd = kvm_open(NULL, NULL, NULL, O_RDONLY, NULL)) == NULL) ! return -1; /* get the list of symbols we want to access in the kernel */ (void) kvm_nlist(kd, nlst); *************** *** 337,342 **** --- 338,344 ---- int mib[2]; struct timeval boottime; size_t bt_size; + int get_mem = 0; /* get the cp_time array */ (void) getkval(cp_time_offset, (int *)cp_time, sizeof(cp_time), *************** *** 380,401 **** static int swapavail = 0; static int swapfree = 0; static int bufspace = 0; ! ! (void) getkval(cnt_offset, (int *)(&sum), sizeof(sum), "_cnt"); (void) getkval(bufspace_offset, (int *)(&bufspace), sizeof(bufspace), "_bufspace"); ! /* convert memory stats to Kbytes */ ! memory_stats[0] = pagetok(sum.v_active_count); ! memory_stats[1] = pagetok(sum.v_inactive_count); ! memory_stats[2] = pagetok(sum.v_wire_count); ! memory_stats[3] = pagetok(sum.v_cache_count); ! memory_stats[4] = bufspace / 1024; ! memory_stats[5] = pagetok(sum.v_free_count); ! memory_stats[6] = -1; ! /* first interval */ if (swappgsin < 0) { swap_stats[4] = 0; swap_stats[5] = 0; --- 382,415 ---- static int swapavail = 0; static int swapfree = 0; static int bufspace = 0; ! ! get_mem = getkval(cnt_offset, (int *)(&sum), sizeof(sum), "_cnt"); (void) getkval(bufspace_offset, (int *)(&bufspace), sizeof(bufspace), "_bufspace"); ! if(get_mem!=2) // Check if we had a problem reading memory stats ! { /* convert memory stats to Kbytes */ ! memory_stats[0] = pagetok(sum.v_active_count); ! memory_stats[1] = pagetok(sum.v_inactive_count); ! memory_stats[2] = pagetok(sum.v_wire_count); ! memory_stats[3] = pagetok(sum.v_cache_count); ! memory_stats[4] = bufspace / 1024; ! memory_stats[5] = pagetok(sum.v_free_count); ! memory_stats[6] = -1; ! } ! else ! { ! memory_stats[0] = -1; ! memory_stats[1] = -1; ! memory_stats[2] = -1; ! memory_stats[3] = -1; ! memory_stats[4] = -1; ! memory_stats[5] = -1; ! memory_stats[6] = -1;//keep ! }; /* first interval */ + if (swappgsin < 0) { swap_stats[4] = 0; swap_stats[5] = 0; *************** *** 407,422 **** swap_stats[5] = pagetok(((sum.v_swappgsout - swappgsout))); } ! swappgsin = sum.v_swappgsin; ! swappgsout = sum.v_swappgsout; ! /* call CPU heavy swapmode() only for changes */ ! if (swap_stats[4] > 0 || swap_stats[5] > 0 || swap_delay == 0) { swap_stats[3] = swapmode(&swapavail, &swapfree); swap_stats[0] = swapavail; swap_stats[1] = swapavail - swapfree; swap_stats[2] = swapfree; } swap_delay = 1; swap_stats[6] = -1; } --- 421,454 ---- swap_stats[5] = pagetok(((sum.v_swappgsout - swappgsout))); } ! if(get_mem !=2) ! { ! swappgsin = sum.v_swappgsin; ! swappgsout = sum.v_swappgsout; ! } ! else ! { ! swappgsin=-1; ! swappgsout=-1; ! }; /* call CPU heavy swapmode() only for changes */ ! if (swap_stats[4] > 0 || swap_stats[5] > 0 || swap_delay == 0 && get_mem!=2) { swap_stats[3] = swapmode(&swapavail, &swapfree); swap_stats[0] = swapavail; swap_stats[1] = swapavail - swapfree; swap_stats[2] = swapfree; } + else + if(get_mem==2) // check if problem retrieving memory stats + { + swap_stats[4] = -1; + swap_stats[5] = -1; + swap_stats[3] = -1; + swap_stats[0] = -1; + swap_stats[1] = -1; + swap_stats[2] = -1; + }; + swap_delay = 1; swap_stats[6] = -1; } *************** *** 700,713 **** } else { ! fprintf(stderr, "top: kvm_read for %s: %s\n", ! refstr, strerror(errno)); ! quit(23); } } return(1); } - /* comparison routines for qsort */ /* --- 732,745 ---- } else { ! // fprintf(stderr, "top: kvm_read for %s: %s\n", ! // refstr, strerror(errno)); ! // quit(23); ! return(2); } } return(1); } /* comparison routines for qsort */ /* --------------090801080508010405020304-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3CA94CD9.6070805>