You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by bc...@apache.org on 2015/12/02 23:34:24 UTC
[1/2] trafficserver git commit: TS-3883: Fix madvise
Repository: trafficserver
Updated Branches:
refs/heads/6.0.x c562c9d91 -> 31deeceb0
TS-3883: Fix madvise
(cherry picked from commit 471b96992d1eb07b46b681e69096b5b1f18ff156)
Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/afd9a4c4
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/afd9a4c4
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/afd9a4c4
Branch: refs/heads/6.0.x
Commit: afd9a4c47e1164ac86def40c00e63e90296f7a9d
Parents: c562c9d
Author: Phil Sorber <so...@apache.org>
Authored: Wed Oct 28 16:26:04 2015 -0600
Committer: Bryan Call <bc...@apache.org>
Committed: Wed Dec 2 14:31:32 2015 -0800
----------------------------------------------------------------------
lib/ts/ink_memory.cc | 16 ++--------------
lib/ts/ink_queue.cc | 19 ++++++++++---------
2 files changed, 12 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/afd9a4c4/lib/ts/ink_memory.cc
----------------------------------------------------------------------
diff --git a/lib/ts/ink_memory.cc b/lib/ts/ink_memory.cc
index c865379..698ab78 100644
--- a/lib/ts/ink_memory.cc
+++ b/lib/ts/ink_memory.cc
@@ -191,22 +191,10 @@ ats_msync(caddr_t addr, size_t len, caddr_t end, int flags)
int
ats_madvise(caddr_t addr, size_t len, int flags)
{
-#if defined(linux)
- (void)addr;
- (void)len;
- (void)flags;
- return 0;
-#else
- size_t pagesize = ats_pagesize();
- caddr_t a = (caddr_t)(((uintptr_t)addr) & ~(pagesize - 1));
- size_t l = (len + (addr - a) + pagesize - 1) & ~(pagesize - 1);
- int res = 0;
#if HAVE_POSIX_MADVISE
- res = posix_madvise(a, l, flags);
+ return posix_madvise(addr, len, flags);
#else
- res = madvise(a, l, flags);
-#endif
- return res;
+ return madvise(addr, len, flags);
#endif
}
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/afd9a4c4/lib/ts/ink_queue.cc
----------------------------------------------------------------------
diff --git a/lib/ts/ink_queue.cc b/lib/ts/ink_queue.cc
index 04e49c6..e100fa8 100644
--- a/lib/ts/ink_queue.cc
+++ b/lib/ts/ink_queue.cc
@@ -102,7 +102,7 @@ ink_freelist_init(InkFreeList **fl, const char *name, uint32_t type_size, uint32
if (ats_hugepage_enabled()) {
f->chunk_size = INK_ALIGN(chunk_size * f->type_size, ats_hugepage_size()) / f->type_size;
} else {
- f->chunk_size = chunk_size;
+ f->chunk_size = INK_ALIGN(chunk_size * f->type_size, ats_pagesize()) / f->type_size;
}
SET_FREELIST_POINTER_VERSION(f->head, FROM_PTR(0), 0);
@@ -161,19 +161,20 @@ ink_freelist_new(InkFreeList *f)
#endif /* MEMPROTECT */
void *newp = NULL;
+ size_t alloc_size = 0;
#ifdef DEBUG
char *oldsbrk = (char *)sbrk(0), *newsbrk = NULL;
#endif
- if (ats_hugepage_enabled())
- newp = ats_alloc_hugepage(f->chunk_size * type_size);
+ if (ats_hugepage_enabled()) {
+ alloc_size = INK_ALIGN(f->chunk_size * f->type_size, ats_hugepage_size());
+ newp = ats_alloc_hugepage(alloc_size);
+ }
if (newp == NULL) {
- if (f->alignment)
- newp = ats_memalign(f->alignment, f->chunk_size * type_size);
- else
- newp = ats_malloc(f->chunk_size * type_size);
+ alloc_size = INK_ALIGN(f->chunk_size * f->type_size, ats_pagesize());
+ newp = ats_memalign(ats_pagesize(), alloc_size);
}
- ats_madvise((caddr_t)newp, f->chunk_size * type_size, f->advice);
+ ats_madvise((caddr_t)newp, alloc_size, f->advice);
fl_memadd(f->chunk_size * type_size);
#ifdef DEBUG
newsbrk = (char *)sbrk(0);
@@ -239,7 +240,7 @@ ink_freelist_new(InkFreeList *f)
newp = ats_memalign(f->alignment, f->type_size);
else
newp = ats_malloc(f->type_size);
- ats_madvise((caddr_t)newp, f->type_size, f->advice);
+
return newp;
#endif
}
[2/2] trafficserver git commit: TS-3883: Fix loose alignment problem
(regression).
Posted by bc...@apache.org.
TS-3883: Fix loose alignment problem (regression).
(cherry picked from commit a33b8d602ffd3470d1688ebe2d1489c4cdf52dd1)
Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/31deeceb
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/31deeceb
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/31deeceb
Branch: refs/heads/6.0.x
Commit: 31deeceb07fa0bb87656bd08df19a4f5b8dd05b3
Parents: afd9a4c
Author: Alan M. Carroll <so...@yahoo-inc.com>
Authored: Mon Nov 2 14:23:03 2015 -0600
Committer: Bryan Call <bc...@apache.org>
Committed: Wed Dec 2 14:32:00 2015 -0800
----------------------------------------------------------------------
lib/ts/ink_queue.cc | 4 ++++
1 file changed, 4 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/31deeceb/lib/ts/ink_queue.cc
----------------------------------------------------------------------
diff --git a/lib/ts/ink_queue.cc b/lib/ts/ink_queue.cc
index e100fa8..c57fe34 100644
--- a/lib/ts/ink_queue.cc
+++ b/lib/ts/ink_queue.cc
@@ -96,6 +96,10 @@ ink_freelist_init(InkFreeList **fl, const char *name, uint32_t type_size, uint32
f->name = name;
/* quick test for power of 2 */
ink_assert(!(alignment & (alignment - 1)));
+ // It is never useful to have alignment requirement looser than a page size
+ // so clip it. This makes the item alignment checks in the actual allocator simpler.
+ if (alignment > ats_pagesize())
+ alignment = ats_pagesize();
f->alignment = alignment;
// Make sure we align *all* the objects in the allocation, not just the first one
f->type_size = INK_ALIGN(type_size, alignment);