Один из тестов zstd проверяет распаковку в 999 потоков. Учитывая, что ulimit -s на mipsel по умолчанию равен 8192, столько потоков никак не помещаются в скромное адресное пространство одного процесса (на mipsel это 2GiB на userspace). Для прохождения тестов достаточно уменьшить ulimit -s, например так: http://git.altlinux.org/people/iv/packages/zstd.git?p=zstd.git;a=commitdiff;h=1e945d5d64e86bd52830039a7f0f4b371bbf34d4 В таком виде %check проходит успешно и пакет собирается в sisyphus_mipsel. Прошу включить такое или аналогичное изменение в следующую сборку zstd.
Интересно, а почему на x86 помещается, там ведь тоже есть это 32-битное ограничение на размер адресного пространства.
(In reply to comment #1) > Интересно, а почему на x86 помещается, там ведь тоже есть это 32-битное > ограничение на размер адресного пространства. А у нас на i586 ulimit -s не меньше? К тому же, на mips* старший бит адреса используется как признак kernel space, так что адресного пространства там в два раза меньше чем на x86* той же разрядности.
(In reply to comment #2) > (In reply to comment #1) > > Интересно, а почему на x86 помещается, там ведь тоже есть это 32-битное > > ограничение на размер адресного пространства. > > А у нас на i586 ulimit -s не меньше? Нет, у нас дефолтный ядерный ulimit -s. Поскольку i586 собирается на x86_64, то и ulimit -s одинаковый.
(In reply to comment #1) > Интересно, а почему на x86 помещается, там ведь тоже есть это 32-битное > ограничение на размер адресного пространства. В честь очередного обновления zstd я решил всё-таки разобраться, что там за магия. Оказалось, что количество потоков в zstd (в частности управляемое через -T<number>) ограничено сверху специальной константой, ZSTDMT_NBWORKERS_MAX. По умолчанию эта константа равна 200, так что на самом деле 999 потоков в тестах не создаётся никогда, в том числе и на x86_64. Получается, что 200 worker'ов в 4 Гб адресного пространства на i586 влезают, а в 2 Гб на mipsel -- нет. Помимо пространства для стека, каждому потоку нужны различные буферы, так что количество возможных worker'ов заметно меньше, чем количество потоков, которые можно успешно создать. В частности, на mipsel на моих тестах в конфигурации по умолчанию можно запустить не больше 79 worker'ов. На всякий случай я снизил ограничение на размер пула потоков до 64х. Так что теперь исправление для mipsel выглядит так: http://git.altlinux.org/people/iv/packages/?p=zstd.git;a=commitdiff;h=baf76935219eaf52cee57700a37cd29722fa42b6 С таким изменением пакет успешно собирается.
А в Debian просто тупо выключили тесты.
Apparently, it was fixed in 1.5.0-alt1 by upstream commit v1.5.0^2~3^2~1: https://github.com/facebook/zstd/commit/cb0cad9b79669185677383d8d7fd502257374fd2