On 11/9/23 10:21 AM, Alexander Motin wrote:
The branch main has been updated by mav:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=7c566d6cfc7bfb913bad89d87386fa21dce8c2e6

commit 7c566d6cfc7bfb913bad89d87386fa21dce8c2e6
Author:     Alexander Motin <[email protected]>
AuthorDate: 2023-11-09 18:07:46 +0000
Commit:     Alexander Motin <[email protected]>
CommitDate: 2023-11-09 18:07:46 +0000

     uma: Micro-optimize memory trashing
Use u_long for memory accesses instead of uint32_t. On my tests on
     amd64 this by ~30% reduces time spent in those functions thanks to
     bigger 64bit accesses.  i386 still uses 32bit accesses.
MFC after: 1 month
---
  sys/vm/uma_dbg.c | 62 ++++++++++++++++++++++++--------------------------------
  1 file changed, 26 insertions(+), 36 deletions(-)

diff --git a/sys/vm/uma_dbg.c b/sys/vm/uma_dbg.c
index 36567f3b3968..76dd2bfde2fe 100644
--- a/sys/vm/uma_dbg.c
+++ b/sys/vm/uma_dbg.c
@@ -64,27 +64,20 @@ static const uint32_t uma_junk = 0xdeadc0de;
  int
  trash_ctor(void *mem, int size, void *arg, int flags)
  {
-       int cnt;
-       uint32_t *p;
+       u_long *p = mem, *e;
#ifdef DEBUG_MEMGUARD
        if (is_memguard_addr(mem))
                return (0);
  #endif
- cnt = size / sizeof(uma_junk);
-
-       for (p = mem; cnt > 0; cnt--, p++)
-               if (*p != uma_junk) {
-#ifdef INVARIANTS
-                       panic("Memory modified after free %p(%d) val=%x @ %p\n",
-                           mem, size, *p, p);
-#else
-                       printf("Memory modified after free %p(%d) val=%x @ 
%p\n",
-                           mem, size, *p, p);
-#endif
-                       return (0);
-               }
+       e = p + size / sizeof(*p);
+       for (; p < e; p++) {
+               if (__predict_true(*p == uma_junk))
+                       continue;
+               panic("Memory modified after free %p(%d) val=%lx @ %p\n",
+                   mem, size, *p, p);
+       }
        return (0);

For future reference, switching from printf to panic here for the !INVARIANTS 
case
is a good change I think, but it was probably worth calling out in the commit 
log
(or possibly doing as a separate commit before/after this one).

--
John Baldwin


Reply via email to