Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 10 Jul 2017 15:40:46 +0900
From:      Tomoaki AOKI <junchoon@dec.sakura.ne.jp>
To:        freebsd-current@freebsd.org
Cc:        otacilio.neto@bsd.com.br
Subject:   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
Message-ID:  <20170710154046.58c3d7b14a227a20bea3e55b@dec.sakura.ne.jp>
In-Reply-To: <1c37db96-7cd2-91c9-011c-967a32a97f05@bsd.com.br>
References:  <1c37db96-7cd2-91c9-011c-967a32a97f05@bsd.com.br>

next in thread | previous in thread | raw e-mail | index | archive | help
Hi.

Members v_swappgsin and v_vnodepgsin are declared on sys/sys/vmmeter.h
as

  u_int         on stable/11@r320798 [1]
  counter_u64_t on head@r320861      [2]

respectively.

Diggin in further, on head@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.

[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〓lio <otacilio.neto@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 〓〓when interpreted as 64-bit 
> values. A debugging has shown that for this sysctl call the following 
> values 〓〓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 〓〓as 32 
> bits where it should be 64 bits. Is this behavior correct?
> 
> []'s
> 
> -Otac〓lio
> _______________________________________________
> freebsd-current@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org"
> 
> 


-- 
Tomoaki AOKI    <junchoon@dec.sakura.ne.jp>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20170710154046.58c3d7b14a227a20bea3e55b>