Re: type of vm.stats.vm.v_vnodepgsin vm.stats.vm.v_swappgsin, vm.stats.vm.v_vnodepgsout vm.stats.vm.v_swappgsout on AMD64 r320730

From: Tomoaki AOKI <junchoon_at_dec.sakura.ne.jp>
Date: Mon, 10 Jul 2017 18:45:28 +0900
Hm, for example, sysutils/lsof (userspace app) depends on kernel
source, and I thought the one Otacilio mentioned is something like it.

Anyway, we should wait for Otacilio's response. ;-)


On Mon, 10 Jul 2017 10:18:07 +0300
Konstantin Belousov <kostikbel_at_gmail.com> wrote:

> On Mon, Jul 10, 2017 at 03:40:46PM +0900, Tomoaki AOKI wrote:
> > Hi.
> > 
> > Members v_swappgsin and v_vnodepgsin are declared on sys/sys/vmmeter.h
> > as
> > 
> >   u_int         on stable/11_at_r320798 [1]
> >   counter_u64_t on head_at_r320861      [2]
> > 
> > respectively.
> > 
> > Diggin in further, on head_at_r320861, counter_u64_t is typedef'ed as
> > uint64_t * at line 32 of sys/sys/counter.h [3] like below.
> > 
> >   typedef uint64_t *counter_u64_t;
> > 
> > So they're "pointers" on head, while "values" on stable/11.
> > 
> > So, as you're on head, it seems you're casting "pointers (addresses)" to
> > uint64_t "value". It could be huge and non-expected values.
> > Your code would work as expected on stable/11. 
> 
> What ?  counter_u64_t in userspace in nonsense.
> 
> Whole struct vmmeter is useless in userspace, it is not exported by the
> sysctls and is only used in kernel.  Sysctl MIBs export individual
> counters which should be used with appropriate type, but besides native
> uint64_t, 32bit requests are also supported.
> 
> This is why I asked about the type of the vm.v_something and asked for
> the explicit fragment of the code which reads the MIBs.
> 
> > 
> > [1]
> > https://svnweb.freebsd.org/base/stable/11/sys/sys/vmmeter.h?annotate=320610
> > 
> > [2]
> > https://svnweb.freebsd.org/base/head/sys/sys/vmmeter.h?annotate=317061
> > 
> > [3]
> > https://svnweb.freebsd.org/base/head/sys/sys/counter.h?annotate=309745
> > 
> > 
> > On Sun, 9 Jul 2017 23:15:18 -0300
> > Otac?$B".lio <otacilio.neto_at_bsd.com.br> wrote:
> > 
> > > Dears
> > > 
> > > I'm the maintainer of xosview and I'm debugging rather weird behavior 
> > > from it in the latest FreeBSD 12 revisions (12.0-CURRENT #0 r320730 
> > > AMD64) . The problem is occurring on the lines responsible for 
> > > collecting statistics about paging. These lines follow:
> > > 
> > > If (pageinfo) {
> > > Pageinfo [0] = (uint64_t) vm.v_vnodepgsin + (uint64_t) vm.v_swappgsin;
> > > Pageinfo [1] = (uint64_t) vm.v_vnodepgsout + (uint64_t) vm.v_swappgsout;
> > > }
> > > 
> > > This code works on FreeBSD 11 and until a short time ago it works at 12. 
> > > But now it returns extremely large values ?$B".".when interpreted as 64-bit 
> > > values. A debugging has shown that for this sysctl call the following 
> > > values ?$B".".are returned in the terminal:
> > > sysctl vm.stats.vm.v_vnodepgsin vm.stats.vm.v_swappgsin 
> > > vm.stats.vm.v_vnodepgsout vm.stats.vm.v_swappgsout
> > > Vm.stats.vm.v_vnodepgsin: 47432
> > > Vm.stats.vm.v_swappgsin: 0
> > > Vm.stats.vm.v_vnodepgsout: 19
> > > Vm.stats.vm.v_swappgsout: 0
> > > 
> > > While the code returns things like:
> > > 
> > > Pageinf [0] = 34359785800; Pageinfo [1] = 140733193388051
> > > Pageinf [0] = 34359785800; Pageinfo [1] = 2678138638516092947
> > > 
> > > After some tests I found that if I change the code to use a typecast to 
> > > (uint32_t) then Xosview works correctly.:
> > > If (pageinfo) {
> > > Pageinfo [0] = (uint32_t) ((uint64_t) vm.v_vnodepgsin + (uint64_t) 
> > > vm.v_swappgsin);
> > > Pageinfo [1] = (uint32_t) ((uint64_t) vm.v_vnodepgsout + (uint64_t) 
> > > vm.v_swappgsout);
> > > }
> > > 
> > > For me, it seems that some code in the kernel is storing values ?$B".".as 32 
> > > bits where it should be 64 bits. Is this behavior correct?
> > > 
> > > []'s
> > > 
> > > -Otac?$B".lio
> > > _______________________________________________
> > > freebsd-current_at_freebsd.org mailing list
> > > https://lists.freebsd.org/mailman/listinfo/freebsd-current
> > > To unsubscribe, send any mail to "freebsd-current-unsubscribe_at_freebsd.org"
> > > 
> > > 
> > 
> > 
> > -- 
> > Tomoaki AOKI    <junchoon_at_dec.sakura.ne.jp>
> > _______________________________________________
> > freebsd-current_at_freebsd.org mailing list
> > https://lists.freebsd.org/mailman/listinfo/freebsd-current
> > To unsubscribe, send any mail to "freebsd-current-unsubscribe_at_freebsd.org"
> _______________________________________________
> freebsd-current_at_freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe_at_freebsd.org"
> 


-- 
Tomoaki AOKI    <junchoon_at_dec.sakura.ne.jp>
Received on Mon Jul 10 2017 - 07:45:35 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:12 UTC