mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-25 11:47:43 +03:00
OpenZFS 8484 - Implement aggregate sum and use for arc counters
In pursuit of improving performance on multi-core systems, we should implements fanned out counters and use them to improve the performance of some of the arc statistics. These stats are updated extremely frequently, and can consume a significant amount of CPU time. Authored by: Paul Dagnelie <pcd@delphix.com> Reviewed by: Pavel Zakharov <pavel.zakharov@delphix.com> Reviewed by: Matthew Ahrens <mahrens@delphix.com> Approved by: Dan McDonald <danmcd@joyent.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Ported-by: Paul Dagnelie <pcd@delphix.com> OpenZFS-issue: https://www.illumos.org/issues/8484 OpenZFS-commit: https://github.com/openzfs/openzfs/commit/7028a8b92b7 Issue #3752 Closes #7462
This commit is contained in:
committed by
Brian Behlendorf
parent
f0ed6c7448
commit
37fb3e4318
+6
-14
@@ -48,6 +48,7 @@
|
||||
#include <sys/callb.h>
|
||||
#include <sys/abd.h>
|
||||
#include <sys/vdev.h>
|
||||
#include <sys/cityhash.h>
|
||||
|
||||
kstat_t *dbuf_ksp;
|
||||
|
||||
@@ -270,23 +271,14 @@ static dbuf_hash_table_t dbuf_hash_table;
|
||||
|
||||
static uint64_t dbuf_hash_count;
|
||||
|
||||
/*
|
||||
* We use Cityhash for this. It's fast, and has good hash properties without
|
||||
* requiring any large static buffers.
|
||||
*/
|
||||
static uint64_t
|
||||
dbuf_hash(void *os, uint64_t obj, uint8_t lvl, uint64_t blkid)
|
||||
{
|
||||
uintptr_t osv = (uintptr_t)os;
|
||||
uint64_t crc = -1ULL;
|
||||
|
||||
ASSERT(zfs_crc64_table[128] == ZFS_CRC64_POLY);
|
||||
crc = (crc >> 8) ^ zfs_crc64_table[(crc ^ (lvl)) & 0xFF];
|
||||
crc = (crc >> 8) ^ zfs_crc64_table[(crc ^ (osv >> 6)) & 0xFF];
|
||||
crc = (crc >> 8) ^ zfs_crc64_table[(crc ^ (obj >> 0)) & 0xFF];
|
||||
crc = (crc >> 8) ^ zfs_crc64_table[(crc ^ (obj >> 8)) & 0xFF];
|
||||
crc = (crc >> 8) ^ zfs_crc64_table[(crc ^ (blkid >> 0)) & 0xFF];
|
||||
crc = (crc >> 8) ^ zfs_crc64_table[(crc ^ (blkid >> 8)) & 0xFF];
|
||||
|
||||
crc ^= (osv>>14) ^ (obj>>16) ^ (blkid>>16);
|
||||
|
||||
return (crc);
|
||||
return (cityhash4((uintptr_t)os, obj, (uint64_t)lvl, blkid));
|
||||
}
|
||||
|
||||
#define DBUF_EQUAL(dbuf, os, obj, level, blkid) \
|
||||
|
||||
Reference in New Issue
Block a user