Author: zwoop
Date: Wed Sep 14 02:28:52 2011
New Revision: 1170416
URL: http://svn.apache.org/viewvc?rev=1170416&view=rev
Log:
TS-567 Standardize the use of ats_memalign, and use it for FBSD / Darwin
Modified:
trafficserver/traffic/trunk/iocore/cache/Cache.cc
trafficserver/traffic/trunk/iocore/cache/CacheDir.cc
trafficserver/traffic/trunk/iocore/cache/CacheDisk.cc
trafficserver/traffic/trunk/iocore/eventsystem/P_IOBuffer.h
trafficserver/traffic/trunk/iocore/hostdb/MultiCache.cc
trafficserver/traffic/trunk/lib/ts/ink_memory.cc
trafficserver/traffic/trunk/lib/ts/ink_port.h
trafficserver/traffic/trunk/lib/ts/ink_queue.cc
Modified: trafficserver/traffic/trunk/iocore/cache/Cache.cc
URL:
http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/cache/Cache.cc?rev=1170416&r1=1170415&r2=1170416&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/cache/Cache.cc (original)
+++ trafficserver/traffic/trunk/iocore/cache/Cache.cc Wed Sep 14 02:28:52 2011
@@ -130,9 +130,10 @@ struct VolInitInfo
VolInitInfo()
{
recover_pos = 0;
- if ((vol_h_f = (char *) valloc(4 * STORE_BLOCK_SIZE)) != NULL)
- memset(vol_h_f, 0, 4 * STORE_BLOCK_SIZE);
+ vol_h_f = (char *)ats_memalign(sysconf(_SC_PAGESIZE), 4 *
STORE_BLOCK_SIZE);
+ memset(vol_h_f, 0, 4 * STORE_BLOCK_SIZE);
}
+
~VolInitInfo()
{
for (int i = 0; i < 4; i++) {
@@ -1061,21 +1062,7 @@ Vol::init(char *s, off_t blocks, off_t d
evacuate = (DLL<EvacuationBlock> *)ats_malloc(evac_len);
memset(evacuate, 0, evac_len);
-#if !defined (_WIN32)
- raw_dir = (char *) valloc(vol_dirlen(this));
-#else
- /* the directory should be page aligned for raw disk transfers.
- WIN32 does not support valloc
- or memalign, so we need to allocate extra space and then align the
- pointer ourselves.
- Don't need to keep track of the pointer to the original memory since
- we never free this */
- size_t alignment = getpagesize();
- size_t mem_to_alloc = vol_dirlen(this) + (alignment - 1);
- raw_dir = (char *)ats_malloc(mem_to_alloc);
- raw_dir = (char *) align_pointer_forward(raw_dir, alignment);
-#endif
-
+ raw_dir = (char *)ats_memalign(sysconf(_SC_PAGESIZE), vol_dirlen(this));
dir = (Dir *) (raw_dir + vol_headerlen(this));
header = (VolHeaderFooter *) raw_dir;
footer = (VolHeaderFooter *) (raw_dir + vol_dirlen(this) -
ROUND_TO_STORE_BLOCK(sizeof(VolHeaderFooter)));
@@ -1225,12 +1212,7 @@ Vol::handle_recover_from_data(int event,
recover_wrapped = 1;
recover_pos = start;
}
-#if defined(_WIN32)
- io.aiocb.aio_buf = (char *)ats_malloc(RECOVERY_SIZE);
-#else
- io.aiocb.aio_buf = (char *) valloc(RECOVERY_SIZE);
-#endif
- io.aiocb.aio_nbytes = RECOVERY_SIZE;
+ io.aiocb.aio_buf = (char *)ats_memalign(sysconf(_SC_PAGESIZE),
RECOVERY_SIZE);
if ((off_t)(recover_pos + io.aiocb.aio_nbytes) > (off_t)(skip + len))
io.aiocb.aio_nbytes = (skip + len) - recover_pos;
} else if (event == AIO_EVENT_DONE) {
Modified: trafficserver/traffic/trunk/iocore/cache/CacheDir.cc
URL:
http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/cache/CacheDir.cc?rev=1170416&r1=1170415&r2=1170416&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/cache/CacheDir.cc (original)
+++ trafficserver/traffic/trunk/iocore/cache/CacheDir.cc Wed Sep 14 02:28:52
2011
@@ -941,7 +941,7 @@ sync_cache_dir_on_shutdown(void)
if (buflen < dirlen) {
if (buf)
ats_memalign_free(buf);
- buf = (char *)ats_memalign(sysconf(_SC_PAGESIZE), dirlen); // buf
= (char*) valloc (dirlen);
+ buf = (char *)ats_memalign(sysconf(_SC_PAGESIZE), dirlen);
buflen = dirlen;
}
Modified: trafficserver/traffic/trunk/iocore/cache/CacheDisk.cc
URL:
http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/cache/CacheDisk.cc?rev=1170416&r1=1170415&r2=1170416&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/cache/CacheDisk.cc (original)
+++ trafficserver/traffic/trunk/iocore/cache/CacheDisk.cc Wed Sep 14 02:28:52
2011
@@ -55,12 +55,7 @@ CacheDisk::open(char *s, off_t blocks, o
start = skip + header_len;
num_usable_blocks = (off_t(len * STORE_BLOCK_SIZE) - (start - askip)) >>
STORE_BLOCK_SHIFT;
-#if defined(_WIN32)
- header = (DiskHeader *)ats_malloc(header_len);
-#else
- header = (DiskHeader *) valloc(header_len);
-#endif
-
+ header = (DiskHeader *)ats_memalign(sysconf(_SC_PAGESIZE), header_len);
memset(header, 0, header_len);
if (clear) {
SET_HANDLER(&CacheDisk::clearDone);
Modified: trafficserver/traffic/trunk/iocore/eventsystem/P_IOBuffer.h
URL:
http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/eventsystem/P_IOBuffer.h?rev=1170416&r1=1170415&r2=1170416&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/eventsystem/P_IOBuffer.h (original)
+++ trafficserver/traffic/trunk/iocore/eventsystem/P_IOBuffer.h Wed Sep 14
02:28:52 2011
@@ -291,8 +291,7 @@ IOBufferData::alloc(int64_t size_index,
_data = (char *) ioBufAllocator[size_index].alloc_void();
// coverity[dead_error_condition]
else if (BUFFER_SIZE_INDEX_IS_XMALLOCED(size_index))
- // coverity[dead_error_line]
- _data = (char *) valloc(index_to_buffer_size(size_index));
+ _data = (char *)ats_memalign(sysconf(_SC_PAGESIZE),
index_to_buffer_size(size_index));
break;
default:
case DEFAULT_ALLOC:
Modified: trafficserver/traffic/trunk/iocore/hostdb/MultiCache.cc
URL:
http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/hostdb/MultiCache.cc?rev=1170416&r1=1170415&r2=1170416&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/hostdb/MultiCache.cc (original)
+++ trafficserver/traffic/trunk/iocore/hostdb/MultiCache.cc Wed Sep 14 02:28:52
2011
@@ -385,7 +385,7 @@ MultiCacheBase::mmap_data(bool private_f
// open files
//
if (!store || !store->n_disks)
- goto Lvalloc;
+ goto Lalloc;
for (i = 0; i < store->n_disks; i++) {
Span *ds = store->disk[i];
for (int j = 0; j < store->disk[i]->paths(); j++) {
@@ -400,7 +400,7 @@ MultiCacheBase::mmap_data(bool private_f
if (fds[n_fds] < 0) {
if (!zero_fill) {
Warning("unable to open file '%s': %d, %s", path, errno,
strerror(errno));
- goto Lvalloc;
+ goto Lalloc;
}
fds[n_fds] = 0;
}
@@ -408,7 +408,7 @@ MultiCacheBase::mmap_data(bool private_f
if (zorch_file(path, fds[n_fds], (int64_t) d->blocks * (int64_t)
STORE_BLOCK_SIZE, 0)) {
Warning("unable to set file size '%s' to %" PRId64 ": %d, %s",
(int64_t) d->blocks * STORE_BLOCK_SIZE, path, errno,
strerror(errno));
- goto Lvalloc;
+ goto Lalloc;
}
}
n_fds++;
@@ -510,12 +510,13 @@ MultiCacheBase::mmap_data(bool private_f
if (fds[i] >= 0)
ink_assert(!socketManager.close(fds[i]));
return 0;
-Lvalloc:
+Lalloc:
{
if (data)
free(data);
char *cur = 0;
- data = (char *) valloc(totalsize);
+
+ data = (char *)ats_memalign(sysconf(_SC_PAGESIZE), totalsize);
cur = data + STORE_BLOCK_SIZE * blocks_in_level(0);
if (levels > 1)
cur = data + STORE_BLOCK_SIZE * blocks_in_level(1);
Modified: trafficserver/traffic/trunk/lib/ts/ink_memory.cc
URL:
http://svn.apache.org/viewvc/trafficserver/traffic/trunk/lib/ts/ink_memory.cc?rev=1170416&r1=1170415&r2=1170416&view=diff
==============================================================================
--- trafficserver/traffic/trunk/lib/ts/ink_memory.cc (original)
+++ trafficserver/traffic/trunk/lib/ts/ink_memory.cc Wed Sep 14 02:28:52 2011
@@ -82,19 +82,11 @@ ats_realloc(void *ptr, size_t size)
return newptr;
} /* End ats_realloc */
-void
-ats_memalign_free(void *ptr)
-{
- if (likely(ptr)) {
- ats_free(ptr);
- }
-}
-
+// TODO: For Win32 platforms, we need to figure out what to do with memalign.
+// The older code had ifdef's around such calls, turning them into
ats_malloc().
void *
ats_memalign(size_t alignment, size_t size)
{
-#ifndef NO_MEMALIGN
-
void *ptr;
#if TS_HAS_POSIX_MEMALIGN
@@ -102,6 +94,7 @@ ats_memalign(size_t alignment, size_t si
return ats_malloc(size);
int retcode = posix_memalign(&ptr, alignment, size);
+
if (unlikely(retcode)) {
if (retcode == EINVAL) {
ink_fatal(1, "ats_memalign: couldn't allocate %d bytes at alignment %d -
invalid alignment parameter",
@@ -121,38 +114,6 @@ ats_memalign(size_t alignment, size_t si
}
#endif
return ptr;
-#else
-#if defined(freebsd) || defined(darwin)
- /*
- * DEC malloc calims to align for "any allocatable type",
- * and the following code checks that.
- */
- switch (alignment) {
- case 1:
- case 2:
- case 4:
- case 8:
- case 16:
- return ats_malloc(size);
- case 32:
- case 64:
- case 128:
- case 256:
- case 512:
- case 1024:
- case 2048:
- case 4096:
- case 8192:
- return valloc(size);
- default:
- abort();
- break;
- }
-# else
-# error "Need a memalign"
-# endif
-#endif /* #ifndef NO_MEMALIGN */
- return NULL;
} /* End ats_memalign */
void
@@ -169,3 +130,11 @@ ats_free_null(void *ptr)
free(ptr);
return NULL;
} /* End ats_free_null */
+
+void
+ats_memalign_free(void *ptr)
+{
+ if (likely(ptr)) {
+ free(ptr);
+ }
+}
Modified: trafficserver/traffic/trunk/lib/ts/ink_port.h
URL:
http://svn.apache.org/viewvc/trafficserver/traffic/trunk/lib/ts/ink_port.h?rev=1170416&r1=1170415&r2=1170416&view=diff
==============================================================================
--- trafficserver/traffic/trunk/lib/ts/ink_port.h (original)
+++ trafficserver/traffic/trunk/lib/ts/ink_port.h Wed Sep 14 02:28:52 2011
@@ -76,12 +76,7 @@
#endif
#endif
-#if defined(freebsd)
-#define NO_MEMALIGN
-#endif
-
#if defined(darwin)
-#define NO_MEMALIGN
#define RENTRENT_GETHOSTBYNAME
#define RENTRENT_GETHOSTBYADDR
#endif
Modified: trafficserver/traffic/trunk/lib/ts/ink_queue.cc
URL:
http://svn.apache.org/viewvc/trafficserver/traffic/trunk/lib/ts/ink_queue.cc?rev=1170416&r1=1170415&r2=1170416&view=diff
==============================================================================
--- trafficserver/traffic/trunk/lib/ts/ink_queue.cc (original)
+++ trafficserver/traffic/trunk/lib/ts/ink_queue.cc Wed Sep 14 02:28:52 2011
@@ -250,7 +250,6 @@ ink_freelist_new(InkFreeList * f)
#endif /* MEMPROTECT */
void *newp = NULL;
-#ifndef NO_MEMALIGN
#ifdef DEBUG
char *oldsbrk = (char *) sbrk(0), *newsbrk = NULL;
#endif
@@ -266,21 +265,6 @@ ink_freelist_new(InkFreeList * f)
newsbrk - oldsbrk, fastmemtotal); */
#endif
SET_FREELIST_POINTER_VERSION(item, newp, 0);
-#else
- uintptr_t add;
- uintptr_t mask;
- if (f->alignment) {
- add = f->alignment - 1;
- mask = ~(uintptr_t) add;
- } else {
- add = 0;
- mask = ~0;
- }
- newp = ats_malloc(f->chunk_size * type_size + add);
- fl_memadd(f->chunk_size * type_size + add);
- newp = (void *) ((((uintptr_t) newp) + add) & mask);
- SET_FREELIST_POINTER_VERSION(item, newp, 0);
-#endif
#if !defined(INK_USE_MUTEX_FOR_FREELISTS)
ink_atomic_increment((int *) &f->allocated, f->chunk_size);