All streams
Search
Write a publication
Pull to refresh
195
0
Михаил @mikhanoid

ИММ УрО РАН

Send message
Тестировали две, которые считаются (считались?) самыми производительными: JRockit 5.0 R27 и IBM J2SE 2.0 SR4, ядро 2.6.17.

Софт у нас на разных языках. Кое что переписываем на ассемблер, если видно, как оптимизировать можно.

В UNIX есть понятие - группа процессов, почему по её номеру нельзя ориентироваться? Или на крайний случай просто по uid.

А что есть тип соединения с корневой системой? Я пока глупый в openvz и мне пальцем надо показывать. Если имеется в виду то, как к сети доступ выдан, так при помощи такой штуки:

vzctl set 101 --netdev_add bond0 --save

Взял из OpenVZ-Users-Guide.pdf.
Мы не используем java по одной очень простой причине, тестовые программы, написанные на ней (преобразования Фурье, умножения матриц, расчёт систем из большого количества тел) работают раз в 10 медленней, чем программы на С, откомпилированные gcc. А если брать коммерческие компиляторы от intel или pgi, то во все 20 раз. А теперь представьте, что средняя программа у нас оптимизированная и вылизанная, в том числе и по доступам в линии кэша, да ещё и с переписанными на ассемблере некоторыми функциями, чтобы хорошо использовать SSE2, грызёт данные около 60 часов подряд. Вы предлагаете вместо 3 суток тратить 30 на ожидание результата?

Так что это не вариант, несмотря на все достоинства решения. Если мне не верите или считаете, что мы - существа криворукие и плоскоголовые, к программированию на java не приспособленные, можете сами тесты погонять, благо математических библиотек, написанных на java в internet много.

Мне нужен простой механизм: ограничить группу процессов по памяти. Я не понимаю, какие проблемы завести счётчик физически использованных страниц для пользователя ли, для группы ли - не суть важно, и если счётчик переваливает определённый предел, убивать именно эту группу процессов или выкидывать из системы именно этого пользователя.

Зачем для этого обязательно нужен сложный openvz, которй, кстати, только что убил 80% производительности тесту LAPACK. Почему в VPS'ах так жутко падает скорость передачи данных? Вместо 1.5 гигабита в секунду на бондинге получаю .7 гигабита плюс дикую загрузку процессора в 50%. Что надо исправить в настройках?
Такая матрица и так в память не помещается. Так что прийдется вам ее разбивать, на части для обработки. К тому же сжатие и распараллеливание еще никто не отменял.


Ну так и параллелят. Но нужно стараться сделать куски как можно большими, потому что так меньше накладных расходов на пересылку данных. При этом с подбором подходящего размера проблемы - не только, ведь, матрицы в программе фигурируют, есть ещё другие переменные, которые тоже память занимают. А чтобы подбирать оптимальный размер, нужен механизм, который скажет: нет уважамый, столько памяти мы тебе уже не выделим.

Но при этом они могут и не использовать методы оптимизации которые для программиста лежат на поверхности. IMHO для написания подобных программ желательно иметь двух человек программиста и собственно исследователя.


Угу. Это вы скажите начальникам из правительства РФ, которые всё увеличивают и увеличивают финансирование исследований : ) Из последних сил увеличивают, взмокли уже все и раскраснелись, штаны у них бедненьких и пиджаки по швам трещат, а увеличить никак не могут.

Но с другой стороны, если Linux не позволяет эффективно разобраться пользователю с этой проблемой. И если для этого нужны дополнительные программисты, администраторы, финансирование, то возникает вопрос к эффективности самого Linux. Тем более, если это всё можно решить простыми методами в ядре, без привлечения к ответу правительства РФ?
Отдельная платформа.
Хм. Если у них одна матрица занимает 120Gb (она не разреженная, она просто такая вот), какие численные методы позволят сэкономить память? Что делать, если нужно расчёты проводить на достаточно мелких сетках, чтобы все особенности процессов учесть? Или что делать, когда нужно вэйвлет преобразование сделать для картинки размером в 64Gb?

Они, конечно, оптимизируют, выдумывают новые методы, защищают на этом кандидатские и докторские и сами пишут книги по 'численным методам'.
В качестве базиса ничего. Лицензия похожая на BSD. Страницы нет, но в скором времени должна появиться здесь http://vi.imm.uran.ru. Кроме того, некоторые идеи реализуются в рамках вот этого http://www.botik.ru/PSI/RCMS/activity/pu…
Тык. Будто неизвестно нам про неё : ) Конечно, прогоняется всё через неё и через electricfence и free/malloc используются в отладочном режиме. Кроме того, в вычислительных приложениях, обычно, память выделяется редко, просто её выделяется ОЧЕНЬ много, меньше выделять просто нельзя, потому что данных тоже ОЧЕНЬ много. В этом проблема.

Java использовать никакого смысла нет. Ведь, всё это делается в погоне за скоростью вычислений, Java же на расчётных задачах весьма неспешно работает http://shootout.alioth.debian.org/, а ускорителей у нас для неё нет.
Угу, верно. А я правильно понимаю, что если я напишу что-то вроде

cat file | vzctl exec ID /somepath/somebin some args &

То, вывод cat будет передан на stdin программы, которая будет запущена в VE, а в $! будет pid процесса, под которым он будет виден в VE0?

Если так, то хорошо. Остаётся только проверить, насколько хорошо это всё с myrinet дружит.
Ну. Через два года будет резултат, но разрабатывается и обсуждается всё уже третий год. Хочется действительно удобную и эффективную вещь сделать. Разработкой занимается несколько человек из нескольких ВУЗ'ов и институтов РАН. Обкаткой и тестированием - все желающие, open source - это хорошо. За флаг спасибо, торжественно клянёмся оправдать доверие : )
C, C++, FORTRAN, Pascal, плюс различные скрипты. Для распараллеливания используется OpenMP и MPI. Как этой информацией можно воспользоваться?
А как ограничить? Вот есть у меня эти 8 гигабайт на узел оперативной памяти. Что мне делать? Разрешить запускать два процесса, но ограничить их 4 гигабайтами памяти? Так а что тогда делать программам, которые запускают по одному процессу на узле? Разрешить запуск только одного, и разрешить доступ к 8 гигабайтам? Но что делать, если пользователь хочет запусть 2, а потом ещё интерактивно поработать с данными, которые у него накапливаются в процессе расчётов? Разделить пользователя на два аккаунта: один с одним большим процессом, а другой с кучей маленьких? Так иногда запускается несколько больших вычислительных, если задача использует несколько процессоров и общую память.

Какой профиль Вы посоветуете, как гуру?
Торжественно обещаю: как только пойду в администраторы серверов, сразу же сообщу вам об этом : )
По поводу исправления ПО. Хм... 1. Это не моё ПО, это ПО наших пользователей - математиков, физиков, химиков, биологов. 2. Нормальная отладка невозможна из-за описываемой ситуации. Потому что ядро не выбрасывает процесс, который вызвал переполнение памяти, а выбрасывает произвольный процесс. И фиг тут поймёшь, по какой причине всё произошло. Нам самим порой сложно понять, что произошло и в какой момент, ну а физику, который не должен быть продвинутым системным программистом, потому что у него есть более интересные занятия, вообще в этом не разобраться.
А толку изучать документацию, если нет необходимой функциональности? Кроме того, я не говорю, о том, что некто мне должен нечто. Я просто описываю проблему и удивляюсь тому, что она до сих пор имеет место быть, потому что решить её очень просто.

Вы неверно расставляете акценты в моих постах. Я же не говорю, что linux - плохая система. Но в нём, в самом деле есть, что исправлять. Если linux'оиды не хотят прислушиваться - это не мои проблемы, потому что мы года через два выкатим своё ядро системы для суперкомпьютеров со всеми нужными функциями. Именно поэтому, я ничего ни от кого не требую. Если честно, мне даже выгодно, чтобы недостатки оставались : ) Можно будет тыкать потом в них пальцем на защите и говорить: смотрите, у них технические недостатки, а у нас таких нет.
Эксперимент - лучший способ познания жизни. Не знаю, какой дистрибутив у Вас, а у меня на gentoo linux, с ядром уже указанной версии, и на redhat linux, с ядром 2.6.17, эти установки меняют ulimit'ы, которые работают для каждого процесса по отдельности. Можно запустить 100 процессов, каждый из которых выделяет по гигабайту памяти, при всех указанных ограничениях, установленных на 2 гигабайта. При этом, 4 гигабайта, например, выделить не получается.

При записи 0 в выделенную память, вылетают произвольные процессы. Включение overcommit ситуацию спасает, но опять же, можно запустить 20 процессов (в системе 8 гигабайт RAM и 16 файла подкачки), каждый из которых выделит по гигабайту памяти.

Что я делаю не так?
Может быть, на новую машину поставим. Но там возникают вопросы о поддержке сетевых контроллеров и о возможности устраивать bonding.
Но вообще, отчаянным и крутым Linux'оидам надо задуматься вот над чем. Есть у меня Linux - многопользовательсякая и многозадачная операционная система, но при этом задачи как-то не очень уж и защищены друг от друга, пользователи тоже могут устраивать друг другу гадости, пользуясь, хотя бы этим же bug'ом в работе механизма виртуальной памяти. При этом, проблеме не первый десяток лет, однако, она так и не была нормально решена. При этом, даже если openvz поможет с этим справиться (в чём я сильно сомневаюсь, потому что вряд ли сигналы из организованных VEi, где i > 0, можно будет отправлять в VE0, и можно будет протянуть AF_UNIX socket из одного VE в другое), но даже если поможет, то почему мне нужно дополнительное программное обеспечение, которое на порядок (если смотреть на размер исходников) увеличивает сложность ядра? Почему ядро многопользовательской и многозадачной операционной системы Linux не предоставляет эти возможности, реализовать которые не должно быть так уж и сложно?

Ну. Мне на это отвечают: не нравится, не кушай, покупай другое ПО. Ну, хорошо. Но почему бы не прислушаться к тому, что у пользователей вызывает проблемы, и не исправить ситуацию? Какие с этим сложности у разработчиков ядра? Это же не личное им оскорбление, а просто указание на ошибку.

Я понимаю, конечно, что мне сейчас скажут: если надо, исправляй сам. Но я в ответ спрошу, а вы пробовали сами хоть что-нибудь исправить в Linux? Никакой же документации по структуре ядра нет, а чтобы разобраться в исходниках и понять, как всё работает нужен, такое ощущение, не один год. Получается, community устроено так: либо ты linux'оид по жизни, и ничем другим заниматься уже не в праве и не в состоянии, либо ты не linux'оид и тебя никто слушать не будет, а будут показывать пальцем и говорить фууу, даже если ты предлагаешь дельные вещи. Хм... Эта нетерпимость несколько раздражает. И, с небезосновательной претензией на истину можно сказать, что мешает продвижению системы в массы.
В этом мире есть гораздо более интересные тексты для чтения, чем доки : ). Взять хотя бы прекрасный труд Ильи Пригожина 'Время, Хаос, Квант'. Всё никак не могу засесть за него : (
мы используем redhat linux. Никакого ощутимиго эффекта от этого не чувствуется. Они же не для вычислительных задач настраивают дистрибутивы, а для серверов, баз данных, хранилищ. А у этого всего сценарии работы сильно отличаются от того, с чем нам приходится иметь дело.
Ну а где именно тут параметр: максимальный объём памяти для процессов пользователя?

A - это размер адресного пространства. для каждого процесса.
D - это размер сегмента данных, который при загрузке бинарника формируется для каждого процесса.
M - это залоченные в памяти страницы
S - размер стека

Чем именно мне воспользоваться?

Information

Rating
Does not participate
Registered
Activity

Specialization

System Software Engineer, scientific programming
Scheme
C
Assembler
Linux
Maths
Julia
Compilers
Math modeling
Machine learning
Computer Science