On Sun, Jul 09, 2017 at 11:15:18PM -0300, Otac??lio 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;
Why these casts are needed ?  What is the type of vm.v_vnodepgsin ?

> 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?

Show the _exact_ code fragment that reads the MIBs values.
_______________________________________________
freebsd-current@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"

Reply via email to