lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Fri, 23 Mar 2007 20:45:21 -0400
From:	Kyle Moffett <mrmacman_g4@....com>
To:	"H. Peter Anvin" <hpa@...or.com>
Cc:	Randy Dunlap <randy.dunlap@...cle.com>,
	Andrew Morton <akpm@...ux-foundation.org>,
	"J.H." <warthog9@...nel.org>,
	kernel list <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH] sysctl: vfs_cache_divisor

On Mar 23, 2007, at 16:59:02, H. Peter Anvin wrote:
> Randy Dunlap wrote:
>> Hi,
>> That makes a lot of sense to me.  It gives us finer-grained  
>> control without having to support fixed-point data.  I've been  
>> working on the fixed-point data patch, but I'm going to give this  
>> method some time also, to see how it looks in code (instead of  
>> just thinking about it).
>
> Well, to be specific, it actually is the same thing with different  
> syntax (38.55 or 3855/100).

Not quite; if you're dealing with numbers near the limit of the range  
of "int" then IIRC fixed point is harder to get both good accuracy  
and good overflow behavior compared to a user-set fraction:

Assuming "fraction" is a reduce (num, den) pair, then to compute  
"result = value * fraction" with optimal accuracy:

/* On input: reduce num/den but retain old values for display  
purposes */
gcd = euclid(&inputnum, &inputden);
num = inputnum/gcd;
den = inputden/gcd;
valmax = UINT_MAX / num;

/* For computation: */
result = (val > valmax) ? (val/den)*num : (val*num)/den;

Doing that with fixed point is possible, but a bit more tricky, and  
you lose accuracy for something like "1/3", which isn't quite equal  
to "0.3333".  Note that if you aren't really careful with your fixed- 
point then "0.3333 * 3" ends up being 0:  (3333 * 3) / 10000 ==  
9999 / 10000 == 0.  Rounding is possible but it's better to just let  
them specify the exact fraction directly and avoid the confusion.

Cheers,
Kyle Moffett

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ