* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74 @ 2019-10-21 23:42 ` Dmitry V. Levin 2019-10-22 0:01 ` Michael Shigorin ` (2 more replies) 0 siblings, 3 replies; 20+ messages in thread From: Dmitry V. Levin @ 2019-10-21 23:42 UTC (permalink / raw) To: ALT Devel discussion list [-- Attachment #1: Type: text/plain, Size: 7373 bytes --] On Tue, Sep 17, 2019 at 09:05:15AM +0000, Aleksei Nikiforov wrote: > Update of /people/darktemplar/packages/apt.git > > Changes statistics since common ancestor `0.5.15lorg2-alt73-1-gd6d78da' follows: > apt.spec | 6 +++++- > apt/apt-pkg/Makefile.am | 1 + > apt/apt-pkg/contrib/mmap.cc | 3 ++- > apt/apt-pkg/contrib/mmap.h | 3 ++- > apt/apt-pkg/pkgcache.h | 15 ++++++++------- > apt/apt-pkg/utils.h | 17 +++++++++++++++++ > 6 files changed, 35 insertions(+), 10 deletions(-) > > Changelog since common ancestor `0.5.15lorg2-alt73-1-gd6d78da' follows: > commit 875442eb7b676dd7994415e9becc64d0f5511f59 > Author: Aleksei Nikiforov <darktemplar@altlinux> > Date: Mon Sep 16 15:38:27 2019 +0300 > > 0.5.15lorg2-alt74 > > - Added debugging output for allocation functions. > - Fixed dynamic memory allocation pointer arithmetics issue. > > commit 9e6dc9a082c2e4f1b420ff57734a782b358ce317 > Author: Aleksei Nikiforov <darktemplar@altlinux> > Date: Mon Sep 16 15:37:00 2019 +0300 > > Improve alignment of structures moved on memory reallocation > > This change should fix pointer arithmetic issues for e2k. > Also use special ptrdiff_t type. > > Full diff since common ancestor `0.5.15lorg2-alt73-1-gd6d78da' follows: > diff --git a/apt.spec b/apt.spec > index 2143ce4..b7a2532 100644 > --- a/apt.spec > +++ b/apt.spec > @@ -1,6 +1,6 @@ > Name: apt > Version: 0.5.15lorg2 > -Release: alt73 > +Release: alt74 > > Summary: Debian's Advanced Packaging Tool with RPM support > Summary(ru_RU.UTF-8): Debian APT - Усовершенствованное средство управления пакетами с поддержкой RPM > @@ -320,6 +320,10 @@ unset RPM_PYTHON > %_libdir/%name/methods/https > > %changelog > +* Mon Sep 16 2019 Aleksei Nikiforov <darktemplar@altlinux> 0.5.15lorg2-alt74 > +- Added debugging output for allocation functions. > +- Fixed dynamic memory allocation pointer arithmetics issue. > + > * Thu Sep 05 2019 Aleksei Nikiforov <darktemplar@altlinux> 0.5.15lorg2-alt73 > - Improved handling of ipv6 addresses (Closes: #34000). > - Enabled url-decoding http_proxy env variable (thx to snejok@) (Closes: #37186). > diff --git a/apt/apt-pkg/Makefile.am b/apt/apt-pkg/Makefile.am > index 4c0d234..4461078 100644 > --- a/apt/apt-pkg/Makefile.am > +++ b/apt/apt-pkg/Makefile.am > @@ -105,6 +105,7 @@ libapt_pkg_la_SOURCES = \ > tagfile.h \ > update.cc \ > update.h \ > + utils.h \ > version.cc \ > version.h \ > versionmatch.cc \ > diff --git a/apt/apt-pkg/contrib/mmap.cc b/apt/apt-pkg/contrib/mmap.cc > index cf01be9..ea2aded 100644 > --- a/apt/apt-pkg/contrib/mmap.cc > +++ b/apt/apt-pkg/contrib/mmap.cc > @@ -38,6 +38,7 @@ > #include <unistd.h> > #include <fcntl.h> > #include <cstring> > +#include <stddef.h> > /*}}}*/ > > // MMap::MMap - Constructor /*{{{*/ > @@ -371,7 +372,7 @@ bool DynamicMMap::Grow(unsigned long long size) > Fd->Write(&C,sizeof(C)); > } > > - unsigned long const poolOffset = Pools - ((Pool*) Base); > + ptrdiff_t const poolOffset = Pools - ((Pool*) Base); > > if (Fd != 0) > { > diff --git a/apt/apt-pkg/contrib/mmap.h b/apt/apt-pkg/contrib/mmap.h > index bcbdaa1..439e4fa 100644 > --- a/apt/apt-pkg/contrib/mmap.h > +++ b/apt/apt-pkg/contrib/mmap.h > @@ -35,6 +35,7 @@ > #include <sys/mman.h> > > #include <apt-pkg/fileutl.h> > +#include <apt-pkg/utils.h> > > using std::string; > > @@ -80,7 +81,7 @@ class DynamicMMap : public MMap > public: > > // This is the allocation pool structure > - struct Pool > + struct alignas(get_minimal_power_of_2(sizeof(unsigned long) * 3)) Pool > { > unsigned long ItemSize; > unsigned long Start; > diff --git a/apt/apt-pkg/pkgcache.h b/apt/apt-pkg/pkgcache.h > index 56fc89d..324ece5 100644 > --- a/apt/apt-pkg/pkgcache.h > +++ b/apt/apt-pkg/pkgcache.h > @@ -25,6 +25,7 @@ > #include <string> > #include <time.h> > #include <apt-pkg/mmap.h> > +#include <apt-pkg/utils.h> > > using std::string; > > @@ -209,7 +210,7 @@ struct pkgCache::Header > Header(); > }; > > -struct pkgCache::Package > +struct alignas(get_minimal_power_of_2(sizeof(map_ptrloc) * 7 + sizeof(unsigned char) * 3 + sizeof(unsigned int) + sizeof(unsigned long))) pkgCache::Package > { > // Pointers > map_ptrloc Name; // Stringtable > @@ -231,7 +232,7 @@ struct pkgCache::Package > unsigned long Flags; > }; > > -struct pkgCache::PackageFile > +struct alignas(get_minimal_power_of_2(sizeof(map_ptrloc) * 10 + sizeof(unsigned long long) + sizeof(unsigned long) + sizeof(unsigned short) + sizeof(time_t))) pkgCache::PackageFile > { > // Names > map_ptrloc FileName; // Stringtable > @@ -252,7 +253,7 @@ struct pkgCache::PackageFile > time_t mtime; // Modification time for the file > }; > > -struct pkgCache::VerFile > +struct alignas(get_minimal_power_of_2(sizeof(map_ptrloc) * 3 + sizeof(unsigned short))) pkgCache::VerFile > { > map_ptrloc File; // PackageFile > map_ptrloc NextFile; // PkgVerFile > @@ -260,7 +261,7 @@ struct pkgCache::VerFile > unsigned short Size; > }; > > -struct pkgCache::Version > +struct alignas(get_minimal_power_of_2(sizeof(map_ptrloc) * 8 + sizeof(unsigned long long) * 2 + sizeof(unsigned int) * 2 + sizeof(unsigned char))) pkgCache::Version > { > map_ptrloc VerStr; // Stringtable > map_ptrloc Section; // StringTable (StringItem) > @@ -284,7 +285,7 @@ struct pkgCache::Version > unsigned char Priority; > }; > > -struct pkgCache::Dependency > +struct alignas(get_minimal_power_of_2(sizeof(map_ptrloc) * 6 + sizeof(unsigned char) * 2)) pkgCache::Dependency > { > map_ptrloc Version; // Stringtable > map_ptrloc Package; // Package > @@ -298,7 +299,7 @@ struct pkgCache::Dependency > unsigned char CompareOp; > }; > > -struct pkgCache::Provides > +struct alignas(get_minimal_power_of_2(sizeof(map_ptrloc) * 6)) pkgCache::Provides > { > map_ptrloc ParentPkg; // Pacakge > map_ptrloc Version; // Version > @@ -307,7 +308,7 @@ struct pkgCache::Provides > map_ptrloc NextPkgProv; // Provides > }; > > -struct pkgCache::StringItem > +struct alignas(get_minimal_power_of_2(sizeof(map_ptrloc) * 2)) pkgCache::StringItem > { > map_ptrloc String; // Stringtable > map_ptrloc NextItem; // StringItem > diff --git a/apt/apt-pkg/utils.h b/apt/apt-pkg/utils.h > new file mode 100644 > index 0000000..08f7f18 > --- /dev/null > +++ b/apt/apt-pkg/utils.h > @@ -0,0 +1,17 @@ > +#ifndef APT_EXTRA_UTILS_H > +#define APT_EXTRA_UTILS_H > + > +#include <stddef.h> > + > +template <size_t N> > +constexpr size_t get_minimal_power_of_2_helper(size_t size) > +{ > + return (size <= N) ? N : get_minimal_power_of_2_helper<N*2>(size); > +} > + > +constexpr size_t get_minimal_power_of_2(size_t size) > +{ > + return get_minimal_power_of_2_helper<1>(size); > +} > + > +#endif /* APT_EXTRA_UTILS_H */ Жаль, что вы не дождались первого апреля, но всё равно спасибо, шутка получилась отличная. -- ldv [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 801 bytes --] ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74 2019-10-21 23:42 ` [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74 Dmitry V. Levin @ 2019-10-22 0:01 ` Michael Shigorin 2019-10-22 8:32 ` Dmitry V. Levin 2019-10-22 4:06 ` Anton Farygin 2019-10-24 15:20 ` Ivan Zakharyaschev 2 siblings, 1 reply; 20+ messages in thread From: Michael Shigorin @ 2019-10-22 0:01 UTC (permalink / raw) To: devel On Tue, Oct 22, 2019 at 02:42:06AM +0300, Dmitry V. Levin wrote: > On Tue, Sep 17, 2019 at 09:05:15AM +0000, Aleksei Nikiforov wrote: > > Update of /people/darktemplar/packages/apt.git > > 0.5.15lorg2-alt74 > > - Added debugging output for allocation functions. > > - Fixed dynamic memory allocation pointer arithmetics issue. > Жаль, что вы не дождались первого апреля, но всё равно спасибо, > шутка получилась отличная. В смысле про fixed? -- ---- WBR, Michael Shigorin / http://altlinux.org ------ http://opennet.ru / http://anna-news.info ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74 2019-10-22 0:01 ` Michael Shigorin @ 2019-10-22 8:32 ` Dmitry V. Levin 2019-10-22 12:28 ` Anton Farygin 0 siblings, 1 reply; 20+ messages in thread From: Dmitry V. Levin @ 2019-10-22 8:32 UTC (permalink / raw) To: ALT Devel discussion list On Tue, Oct 22, 2019 at 03:01:16AM +0300, Michael Shigorin wrote: > On Tue, Oct 22, 2019 at 02:42:06AM +0300, Dmitry V. Levin wrote: > > On Tue, Sep 17, 2019 at 09:05:15AM +0000, Aleksei Nikiforov wrote: > > > Update of /people/darktemplar/packages/apt.git > > > 0.5.15lorg2-alt74 > > > - Added debugging output for allocation functions. > > > - Fixed dynamic memory allocation pointer arithmetics issue. > > Жаль, что вы не дождались первого апреля, но всё равно спасибо, > > шутка получилась отличная. > > В смысле про fixed? Именно. Этот патч увеличивает расход оперативной памяти apt'ом в среднем в полтора раза, но не исправляет UB с арифметикой указателей, поскольку MMap::Base как был невыровненным, так и остался невыровненным. В отличие от Debian, между прочим, где по умолчанию MMap::Base выровнен на начало страницы. -- ldv ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74 2019-10-22 8:32 ` Dmitry V. Levin @ 2019-10-22 12:28 ` Anton Farygin 2019-10-22 12:46 ` Anton Farygin 2019-10-22 15:32 ` Dmitry V. Levin 0 siblings, 2 replies; 20+ messages in thread From: Anton Farygin @ 2019-10-22 12:28 UTC (permalink / raw) To: devel On 22.10.2019 11:32, Dmitry V. Levin wrote: > On Tue, Oct 22, 2019 at 03:01:16AM +0300, Michael Shigorin wrote: >> On Tue, Oct 22, 2019 at 02:42:06AM +0300, Dmitry V. Levin wrote: >>> On Tue, Sep 17, 2019 at 09:05:15AM +0000, Aleksei Nikiforov wrote: >>>> Update of /people/darktemplar/packages/apt.git >>>> 0.5.15lorg2-alt74 >>>> - Added debugging output for allocation functions. >>>> - Fixed dynamic memory allocation pointer arithmetics issue. >>> Жаль, что вы не дождались первого апреля, но всё равно спасибо, >>> шутка получилась отличная. >> В смысле про fixed? > Именно. > > Этот патч увеличивает расход оперативной памяти apt'ом в среднем в полтора > раза, но не исправляет UB с арифметикой указателей, поскольку MMap::Base > как был невыровненным, так и остался невыровненным. В отличие от Debian, > между прочим, где по умолчанию MMap::Base выровнен на начало страницы. > > Я не вижу разницы в адресе MMap::Base на Debian и у нас - в обоих случаях он выровнен на начало страницы. ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74 2019-10-22 12:28 ` Anton Farygin @ 2019-10-22 12:46 ` Anton Farygin 2019-10-22 15:32 ` Dmitry V. Levin 1 sibling, 0 replies; 20+ messages in thread From: Anton Farygin @ 2019-10-22 12:46 UTC (permalink / raw) To: devel On 22.10.2019 15:28, Anton Farygin wrote: > On 22.10.2019 11:32, Dmitry V. Levin wrote: >> On Tue, Oct 22, 2019 at 03:01:16AM +0300, Michael Shigorin wrote: >>> On Tue, Oct 22, 2019 at 02:42:06AM +0300, Dmitry V. Levin wrote: >>>> On Tue, Sep 17, 2019 at 09:05:15AM +0000, Aleksei Nikiforov wrote: >>>>> Update of /people/darktemplar/packages/apt.git >>>>> 0.5.15lorg2-alt74 >>>>> - Added debugging output for allocation functions. >>>>> - Fixed dynamic memory allocation pointer arithmetics issue. >>>> Жаль, что вы не дождались первого апреля, но всё равно спасибо, >>>> шутка получилась отличная. >>> В смысле про fixed? >> Именно. >> >> Этот патч увеличивает расход оперативной памяти apt'ом в среднем в >> полтора >> раза, но не исправляет UB с арифметикой указателей, поскольку MMap::Base >> как был невыровненным, так и остался невыровненным. В отличие от >> Debian, >> между прочим, где по умолчанию MMap::Base выровнен на начало страницы. >> >> > Я не вижу разницы в адресе MMap::Base на Debian и у нас - в обоих > случаях он выровнен на начало страницы. Что касается потребления оперативной памяти, конечно оно будет расти. Но не так как ты написал - в полтора раза. потребление увеличивается на 10 мегабайт. Т.е. - меньше 10 процентов от всей используемой apt оперативной памяти. Хеши от тестового задания можно игнорировать - они занимают в памяти несколько сотен килобайт. содержимое /var/cache/apt/ перед каждой командой было подчищено. # time apt-get update Получено: 1 https://download.basealt.ru ALTLinux/Sisyphus/x86_64 release [1123B] Получено: 2 https://download.basealt.ru ALTLinux/Sisyphus/noarch release [707B] Получено: 3 https://download.basealt.ru ALTLinux/Sisyphus/x86_64-i586 release [555B] Получено 2385B за 0s (10,9kB/s). Найдено https://download.basealt.ru ALTLinux/Sisyphus/x86_64/classic pkglist Найдено https://download.basealt.ru ALTLinux/Sisyphus/x86_64/classic release Найдено https://download.basealt.ru ALTLinux/Sisyphus/noarch/classic pkglist Найдено https://download.basealt.ru ALTLinux/Sisyphus/noarch/classic release Найдено https://download.basealt.ru ALTLinux/Sisyphus/x86_64-i586/classic pkglist Найдено https://download.basealt.ru ALTLinux/Sisyphus/x86_64-i586/classic release Чтение списков пакетов... Завершено Построение дерева зависимостей... Завершено 4.07user 0.61system 0:05.22elapsed 89%CPU (0avgtext+0avgdata 155940maxresident)k 1480inputs+347064outputs (129major+38161minor)pagefaults 0swaps # time apt-get update Получено: 1 http://git.altlinux.org repo/239313/x86_64 release [557B] Получено: 2 http://git.altlinux.org repo/239313/x86_64-i586 release [532B] Получено: 3 https://download.basealt.ru ALTLinux/Sisyphus/x86_64 release [1123B] Получено: 4 https://download.basealt.ru ALTLinux/Sisyphus/noarch release [707B] Получено: 5 https://download.basealt.ru ALTLinux/Sisyphus/x86_64-i586 release [555B] Получено 3474B за 0s (15,6kB/s). Найдено http://git.altlinux.org repo/239313/x86_64/task pkglist Найдено http://git.altlinux.org repo/239313/x86_64/task release Найдено http://git.altlinux.org repo/239313/x86_64-i586/task pkglist Найдено http://git.altlinux.org repo/239313/x86_64-i586/task release Найдено https://download.basealt.ru ALTLinux/Sisyphus/x86_64/classic pkglist Найдено https://download.basealt.ru ALTLinux/Sisyphus/x86_64/classic release Найдено https://download.basealt.ru ALTLinux/Sisyphus/noarch/classic pkglist Найдено https://download.basealt.ru ALTLinux/Sisyphus/noarch/classic release Найдено https://download.basealt.ru ALTLinux/Sisyphus/x86_64-i586/classic pkglist Найдено https://download.basealt.ru ALTLinux/Sisyphus/x86_64-i586/classic release Чтение списков пакетов... Завершено Построение дерева зависимостей... Завершено 4.04user 0.68system 0:05.24elapsed 90%CPU (0avgtext+0avgdata 166504maxresident)k 0inputs+388648outputs (110major+42977minor)pagefaults 0swaps ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74 2019-10-22 12:28 ` Anton Farygin 2019-10-22 12:46 ` Anton Farygin @ 2019-10-22 15:32 ` Dmitry V. Levin 2019-10-22 15:51 ` Anton Farygin ` (2 more replies) 1 sibling, 3 replies; 20+ messages in thread From: Dmitry V. Levin @ 2019-10-22 15:32 UTC (permalink / raw) To: ALT Devel discussion list [-- Attachment #1: Type: text/plain, Size: 1842 bytes --] On Tue, Oct 22, 2019 at 03:28:40PM +0300, Anton Farygin wrote: > On 22.10.2019 11:32, Dmitry V. Levin wrote: > > On Tue, Oct 22, 2019 at 03:01:16AM +0300, Michael Shigorin wrote: > >> On Tue, Oct 22, 2019 at 02:42:06AM +0300, Dmitry V. Levin wrote: > >>> On Tue, Sep 17, 2019 at 09:05:15AM +0000, Aleksei Nikiforov wrote: > >>>> Update of /people/darktemplar/packages/apt.git > >>>> 0.5.15lorg2-alt74 > >>>> - Added debugging output for allocation functions. > >>>> - Fixed dynamic memory allocation pointer arithmetics issue. > >>> Жаль, что вы не дождались первого апреля, но всё равно спасибо, > >>> шутка получилась отличная. > >> В смысле про fixed? > > Именно. > > > > Этот патч увеличивает расход оперативной памяти apt'ом в среднем в полтора > > раза, но не исправляет UB с арифметикой указателей, поскольку MMap::Base > > как был невыровненным, так и остался невыровненным. В отличие от Debian, > > между прочим, где по умолчанию MMap::Base выровнен на начало страницы. > > > Я не вижу разницы в адресе MMap::Base на Debian и у нас - в обоих > случаях он выровнен на начало страницы. У Алексея: void *tmp_base = realloc(Base, newSize); if (debug_grow) _error->Warning(_("DynamicMMap::Grow: realloc from %llu to %llu, result: %s"), WorkSpace, newSize, (tmp_base == n if (tmp_base == NULL) return false; Base = tmp_base; В Debian по умолчанию: #ifdef MREMAP_MAYMOVE if ((Flags & Moveable) == Moveable) Base = mremap(Base, WorkSpace, newSize, MREMAP_MAYMOVE); else #endif Base = mremap(Base, WorkSpace, newSize, 0); if(Base == MAP_FAILED) return false; Всё ещё не видно разницы? -- ldv [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 801 bytes --] ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74 2019-10-22 15:32 ` Dmitry V. Levin @ 2019-10-22 15:51 ` Anton Farygin 2019-10-22 16:52 ` Ivan Zakharyaschev 2019-10-24 13:59 ` Aleksei Nikiforov 2 siblings, 0 replies; 20+ messages in thread From: Anton Farygin @ 2019-10-22 15:51 UTC (permalink / raw) To: devel On 22.10.2019 18:32, Dmitry V. Levin wrote: > On Tue, Oct 22, 2019 at 03:28:40PM +0300, Anton Farygin wrote: >> On 22.10.2019 11:32, Dmitry V. Levin wrote: >>> On Tue, Oct 22, 2019 at 03:01:16AM +0300, Michael Shigorin wrote: >>>> On Tue, Oct 22, 2019 at 02:42:06AM +0300, Dmitry V. Levin wrote: >>>>> On Tue, Sep 17, 2019 at 09:05:15AM +0000, Aleksei Nikiforov wrote: >>>>>> Update of /people/darktemplar/packages/apt.git >>>>>> 0.5.15lorg2-alt74 >>>>>> - Added debugging output for allocation functions. >>>>>> - Fixed dynamic memory allocation pointer arithmetics issue. >>>>> Жаль, что вы не дождались первого апреля, но всё равно спасибо, >>>>> шутка получилась отличная. >>>> В смысле про fixed? >>> Именно. >>> >>> Этот патч увеличивает расход оперативной памяти apt'ом в среднем в полтора >>> раза, но не исправляет UB с арифметикой указателей, поскольку MMap::Base >>> как был невыровненным, так и остался невыровненным. В отличие от Debian, >>> между прочим, где по умолчанию MMap::Base выровнен на начало страницы. >>> >> Я не вижу разницы в адресе MMap::Base на Debian и у нас - в обоих >> случаях он выровнен на начало страницы. > У Алексея: > > void *tmp_base = realloc(Base, newSize); > > if (debug_grow) > _error->Warning(_("DynamicMMap::Grow: realloc from %llu to %llu, result: %s"), WorkSpace, newSize, (tmp_base == n > > if (tmp_base == NULL) > return false; > > Base = tmp_base; > > В Debian по умолчанию: > > #ifdef MREMAP_MAYMOVE > > if ((Flags & Moveable) == Moveable) > Base = mremap(Base, WorkSpace, newSize, MREMAP_MAYMOVE); > else > #endif > Base = mremap(Base, WorkSpace, newSize, 0); > > if(Base == MAP_FAILED) > return false; > > Всё ещё не видно разницы? > Я просто посмотрел то, что получается (адреса). Результат одинаковый. Если поискать это место в коде Алексея, то я вижу его в строке 180 (такое же как в приведённом тобой из Debian). Там же поведение разное - если файл открыт и если нет. ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74 2019-10-22 15:32 ` Dmitry V. Levin 2019-10-22 15:51 ` Anton Farygin @ 2019-10-22 16:52 ` Ivan Zakharyaschev 2019-10-24 13:59 ` Aleksei Nikiforov 2 siblings, 0 replies; 20+ messages in thread From: Ivan Zakharyaschev @ 2019-10-22 16:52 UTC (permalink / raw) To: ALT Linux Team development discussions [-- Attachment #1: Type: text/plain, Size: 2316 bytes --] On Tue, 22 Oct 2019, Dmitry V. Levin wrote: > On Tue, Oct 22, 2019 at 03:28:40PM +0300, Anton Farygin wrote: > > On 22.10.2019 11:32, Dmitry V. Levin wrote: > > > On Tue, Oct 22, 2019 at 03:01:16AM +0300, Michael Shigorin wrote: > > >> On Tue, Oct 22, 2019 at 02:42:06AM +0300, Dmitry V. Levin wrote: > > >>> On Tue, Sep 17, 2019 at 09:05:15AM +0000, Aleksei Nikiforov wrote: > > >>>> Update of /people/darktemplar/packages/apt.git > > >>>> 0.5.15lorg2-alt74 > > >>>> - Added debugging output for allocation functions. > > >>>> - Fixed dynamic memory allocation pointer arithmetics issue. > > >>> Жаль, что вы не дождались первого апреля, но всё равно спасибо, > > >>> шутка получилась отличная. > > >> В смысле про fixed? > > > Именно. > > > > > > Этот патч увеличивает расход оперативной памяти apt'ом в среднем в полтора > > > раза, но не исправляет UB с арифметикой указателей, поскольку MMap::Base > > > как был невыровненным, так и остался невыровненным. В отличие от Debian, > > > между прочим, где по умолчанию MMap::Base выровнен на начало страницы. > > > > > Я не вижу разницы в адресе MMap::Base на Debian и у нас - в обоих > > случаях он выровнен на начало страницы. > > У Алексея: > > void *tmp_base = realloc(Base, newSize); > > if (debug_grow) > _error->Warning(_("DynamicMMap::Grow: realloc from %llu to %llu, result: %s"), WorkSpace, newSize, (tmp_base == n > > if (tmp_base == NULL) > return false; > > Base = tmp_base; Если не ошибаюсь, realloc используется только в особых случаях (когда в файл не можем писать, например, когда не-root). Проблема с попорченными адресами на e2k проявлялась одинаково и при использовании mremap, и при realloc. Может быть, есть какая-то разница с Debian в первоначальной аллокации, но в той части, где делаются последующие mremap, нет, насколько я понимаю. > В Debian по умолчанию: > > #ifdef MREMAP_MAYMOVE > > if ((Flags & Moveable) == Moveable) > Base = mremap(Base, WorkSpace, newSize, MREMAP_MAYMOVE); > else > #endif > Base = mremap(Base, WorkSpace, newSize, 0); > > if(Base == MAP_FAILED) > return false; > > Всё ещё не видно разницы? > > > -- > ldv > ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74 2019-10-22 15:32 ` Dmitry V. Levin 2019-10-22 15:51 ` Anton Farygin 2019-10-22 16:52 ` Ivan Zakharyaschev @ 2019-10-24 13:59 ` Aleksei Nikiforov 2019-10-24 15:10 ` Andrey Savchenko 2 siblings, 1 reply; 20+ messages in thread From: Aleksei Nikiforov @ 2019-10-24 13:59 UTC (permalink / raw) To: devel 22.10.2019 18:32, Dmitry V. Levin пишет: > On Tue, Oct 22, 2019 at 03:28:40PM +0300, Anton Farygin wrote: >> On 22.10.2019 11:32, Dmitry V. Levin wrote: >>> On Tue, Oct 22, 2019 at 03:01:16AM +0300, Michael Shigorin wrote: >>>> On Tue, Oct 22, 2019 at 02:42:06AM +0300, Dmitry V. Levin wrote: >>>>> On Tue, Sep 17, 2019 at 09:05:15AM +0000, Aleksei Nikiforov wrote: >>>>>> Update of /people/darktemplar/packages/apt.git >>>>>> 0.5.15lorg2-alt74 >>>>>> - Added debugging output for allocation functions. >>>>>> - Fixed dynamic memory allocation pointer arithmetics issue. >>>>> Жаль, что вы не дождались первого апреля, но всё равно спасибо, >>>>> шутка получилась отличная. >>>> В смысле про fixed? >>> Именно. >>> >>> Этот патч увеличивает расход оперативной памяти apt'ом в среднем в полтора >>> раза, но не исправляет UB с арифметикой указателей, поскольку MMap::Base >>> как был невыровненным, так и остался невыровненным. В отличие от Debian, >>> между прочим, где по умолчанию MMap::Base выровнен на начало страницы. >>> Спасибо, тоже поржал над этим анализом кода. Да, патч увеличивает расход памяти. В полтора раза звучит страшно, и не соответствует действительности. Прошу UB продемонстрировать. Все практические тесты демонстрируют исправление данной проблемы с указателями. Код из Debian смотрел, возможно, я что-то пропустил, но где там разница между их реализацией MMap::Base и моей, которая исправляла бы данную проблему? Было бы замечательно, если бы это исправление из Debian было продемонстрировано на e2k с apt из ALT. >> Я не вижу разницы в адресе MMap::Base на Debian и у нас - в обоих >> случаях он выровнен на начало страницы. > > У Алексея: > > void *tmp_base = realloc(Base, newSize); > > if (debug_grow) > _error->Warning(_("DynamicMMap::Grow: realloc from %llu to %llu, result: %s"), WorkSpace, newSize, (tmp_base == n > > if (tmp_base == NULL) > return false; > > Base = tmp_base; > > В Debian по умолчанию: > > #ifdef MREMAP_MAYMOVE > > if ((Flags & Moveable) == Moveable) > Base = mremap(Base, WorkSpace, newSize, MREMAP_MAYMOVE); > else > #endif > Base = mremap(Base, WorkSpace, newSize, 0); > > if(Base == MAP_FAILED) > return false; > > Всё ещё не видно разницы? > Предлагаю посмотреть внимательнее. Вот мой код: if (Fd != 0) { void *tmp_base = MAP_FAILED; #ifdef MREMAP_MAYMOVE if ((this->Flags & Moveable) == Moveable) tmp_base = mremap(Base, WorkSpace, newSize, MREMAP_MAYMOVE); else #endif tmp_base = mremap(Base, WorkSpace, newSize, 0); if (debug_grow) _error->Warning(_("DynamicMMap::Grow: mremap from %llu to %llu, result: %s"), WorkSpace, newSize, (tmp_base == MAP_FAILED) ? _("Fail") : _("Success")); if (tmp_base == MAP_FAILED) return false; Base = tmp_base; } else { if ((this->Flags & Moveable) != Moveable) return false; void *tmp_base = realloc(Base, newSize); if (debug_grow) _error->Warning(_("DynamicMMap::Grow: realloc from %llu to %llu, result: %s"), WorkSpace, newSize, (tmp_base == nullptr) ? _("Fail") : _("Success")); if (tmp_base == NULL) return false; Base = tmp_base; /* Set new memory to 0 */ memset((char*)Base + WorkSpace, 0, newSize - WorkSpace); } А вот код из Debian: if ((Flags & Fallback) != Fallback) { #if defined(_POSIX_MAPPED_FILES) && defined(__linux__) #ifdef MREMAP_MAYMOVE if ((Flags & Moveable) == Moveable) Base = mremap(Base, WorkSpace, newSize, MREMAP_MAYMOVE); else #endif Base = mremap(Base, WorkSpace, newSize, 0); if(Base == MAP_FAILED) return false; #else return false; #endif } else { if ((Flags & Moveable) != Moveable) return false; Base = realloc(Base, newSize); if (Base == NULL) return false; else /* Set new memory to 0 */ memset((char*)Base + WorkSpace, 0, newSize - WorkSpace); } ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74 2019-10-24 13:59 ` Aleksei Nikiforov @ 2019-10-24 15:10 ` Andrey Savchenko 2019-10-24 15:29 ` Aleksei Nikiforov 0 siblings, 1 reply; 20+ messages in thread From: Andrey Savchenko @ 2019-10-24 15:10 UTC (permalink / raw) To: ALT Linux Team development discussions [-- Attachment #1: Type: text/plain, Size: 6272 bytes --] On Thu, 24 Oct 2019 16:59:13 +0300 Aleksei Nikiforov wrote: > 22.10.2019 18:32, Dmitry V. Levin пишет: > > On Tue, Oct 22, 2019 at 03:28:40PM +0300, Anton Farygin wrote: > >> On 22.10.2019 11:32, Dmitry V. Levin wrote: > >>> On Tue, Oct 22, 2019 at 03:01:16AM +0300, Michael Shigorin wrote: > >>>> On Tue, Oct 22, 2019 at 02:42:06AM +0300, Dmitry V. Levin wrote: > >>>>> On Tue, Sep 17, 2019 at 09:05:15AM +0000, Aleksei Nikiforov wrote: > >>>>>> Update of /people/darktemplar/packages/apt.git > >>>>>> 0.5.15lorg2-alt74 > >>>>>> - Added debugging output for allocation functions. > >>>>>> - Fixed dynamic memory allocation pointer arithmetics issue. > >>>>> Жаль, что вы не дождались первого апреля, но всё равно спасибо, > >>>>> шутка получилась отличная. > >>>> В смысле про fixed? > >>> Именно. > >>> > >>> Этот патч увеличивает расход оперативной памяти apt'ом в среднем в полтора > >>> раза, но не исправляет UB с арифметикой указателей, поскольку MMap::Base > >>> как был невыровненным, так и остался невыровненным. В отличие от Debian, > >>> между прочим, где по умолчанию MMap::Base выровнен на начало страницы. > >>> > > Спасибо, тоже поржал над этим анализом кода. > > Да, патч увеличивает расход памяти. В полтора раза звучит страшно, и не > соответствует действительности. Прошу UB продемонстрировать. UB не обязательно демонстрировать. Если по стандарту языка происходит UB, то это не значит, что оно будет происходить в конкретной реализации, но это значит, что оно может произойти где и когда угодно: другой компилятор, другая версия, другая фаза луны. Тот факт, что из-за сложения ошибок произошла корректная работа не означает, что ошибок нет. > Все > практические тесты демонстрируют исправление данной проблемы с > указателями. Код из Debian смотрел, возможно, я что-то пропустил, но где > там разница между их реализацией MMap::Base и моей, которая исправляла > бы данную проблему? Было бы замечательно, если бы это исправление из > Debian было продемонстрировано на e2k с apt из ALT. > > >> Я не вижу разницы в адресе MMap::Base на Debian и у нас - в обоих > >> случаях он выровнен на начало страницы. > > > > У Алексея: > > > > void *tmp_base = realloc(Base, newSize); > > > > if (debug_grow) > > _error->Warning(_("DynamicMMap::Grow: realloc from %llu to %llu, result: %s"), WorkSpace, newSize, (tmp_base == n > > > > if (tmp_base == NULL) > > return false; > > > > Base = tmp_base; > > > > В Debian по умолчанию: > > > > #ifdef MREMAP_MAYMOVE > > > > if ((Flags & Moveable) == Moveable) > > Base = mremap(Base, WorkSpace, newSize, MREMAP_MAYMOVE); > > else > > #endif > > Base = mremap(Base, WorkSpace, newSize, 0); > > > > if(Base == MAP_FAILED) > > return false; > > > > Всё ещё не видно разницы? > > > > Предлагаю посмотреть внимательнее. Вот мой код: > > if (Fd != 0) > { > void *tmp_base = MAP_FAILED; > #ifdef MREMAP_MAYMOVE > if ((this->Flags & Moveable) == Moveable) > tmp_base = mremap(Base, WorkSpace, newSize, MREMAP_MAYMOVE); > else > #endif > tmp_base = mremap(Base, WorkSpace, newSize, 0); > > if (debug_grow) > _error->Warning(_("DynamicMMap::Grow: mremap from %llu to > %llu, result: %s"), WorkSpace, newSize, (tmp_base == MAP_FAILED) ? > _("Fail") : _("Success")); > > if (tmp_base == MAP_FAILED) > return false; > > Base = tmp_base; > } else { > if ((this->Flags & Moveable) != Moveable) > return false; > > void *tmp_base = realloc(Base, newSize); > > if (debug_grow) > _error->Warning(_("DynamicMMap::Grow: realloc from %llu to > %llu, result: %s"), WorkSpace, newSize, (tmp_base == nullptr) ? > _("Fail") : _("Success")); > > if (tmp_base == NULL) > return false; > > Base = tmp_base; > > /* Set new memory to 0 */ > memset((char*)Base + WorkSpace, 0, newSize - WorkSpace); > } > > > А вот код из Debian: > > if ((Flags & Fallback) != Fallback) { > #if defined(_POSIX_MAPPED_FILES) && defined(__linux__) > #ifdef MREMAP_MAYMOVE > > if ((Flags & Moveable) == Moveable) > Base = mremap(Base, WorkSpace, newSize, MREMAP_MAYMOVE); > else > #endif > Base = mremap(Base, WorkSpace, newSize, 0); > > if(Base == MAP_FAILED) > return false; > #else > return false; > #endif > } else { > if ((Flags & Moveable) != Moveable) > return false; > > Base = realloc(Base, newSize); > if (Base == NULL) > return false; > else > /* Set new memory to 0 */ > memset((char*)Base + WorkSpace, 0, newSize - WorkSpace); > } > _______________________________________________ > Devel mailing list > Devel@lists.altlinux.org > https://lists.altlinux.org/mailman/listinfo/devel Best regards, Andrew Savchenko [-- Attachment #2: Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74 2019-10-24 15:10 ` Andrey Savchenko @ 2019-10-24 15:29 ` Aleksei Nikiforov 2019-10-24 15:50 ` Andrey Savchenko 0 siblings, 1 reply; 20+ messages in thread From: Aleksei Nikiforov @ 2019-10-24 15:29 UTC (permalink / raw) To: devel 24.10.2019 18:10, Andrey Savchenko пишет: > UB не обязательно демонстрировать. Если по стандарту языка > происходит UB, то это не значит, что оно будет происходить > в конкретной реализации, но это значит, что оно может произойти где > и когда угодно: другой компилятор, другая версия, другая фаза луны. > > Тот факт, что из-за сложения ошибок произошла корректная работа не > означает, что ошибок нет. Да, но в таком случае как минимум можно указать на конкретный проблемный участок кода, который содержит UB, и в чём это UB заключается. Как и ошибки, которые складываются. ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74 2019-10-24 15:29 ` Aleksei Nikiforov @ 2019-10-24 15:50 ` Andrey Savchenko 2019-10-24 16:01 ` Aleksei Nikiforov 0 siblings, 1 reply; 20+ messages in thread From: Andrey Savchenko @ 2019-10-24 15:50 UTC (permalink / raw) To: ALT Linux Team development discussions [-- Attachment #1: Type: text/plain, Size: 1190 bytes --] On Thu, 24 Oct 2019 18:29:36 +0300 Aleksei Nikiforov wrote: > 24.10.2019 18:10, Andrey Savchenko пишет: > > UB не обязательно демонстрировать. Если по стандарту языка > > происходит UB, то это не значит, что оно будет происходить > > в конкретной реализации, но это значит, что оно может произойти где > > и когда угодно: другой компилятор, другая версия, другая фаза луны. > > > > Тот факт, что из-за сложения ошибок произошла корректная работа не > > означает, что ошибок нет. > > Да, но в таком случае как минимум можно указать на конкретный проблемный > участок кода, который содержит UB, и в чём это UB заключается. Как и > ошибки, которые складываются. Так ldv это и сделал в письме выше. Best regards, Andrew Savchenko [-- Attachment #2: Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74 2019-10-24 15:50 ` Andrey Savchenko @ 2019-10-24 16:01 ` Aleksei Nikiforov 2019-10-24 16:54 ` Andrey Savchenko 0 siblings, 1 reply; 20+ messages in thread From: Aleksei Nikiforov @ 2019-10-24 16:01 UTC (permalink / raw) To: devel 24.10.2019 18:50, Andrey Savchenko пишет: >> Да, но в таком случае как минимум можно указать на конкретный проблемный >> участок кода, который содержит UB, и в чём это UB заключается. Как и >> ошибки, которые складываются. > > Так ldv это и сделал в письме выше. > Я, наверно, в этом потоке сообщений где-то это пропустил. Как минимум ничего кроме общих слов не видел. Можешь повторить этот фрагмент, пожалуйста? ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74 2019-10-24 16:01 ` Aleksei Nikiforov @ 2019-10-24 16:54 ` Andrey Savchenko 2019-10-25 7:23 ` Aleksei Nikiforov 0 siblings, 1 reply; 20+ messages in thread From: Andrey Savchenko @ 2019-10-24 16:54 UTC (permalink / raw) To: ALT Linux Team development discussions [-- Attachment #1: Type: text/plain, Size: 2337 bytes --] On Thu, 24 Oct 2019 19:01:11 +0300 Aleksei Nikiforov wrote: > 24.10.2019 18:50, Andrey Savchenko пишет: > >> Да, но в таком случае как минимум можно указать на конкретный проблемный > >> участок кода, который содержит UB, и в чём это UB заключается. Как и > >> ошибки, которые складываются. > > > > Так ldv это и сделал в письме выше. > > > > Я, наверно, в этом потоке сообщений где-то это пропустил. Как минимум > ничего кроме общих слов не видел. Можешь повторить этот фрагмент, > пожалуйста? https://lists.altlinux.org/pipermail/devel/2019-October/208756.html > > Этот патч увеличивает расход оперативной памяти apt'ом в среднем в полтора > > раза, но не исправляет UB с арифметикой указателей, поскольку MMap::Base > > как был невыровненным, так и остался невыровненным. В отличие от Debian, > > между прочим, где по умолчанию MMap::Base выровнен на начало страницы. > > > Я не вижу разницы в адресе MMap::Base на Debian и у нас - в обоих > случаях он выровнен на начало страницы. У Алексея: void *tmp_base = realloc(Base, newSize); if (debug_grow) _error->Warning(_("DynamicMMap::Grow: realloc from %llu to %llu, result: %s"), WorkSpace, newSize, (tmp_base == n if (tmp_base == NULL) return false; Base = tmp_base; В Debian по умолчанию: #ifdef MREMAP_MAYMOVE if ((Flags & Moveable) == Moveable) Base = mremap(Base, WorkSpace, newSize, MREMAP_MAYMOVE); else #endif Base = mremap(Base, WorkSpace, newSize, 0); if(Base == MAP_FAILED) return false; Всё ещё не видно разницы? Best regards, Andrew Savchenko [-- Attachment #2: Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74 2019-10-24 16:54 ` Andrey Savchenko @ 2019-10-25 7:23 ` Aleksei Nikiforov 0 siblings, 0 replies; 20+ messages in thread From: Aleksei Nikiforov @ 2019-10-25 7:23 UTC (permalink / raw) To: devel 24.10.2019 19:54, Andrey Savchenko пишет: > On Thu, 24 Oct 2019 19:01:11 +0300 Aleksei Nikiforov wrote: >> 24.10.2019 18:50, Andrey Savchenko пишет: >>>> Да, но в таком случае как минимум можно указать на конкретный проблемный >>>> участок кода, который содержит UB, и в чём это UB заключается. Как и >>>> ошибки, которые складываются. >>> >>> Так ldv это и сделал в письме выше. >>> >> >> Я, наверно, в этом потоке сообщений где-то это пропустил. Как минимум >> ничего кроме общих слов не видел. Можешь повторить этот фрагмент, >> пожалуйста? > > https://lists.altlinux.org/pipermail/devel/2019-October/208756.html > >>> Этот патч увеличивает расход оперативной памяти apt'ом в среднем в полтора >>> раза, но не исправляет UB с арифметикой указателей, поскольку MMap::Base >>> как был невыровненным, так и остался невыровненным. В отличие от Debian, >>> между прочим, где по умолчанию MMap::Base выровнен на начало страницы. >>> >> Я не вижу разницы в адресе MMap::Base на Debian и у нас - в обоих >> случаях он выровнен на начало страницы. > > У Алексея: > > void *tmp_base = realloc(Base, newSize); > > if (debug_grow) > _error->Warning(_("DynamicMMap::Grow: realloc from %llu to > %llu, result: %s"), WorkSpace, newSize, (tmp_base == n > > if (tmp_base == NULL) > return false; > > Base = tmp_base; > > В Debian по умолчанию: > > #ifdef MREMAP_MAYMOVE > > if ((Flags & Moveable) == Moveable) > Base = mremap(Base, WorkSpace, newSize, > MREMAP_MAYMOVE); else > #endif > Base = mremap(Base, WorkSpace, newSize, 0); > > if(Base == MAP_FAILED) > return false; > > Всё ещё не видно разницы? > Как раз тот случай, когда был написан бред. https://lists.altlinux.org/pipermail/devel/2019-October/208777.html Далее цитирую: Предлагаю посмотреть внимательнее. Вот мой код: if (Fd != 0) { void *tmp_base = MAP_FAILED; #ifdef MREMAP_MAYMOVE if ((this->Flags & Moveable) == Moveable) tmp_base = mremap(Base, WorkSpace, newSize, MREMAP_MAYMOVE); else #endif tmp_base = mremap(Base, WorkSpace, newSize, 0); if (debug_grow) _error->Warning(_("DynamicMMap::Grow: mremap from %llu to %llu, result: %s"), WorkSpace, newSize, (tmp_base == MAP_FAILED) ? _("Fail") : _("Success")); if (tmp_base == MAP_FAILED) return false; Base = tmp_base; } else { if ((this->Flags & Moveable) != Moveable) return false; void *tmp_base = realloc(Base, newSize); if (debug_grow) _error->Warning(_("DynamicMMap::Grow: realloc from %llu to %llu, result: %s"), WorkSpace, newSize, (tmp_base == nullptr) ? _("Fail") : _("Success")); if (tmp_base == NULL) return false; Base = tmp_base; /* Set new memory to 0 */ memset((char*)Base + WorkSpace, 0, newSize - WorkSpace); } А вот код из Debian: if ((Flags & Fallback) != Fallback) { #if defined(_POSIX_MAPPED_FILES) && defined(__linux__) #ifdef MREMAP_MAYMOVE if ((Flags & Moveable) == Moveable) Base = mremap(Base, WorkSpace, newSize, MREMAP_MAYMOVE); else #endif Base = mremap(Base, WorkSpace, newSize, 0); if(Base == MAP_FAILED) return false; #else return false; #endif } else { if ((Flags & Moveable) != Moveable) return false; Base = realloc(Base, newSize); if (Base == NULL) return false; else /* Set new memory to 0 */ memset((char*)Base + WorkSpace, 0, newSize - WorkSpace); } Конец цитаты. Если думаешь что код работает не аналогично, предлагаю ещё тебе самостоятельно продебажить apt и убедиться в том, как ты не прав. Дополнительно процитирую Ивана: https://lists.altlinux.org/pipermail/devel/2019-October/208759.html Цитирую: Проблема с попорченными адресами на e2k проявлялась одинаково и при использовании mremap, и при realloc. Конец цитаты. ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74 2019-10-21 23:42 ` [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74 Dmitry V. Levin 2019-10-22 0:01 ` Michael Shigorin @ 2019-10-22 4:06 ` Anton Farygin 2019-10-22 15:35 ` Alexey Tourbin 2019-10-24 15:20 ` Ivan Zakharyaschev 2 siblings, 1 reply; 20+ messages in thread From: Anton Farygin @ 2019-10-22 4:06 UTC (permalink / raw) To: devel On 22.10.2019 2:42, Dmitry V. Levin wrote: > On Tue, Sep 17, 2019 at 09:05:15AM +0000, Aleksei Nikiforov wrote: <skip> >> --- /dev/null >> +++ b/apt/apt-pkg/utils.h >> @@ -0,0 +1,17 @@ >> +#ifndef APT_EXTRA_UTILS_H >> +#define APT_EXTRA_UTILS_H >> + >> +#include <stddef.h> >> + >> +template <size_t N> >> +constexpr size_t get_minimal_power_of_2_helper(size_t size) >> +{ >> + return (size <= N) ? N : get_minimal_power_of_2_helper<N*2>(size); >> +} >> + >> +constexpr size_t get_minimal_power_of_2(size_t size) >> +{ >> + return get_minimal_power_of_2_helper<1>(size); >> +} >> + >> +#endif /* APT_EXTRA_UTILS_H */ > Жаль, что вы не дождались первого апреля, но всё равно спасибо, > шутка получилась отличная. > Ты серьёзно не понял зачем это было сделано ? Да уж, шутка года. ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74 2019-10-22 4:06 ` Anton Farygin @ 2019-10-22 15:35 ` Alexey Tourbin 2019-10-23 12:46 ` Dmitry V. Levin 2019-10-24 13:58 ` Aleksei Nikiforov 0 siblings, 2 replies; 20+ messages in thread From: Alexey Tourbin @ 2019-10-22 15:35 UTC (permalink / raw) To: ALT Linux Team development discussions On Tue, Oct 22, 2019 at 7:06 AM Anton Farygin <rider@basealt.ru> wrote: > On 22.10.2019 2:42, Dmitry V. Levin wrote: > > Жаль, что вы не дождались первого апреля, но всё равно спасибо, > > шутка получилась отличная. > > > Ты серьёзно не понял зачем это было сделано ? Зачем выравнивать структуру исходя из ее общего размера, а не требований к выравниванию членов? ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74 2019-10-22 15:35 ` Alexey Tourbin @ 2019-10-23 12:46 ` Dmitry V. Levin 2019-10-24 13:58 ` Aleksei Nikiforov 1 sibling, 0 replies; 20+ messages in thread From: Dmitry V. Levin @ 2019-10-23 12:46 UTC (permalink / raw) To: ALT Devel discussion list [-- Attachment #1: Type: text/plain, Size: 595 bytes --] On Tue, Oct 22, 2019 at 06:35:48PM +0300, Alexey Tourbin wrote: [...] > Зачем выравнивать структуру исходя из ее общего размера, а не > требований к выравниванию членов? Все структуры, память для которых резервируется с помощью pkgCacheGenerator::AllocateInMap, apt с незапамятных времён выравнивает не на размер выравнивания этой структуры (как принято везде), а на размер самой структуры, и, что хуже, полагается на такое выравнивание (см. напр. DynamicMMap::Allocate). Из-за этого особенного поведения в apt проблем с памятью ещё больше, чем должно было бы быть. -- ldv [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 801 bytes --] ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74 2019-10-22 15:35 ` Alexey Tourbin 2019-10-23 12:46 ` Dmitry V. Levin @ 2019-10-24 13:58 ` Aleksei Nikiforov 1 sibling, 0 replies; 20+ messages in thread From: Aleksei Nikiforov @ 2019-10-24 13:58 UTC (permalink / raw) To: devel 22.10.2019 18:35, Alexey Tourbin пишет: > On Tue, Oct 22, 2019 at 7:06 AM Anton Farygin <rider@basealt.ru> wrote: >> On 22.10.2019 2:42, Dmitry V. Levin wrote: >>> Жаль, что вы не дождались первого апреля, но всё равно спасибо, >>> шутка получилась отличная. >>> >> Ты серьёзно не понял зачем это было сделано ? > > Зачем выравнивать структуру исходя из ее общего размера, а не > требований к выравниванию членов? Потому что эта структура лежит где-то в *(MMap::Base), т.е. является по сути членом ещё большей структуры. И работа с такой структурой, если она не является выравненной, вызывает проблемы на e2k при изменении адреса MMap::Base, поскольку при этом пересчитываются многие адреса, в том числе адреса таких структур. ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74 2019-10-21 23:42 ` [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74 Dmitry V. Levin 2019-10-22 0:01 ` Michael Shigorin 2019-10-22 4:06 ` Anton Farygin @ 2019-10-24 15:20 ` Ivan Zakharyaschev 2 siblings, 0 replies; 20+ messages in thread From: Ivan Zakharyaschev @ 2019-10-24 15:20 UTC (permalink / raw) To: ALT Linux Team development discussions [-- Attachment #1: Type: text/plain, Size: 966 bytes --] Hello! Прежде чем выпускать окончательное исправление для проблемы с попрченной памятью в apt на e2k, собираюсь переписать неразумную арифметику указателей, а именно вычитания указателей, которые до этого были насильно приведены к типу указателя на структуру -- а разность этих произвольных адресов-то не гарантированно кратна размеру структуры, т.е. из этого соображения результат такой операции просто невозможно определить (не говоря о том, что стандарт более жёсток в отношении таких выражений: разность определена между элементами одного массива). Есть разные мнения о том, что происходит при приведении указателя к типу указателя на структуру, если исходный адрес не выровнен так же, как должна быть структуры; это тоже может быть проблемой. Запостил свои заметки, сложившиеся при взгляде на эту проблему, в https://bugzilla.altlinux.org/show_bug.cgi?id=37373 . Предлагаемые мной изменения арифметики я тоже скоро запощу. -- Best regards, Ivan ^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2019-10-25 7:23 UTC | newest] Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2019-10-21 23:42 ` [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74 Dmitry V. Levin 2019-10-22 0:01 ` Michael Shigorin 2019-10-22 8:32 ` Dmitry V. Levin 2019-10-22 12:28 ` Anton Farygin 2019-10-22 12:46 ` Anton Farygin 2019-10-22 15:32 ` Dmitry V. Levin 2019-10-22 15:51 ` Anton Farygin 2019-10-22 16:52 ` Ivan Zakharyaschev 2019-10-24 13:59 ` Aleksei Nikiforov 2019-10-24 15:10 ` Andrey Savchenko 2019-10-24 15:29 ` Aleksei Nikiforov 2019-10-24 15:50 ` Andrey Savchenko 2019-10-24 16:01 ` Aleksei Nikiforov 2019-10-24 16:54 ` Andrey Savchenko 2019-10-25 7:23 ` Aleksei Nikiforov 2019-10-22 4:06 ` Anton Farygin 2019-10-22 15:35 ` Alexey Tourbin 2019-10-23 12:46 ` Dmitry V. Levin 2019-10-24 13:58 ` Aleksei Nikiforov 2019-10-24 15:20 ` Ivan Zakharyaschev
ALT Linux Team development discussions This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \ devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru public-inbox-index devel Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.devel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git