Loading debian/changelog +6 −0 Original line number Diff line number Diff line spades (3.13.0+dfsg-2~0jemalloc5) experimental; urgency=medium * Apply patch for jemalloc-5. Thank you Faidon Liambotis! -- Michael R. Crusoe <michael.crusoe@gmail.com> Wed, 09 Jan 2019 23:52:01 -0800 spades (3.13.0+dfsg-1) unstable; urgency=medium * New upstream version Loading debian/patches/jemalloc-5-compatibility-fixes.patch 0 → 100644 +73 −0 Original line number Diff line number Diff line Author: Faidon Liambotis <paravoid@debian.org> Description: Add jemalloc 3.6.0+ compatibility --- a/src/common/adt/kmer_vector.hpp +++ b/src/common/adt/kmer_vector.hpp @@ -26,18 +26,12 @@ private: ElTy *realloc() { #ifdef SPADES_USE_JEMALLOC - // First, try to expand in-place - if (storage_ && sizeof(ElTy) * capacity_ * el_sz_ > 4096 && - je_rallocm((void **) &storage_, NULL, sizeof(ElTy) * capacity_ * el_sz_, 0, ALLOCM_NO_MOVE) == - ALLOCM_SUCCESS) - return storage_; - - // Failed, do usual malloc / memcpy / free cycle - ElTy *res = (ElTy *) je_malloc(sizeof(ElTy) * capacity_ * el_sz_); - if (storage_) - std::memcpy(res, storage_, size_ * sizeof(ElTy) * el_sz_); - je_free(storage_); - storage_ = res; + // could simply be je_realloc(), if the realloc name wasn't redefined here + if (storage_) { + storage_ = (ElTy *) je_rallocx(storage_, sizeof(ElTy) * capacity_ * el_sz_, 0); + } else { + storage_ = (ElTy *) je_malloc(sizeof(ElTy) * capacity_ * el_sz_); + } #else // No JEMalloc, no cookies ElTy *res = new ElTy[capacity_ * el_sz_]; --- a/src/common/utils/logger/logger_impl.cpp +++ b/src/common/utils/logger/logger_impl.cpp @@ -106,17 +106,13 @@ void logger::log(level desired_level, const char* file, size_t line_num, const c size_t max_rss; #ifdef SPADES_USE_JEMALLOC - const size_t *cmem = 0;//, *cmem_max = 0; + size_t cmem = 0; size_t clen = sizeof(cmem); - je_mallctl("stats.cactive", &cmem, &clen, NULL, 0); - //je_mallctl("stats.cactive_max", &cmem_max, &clen, NULL, 0); - mem = (*cmem) / 1024; - //max_rss = (*cmem_max) / 1024; - max_rss = utils::get_max_rss(); -#else - max_rss = utils::get_max_rss(); + je_mallctl("stats.active", (void *)&cmem, &clen, NULL, 0); + mem = cmem / 1024; #endif + max_rss = utils::get_max_rss(); for (auto it = writers_.begin(); it != writers_.end(); ++it) (*it)->write_msg(time, mem, max_rss, desired_level, file, line_num, source, msg); --- a/src/common/utils/memory_limit.cpp +++ b/src/common/utils/memory_limit.cpp @@ -83,11 +83,11 @@ size_t get_max_rss() { size_t get_used_memory() { #ifdef SPADES_USE_JEMALLOC - const size_t *cmem = 0; + size_t cmem; size_t clen = sizeof(cmem); - je_mallctl("stats.cactive", &cmem, &clen, NULL, 0); - return *cmem; + je_mallctl("stats.active", &cmem, &clen, NULL, 0); + return cmem; #else return get_max_rss(); #endif -- 2.20.1 debian/patches/series +1 −0 Original line number Diff line number Diff line Loading @@ -18,3 +18,4 @@ fix-bool-cast spelling gcc7.patch jemalloc-5-compatibility-fixes.patch Loading
debian/changelog +6 −0 Original line number Diff line number Diff line spades (3.13.0+dfsg-2~0jemalloc5) experimental; urgency=medium * Apply patch for jemalloc-5. Thank you Faidon Liambotis! -- Michael R. Crusoe <michael.crusoe@gmail.com> Wed, 09 Jan 2019 23:52:01 -0800 spades (3.13.0+dfsg-1) unstable; urgency=medium * New upstream version Loading
debian/patches/jemalloc-5-compatibility-fixes.patch 0 → 100644 +73 −0 Original line number Diff line number Diff line Author: Faidon Liambotis <paravoid@debian.org> Description: Add jemalloc 3.6.0+ compatibility --- a/src/common/adt/kmer_vector.hpp +++ b/src/common/adt/kmer_vector.hpp @@ -26,18 +26,12 @@ private: ElTy *realloc() { #ifdef SPADES_USE_JEMALLOC - // First, try to expand in-place - if (storage_ && sizeof(ElTy) * capacity_ * el_sz_ > 4096 && - je_rallocm((void **) &storage_, NULL, sizeof(ElTy) * capacity_ * el_sz_, 0, ALLOCM_NO_MOVE) == - ALLOCM_SUCCESS) - return storage_; - - // Failed, do usual malloc / memcpy / free cycle - ElTy *res = (ElTy *) je_malloc(sizeof(ElTy) * capacity_ * el_sz_); - if (storage_) - std::memcpy(res, storage_, size_ * sizeof(ElTy) * el_sz_); - je_free(storage_); - storage_ = res; + // could simply be je_realloc(), if the realloc name wasn't redefined here + if (storage_) { + storage_ = (ElTy *) je_rallocx(storage_, sizeof(ElTy) * capacity_ * el_sz_, 0); + } else { + storage_ = (ElTy *) je_malloc(sizeof(ElTy) * capacity_ * el_sz_); + } #else // No JEMalloc, no cookies ElTy *res = new ElTy[capacity_ * el_sz_]; --- a/src/common/utils/logger/logger_impl.cpp +++ b/src/common/utils/logger/logger_impl.cpp @@ -106,17 +106,13 @@ void logger::log(level desired_level, const char* file, size_t line_num, const c size_t max_rss; #ifdef SPADES_USE_JEMALLOC - const size_t *cmem = 0;//, *cmem_max = 0; + size_t cmem = 0; size_t clen = sizeof(cmem); - je_mallctl("stats.cactive", &cmem, &clen, NULL, 0); - //je_mallctl("stats.cactive_max", &cmem_max, &clen, NULL, 0); - mem = (*cmem) / 1024; - //max_rss = (*cmem_max) / 1024; - max_rss = utils::get_max_rss(); -#else - max_rss = utils::get_max_rss(); + je_mallctl("stats.active", (void *)&cmem, &clen, NULL, 0); + mem = cmem / 1024; #endif + max_rss = utils::get_max_rss(); for (auto it = writers_.begin(); it != writers_.end(); ++it) (*it)->write_msg(time, mem, max_rss, desired_level, file, line_num, source, msg); --- a/src/common/utils/memory_limit.cpp +++ b/src/common/utils/memory_limit.cpp @@ -83,11 +83,11 @@ size_t get_max_rss() { size_t get_used_memory() { #ifdef SPADES_USE_JEMALLOC - const size_t *cmem = 0; + size_t cmem; size_t clen = sizeof(cmem); - je_mallctl("stats.cactive", &cmem, &clen, NULL, 0); - return *cmem; + je_mallctl("stats.active", &cmem, &clen, NULL, 0); + return cmem; #else return get_max_rss(); #endif -- 2.20.1
debian/patches/series +1 −0 Original line number Diff line number Diff line Loading @@ -18,3 +18,4 @@ fix-bool-cast spelling gcc7.patch jemalloc-5-compatibility-fixes.patch