svn commit: r246834 - user/attilio/vmc-playground/sys/vm
Attilio Rao
attilio at FreeBSD.org
Fri Feb 15 14:48:07 UTC 2013
Author: attilio
Date: Fri Feb 15 14:48:06 2013
New Revision: 246834
URL: http://svnweb.freebsd.org/changeset/base/246834
Log:
Improve dynamic branch prediction and i-cache utilization:
- Use predict_false() to tag boot-time cache decisions
- Compact boot-time cache allocation into a separate, non-inline,
function that won't be called most of the times.
Sponsored by: EMC / Isilon storage division
Modified:
user/attilio/vmc-playground/sys/vm/vm_radix.c
Modified: user/attilio/vmc-playground/sys/vm/vm_radix.c
==============================================================================
--- user/attilio/vmc-playground/sys/vm/vm_radix.c Fri Feb 15 14:22:23 2013 (r246833)
+++ user/attilio/vmc-playground/sys/vm/vm_radix.c Fri Feb 15 14:48:06 2013 (r246834)
@@ -128,6 +128,18 @@ vm_radix_node_zone_dtor(void *mem, int s
}
#endif
+static struct vm_radix_node *
+vm_radix_carve_bootcache(void)
+{
+ struct vm_radix_node *rnode;
+
+ if (boot_cache_cnt == VM_RADIX_BOOT_CACHE)
+ panic("%s: Increase VM_RADIX_BOOT_CACHE", __func__);
+ rnode = &boot_cache[boot_cache_cnt];
+ boot_cache_cnt++;
+ return (rnode);
+}
+
/*
* Allocate a radix node. Pre-allocation ensures that the request will be
* always successfully satisfied.
@@ -137,12 +149,9 @@ vm_radix_node_get(vm_pindex_t owner, uin
{
struct vm_radix_node *rnode;
- if (boot_cache_cnt <= VM_RADIX_BOOT_CACHE) {
- if (boot_cache_cnt == VM_RADIX_BOOT_CACHE)
- panic("%s: Increase VM_RADIX_BOOT_CACHE", __func__);
- rnode = &boot_cache[boot_cache_cnt];
- boot_cache_cnt++;
- } else {
+ if (__predict_false(boot_cache_cnt <= VM_RADIX_BOOT_CACHE))
+ rnode = vm_radix_carve_bootcache();
+ else {
rnode = uma_zalloc(vm_radix_node_zone, M_NOWAIT | M_ZERO);
/*
@@ -173,7 +182,8 @@ static __inline void
vm_radix_node_put(struct vm_radix_node *rnode)
{
- if (rnode > boot_cache && rnode <= &boot_cache[VM_RADIX_BOOT_CACHE])
+ if (__predict_false(rnode > boot_cache &&
+ rnode <= &boot_cache[VM_RADIX_BOOT_CACHE]))
return;
uma_zfree(vm_radix_node_zone, rnode);
}
More information about the svn-src-user
mailing list