Re: git: 7c566d6cfc7b - main - uma: Micro-optimize memory trashing
- In reply to: Alexander Motin : "git: 7c566d6cfc7b - main - uma: Micro-optimize memory trashing"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 11 Nov 2023 19:23:06 UTC
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 <mav@FreeBSD.org> > AuthorDate: 2023-11-09 18:07:46 +0000 > Commit: Alexander Motin <mav@FreeBSD.org> > 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