Pull to refresh

Comments 90


Всяко хочу jail в linux.

openvz.org умеет даже больше чем jail.
Если верить man'ам , то настройка памяти ещё не реализована. И настораживают лимиты в 2Gb, оно для 64 битов работает?
Настройка памяти не реализована? А у меня как она ограничивается интересно? Для 64 бит работает. Где вы там про ограничения на 2 гига нашли?
В ядре есть флаг, который запрещает такое выделение памяти.
И вообще, если не нравятся руки Торвальдса и других разработчиков, то покажите им как надо писать. Если не можете, но не нравится, то пользуйтесь платными решениями, которые будут вас устраивать. К чему такие громкие заявления?
В меру своих сил показываем, но знаете ли, ядра ОС писать так, чтобы всё хорошо было - это не пальцем в носу ковыряться, сложно, поэтому показ идёт в темпе медленного танца.
Прошу прощения, если комментарий показался грубым. Просто я правда не понимаю высказываний в стиле «Да разработчиков за такое убивать надо».

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

Эх... Это же ещё догадаться надо, что надо man malloc читать, а не перерывать документацию по ядру. А если её перерывать, то надо искать не слово overflow, а слово overcommit.

Нет, ну, я, конечно, сам дурак в этой ситуации, буду отрывать руки самому себе.
Извините, но если вы хотите, чтоб все работало сразу и без приложения усилий вами, то будьте добры выложите n'ую сумму денег для того чтобы это сделали за вас, именно для этого существуют коммерческие решения. Если же вы взяли открытое ПО, то должны понимать, что потребуются знания и некоторое количество времени иначе же возьмите коммерческое решение.
А вы знаете коммерческие решения, лучше, чем linux поддерживающие работу на кластерах? У Windows с этим гораздо большие проблемы, а AIX или Irix не поставить на наше оборудование. Так что... Буду ругаться.
надо не ругаться, а читать доки. :)
В этом мире есть гораздо более интересные тексты для чтения, чем доки : ). Взять хотя бы прекрасный труд Ильи Пригожина 'Время, Хаос, Квант'. Всё никак не могу засесть за него : (
Тогда, лёжа на диванчике, читайте труд Ильи Пригожина и не занимайтесь администрированием серверов ; )
Торжественно обещаю: как только пойду в администраторы серверов, сразу же сообщу вам об этом : )
Не вижу тогда смысла в вашем замечании
Я и так не занимаюсь администрированием серверов. Так что это в вашем замечении о диванчике нет никакого смысла.
а всякие redhat, novell, etc на что?
мы используем redhat linux. Никакого ощутимиго эффекта от этого не чувствуется. Они же не для вычислительных задач настраивают дистрибутивы, а для серверов, баз данных, хранилищ. А у этого всего сценарии работы сильно отличаются от того, с чем нам приходится иметь дело.
А разве они не должны суппортить в независимости от задачи?
А где у них там есть поддержка кластеров? Меня вот удивляет, что это уже второй человек работающий с кластерами, у которого нет админа для накручивания хвостов кластеру :)
Может быть, на новую машину поставим. Но там возникают вопросы о поддержке сетевых контроллеров и о возможности устраивать bonding.
На сайте Sun есть HCL для x86. Bonding насколько помню поддерживается.
Какой именно флаг? Был бы признателен за указание.
Переменные sysctl посмотрите. Узнаете много нового.
Старая китайская пословица гласит: "Если к тебе пришел человек и просит еды, дай ему удочку"
Выдержка из man malloc:

By default, Linux follows an optimistic memory allocation strategy. This means that when malloc() returns non-NULL there is no guarantee that the memory really is available. This is a really bad bug. In case it turns out that the system is out of memory, one or more processes will be killed by the infamous OOM killer. In case Linux is employed under circumstances where it would be less desirable to suddenly lose some randomly picked processes, and moreover the kernel version is sufficiently recent, one can switch off this overcommitting behavior using a command like

        # echo 2 > /proc/sys/vm/overcommit_memory

See also the kernel Documentation directory, files vm/overcommit accounting and sysctl/vm.txt.
Эх. Полезли вот точно такие же баги.

http://www.redhat.com/archives/fedora-de…

Много утилит написано с учётом ленивого выделения памяти, что опять же стимулирует желание оторвать. Хых. Придётся делать огромный swap.
Господи, сколько таких горе-админов я уже не взял на работу. На что только человек незнающий не сваливает свои проблемы, на линукс, на виндовз, на железо...

Читайте про то, как работает оом-киллер и про ulimit конечно. Выше вам тоже верно подсказывают - в VZ все давно есть, почитайте про устройство user bean counters.
Вобщем-то я нисколько не админ. VZ ничего нет. Потому что мне не нужно делать виртуальный компьютер, для расчётных задач нужны демоны, которые следят за их работой и они должны работать в одной виртуальной машине. Нужно ограничивать по памяти пользователя или процессы.
Там все ограничения по памяти на процессы, а не на группы. По крайней мере, запуск сотни процессов, каждый из которых выделяет по гигабайту памяти, при ограничении -m и -v на два гигабайта происходит нормально, память выделяется без ошибок.

Сейчас ещё раз это проверил, всё запускается и выделяется, ядро 2.6.16.19.
не пробовали из под разных пользователей запускать? Там лимиты на пользователей есть.
Там - это где? И если есть, как их активизировать?
Хм. А это разве не для ulimit'а установки? Кроме того, там нет устанвки, ограничивающей объём физически используемой памяти.

# A: max address space (KB)
# C: max core file size (KB)
# D: max data size (KB)
# F: maximum filesize (KB)
# M: max locked-in-memory address space (KB) [only for root on Linux 2.0.x]
# N: max number of open files
# R: max resident set size (KB) [no effect on Linux 2.0.x]
# S: max stack size (KB)

А за что вот это все отвечает? ;)
Ну а где именно тут параметр: максимальный объём памяти для процессов пользователя?

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

Чем именно мне воспользоваться?
Это для всех прцессов пользователя. А не для одного из них. В вашем случае советую использовать D M и R. В более новых дистрибутивах эти вещи лежат в /etc/limits.conf
Эксперимент - лучший способ познания жизни. Не знаю, какой дистрибутив у Вас, а у меня на gentoo linux, с ядром уже указанной версии, и на redhat linux, с ядром 2.6.17, эти установки меняют ulimit'ы, которые работают для каждого процесса по отдельности. Можно запустить 100 процессов, каждый из которых выделяет по гигабайту памяти, при всех указанных ограничениях, установленных на 2 гигабайта. При этом, 4 гигабайта, например, выделить не получается.

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

Что я делаю не так?
Если gentoo то вот:
http://www.gentoo.org/doc/ru/security/se…

Вы забываете, что можно еще ограничить число запускаемых процессов:

nproc - max number of processes

Наложение ограничения на количество процессов + ограничение на выделяемый объем позволяет ограничить ресурсы предоставляемые пользователю.
А как ограничить? Вот есть у меня эти 8 гигабайт на узел оперативной памяти. Что мне делать? Разрешить запускать два процесса, но ограничить их 4 гигабайтами памяти? Так а что тогда делать программам, которые запускают по одному процессу на узле? Разрешить запуск только одного, и разрешить доступ к 8 гигабайтам? Но что делать, если пользователь хочет запусть 2, а потом ещё интерактивно поработать с данными, которые у него накапливаются в процессе расчётов? Разделить пользователя на два аккаунта: один с одним большим процессом, а другой с кучей маленьких? Так иногда запускается несколько больших вычислительных, если задача использует несколько процессоров и общую память.

Какой профиль Вы посоветуете, как гуру?
Если я правильно понимаю вам необходимо обеспечить минимальное влияние пользовательских процессов, на ваши системные сервисы. В этом случае оптимальным будет использование песочниц VZ которые можно ограничить по потребляемой памяти. Для этого стоит использовать OpenVZ + система сторож вне песочницы. В случае Solaris вам потребуется тоже самое. там это реализуется через Zones
Угу, верно. А я правильно понимаю, что если я напишу что-то вроде

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

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

Если так, то хорошо. Остаётся только проверить, насколько хорошо это всё с myrinet дружит.
Именно так.


Остаётся только проверить, насколько хорошо это всё с myrinet дружит.

Ну это уже не подскажу с myrinet не работал.
VZ это аналог jails/zones и тп, виртуализация там только в понятиях ядра, а не машины.
Процесс из VE0 может иметь доступ ко всем остальным VE. В общем ну сядьте же почитать документацию! :)
Обязательно прочитаю, как только найду что-нибудь кроме устаревших man'ов. А пока такой вопрос, из VE0 можно напрямую все процессы видеть через /proc?
Кроме этого смущают фразы из man vzctl

--vmguarpages pages[:pages]
Memory allocation guarantee. This parameter controls how much memory is available to a VE. The barrier is the amount of memory that VE's applications are guaranteed to be able to allocate. The meaning of the limit is currently unspecified; it should be set to 2,147,483,647.

--oomguarpages pages[:pages]
Guarantees against OOM kill. Under this beancounter the kernel accounts the total amount of memory and swap space used by the VE processes. The barrier of this parameter is the out-of-memory guarantee. If the oomguarpages usage is below the barrier, processes of this VE are guaranteed not to be killed in out-of-memory situations. The meaning of limit is currently unspecified; it should be set to 2,147,483,647.

--physpages pages[:pages]
This is currently an accounting-only parameter. It shows the usage of RAM by this VE. Barrier should be set to 0, and limit should be set to 2,147,483,647.



ahould be set, unspecified и так далее. И почему только до 2147483647 - 2Gb, если я правильно понял.
Потому что документация писалась до того как появились 64бита? :)
Если не секрет, что такое делает ваш софт, что ему нужно много гигабайт?
Различные вычисления: от моделирования физических процессов до задач распознавания образов.
На 4 килобайта цифру умножать пробовали? Там же четко написано, что память меряется в страницах. Это 8 с гаком гиг, даже если там есть это ограничение.
Вот ещё бы это было написано где-нибудь ещё, а не только в дебрях wiki, может быть и попробовал бы поумножать : ) Спасибо за информацию.
А где тут дебри вики? :))) Написано же в страницах. Страница память на x86 всегда была 4 килобайта.
Написано pages:[pages], а в примерах на сайте указаны мегабайты или килобайты, так что, не разобрать без wiki, потому что всякое бывает.
Но вообще, отчаянным и крутым Linux'оидам надо задуматься вот над чем. Есть у меня Linux - многопользовательсякая и многозадачная операционная система, но при этом задачи как-то не очень уж и защищены друг от друга, пользователи тоже могут устраивать друг другу гадости, пользуясь, хотя бы этим же bug'ом в работе механизма виртуальной памяти. При этом, проблеме не первый десяток лет, однако, она так и не была нормально решена. При этом, даже если openvz поможет с этим справиться (в чём я сильно сомневаюсь, потому что вряд ли сигналы из организованных VEi, где i > 0, можно будет отправлять в VE0, и можно будет протянуть AF_UNIX socket из одного VE в другое), но даже если поможет, то почему мне нужно дополнительное программное обеспечение, которое на порядок (если смотреть на размер исходников) увеличивает сложность ядра? Почему ядро многопользовательской и многозадачной операционной системы Linux не предоставляет эти возможности, реализовать которые не должно быть так уж и сложно?

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

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

Есть у меня Linux - многопользовательсякая и многозадачная операционная система, но при этом задачи как-то не очень уж и защищены друг от друга, пользователи тоже могут устраивать друг другу гадости, пользуясь, хотя бы этим же bug'ом в работе механизма виртуальной памяти.

Это не баг это фича и она отключается одним движением руки. И замечу вам сказали как. К тому же может скажете в какой ОС это по другому?


При этом, даже если openvz поможет с этим справиться (в чём я сильно сомневаюсь, потому что вряд ли сигналы из организованных VEi, где i > 0, можно будет отправлять в VE0, и можно будет протянуть AF_UNIX socket из одного VE в другое)

Vz полностью изолированы от друг друга. Эта штука предназначена несколько для других вещей.


Почему ядро многопользовательской и многозадачной операционной системы Linux не предоставляет эти возможности, реализовать которые не должно быть так уж и сложно?

Давайте начнем с того, что по вашему не реализовано? Лимиты на пользователя есть. Лимиты на процессы есть. Что вам еще надо?


Ну, хорошо. Но почему бы не прислушаться к тому, что у пользователей вызывает проблемы, и не исправить ситуацию?

Может это ваше ПО надо исправлять, а не ядро?


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

Даа ? А что такое каталог Documentation в исходниках ядра? И книг нет? Вот вам к примеру http://rlove.org/kernel_book/ . Сейчас с ходу не нашел, но точно помню есть аналогичная книга в открытом доступе.


Получается, community устроено так: либо ты linux'оид по жизни, и ничем другим заниматься уже не в праве и не в состоянии, либо ты не linux'оид и тебя никто слушать не будет, а будут показывать пальцем и говорить фууу, даже если ты предлагаешь дельные вещи.

Неа. Просто сначала надо прочитать документацию, описать почему указанные в документации методики вам не подходят, а затем уже начинать наезды. Если же вам не хочется читать докуметацию, то неплохо бы заплатить денег за то чтобы вам сделали. Я вообще не понимаю вашу позицию мне должны. Вам никто ничего не должен. Вам могут подсказать как решить проблему, но решать вашу проблему за вас никто не будет.


Эта нетерпимость несколько раздражает.

Ваши безосновательные наезды тоже несколько раздражают.


И, с небезосновательной претензией на истину можно сказать, что мешает продвижению системы в массы.

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

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

А толку изучать документацию, если нет необходимой функциональности?

Какой именно? Прибивать самый толстый процесс который захавал память или не давать процессу зохавывать память?


Но в нём, в самом деле есть, что исправлять.

Идеальных систем не бывает.


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

Вы уверены, что за два года вы сможете построить ядро лучше Linux?


Можно будет тыкать потом в них пальцем на защите и говорить: смотрите, у них технические недостатки, а у нас таких нет.

Флаг вам в руки и дай бог, что у вас получится что-то достойное. Кто будет заниматься разработкой и обкаткой ядра?
Ну. Через два года будет резултат, но разрабатывается и обсуждается всё уже третий год. Хочется действительно удобную и эффективную вещь сделать. Разработкой занимается несколько человек из нескольких ВУЗ'ов и институтов РАН. Обкаткой и тестированием - все желающие, open source - это хорошо. За флаг спасибо, торжественно клянёмся оправдать доверие : )
В качестве базиса что выбрано? Под какой лицензией будет распрастранятся? Нет ли страницы проекта?
Эээ так что это будет система распраллеливания для какой либо из платформ или отдельная платформа?
Ну подождем и посмотрим. Может что дельное сделают.
По поводу исправления ПО. Хм... 1. Это не моё ПО, это ПО наших пользователей - математиков, физиков, химиков, биологов. 2. Нормальная отладка невозможна из-за описываемой ситуации. Потому что ядро не выбрасывает процесс, который вызвал переполнение памяти, а выбрасывает произвольный процесс. И фиг тут поймёшь, по какой причине всё произошло. Нам самим порой сложно понять, что произошло и в какой момент, ну а физику, который не должен быть продвинутым системным программистом, потому что у него есть более интересные занятия, вообще в этом не разобраться.
C, C++, FORTRAN, Pascal, плюс различные скрипты. Для распараллеливания используется OpenMP и MPI. Как этой информацией можно воспользоваться?
Элементарно. Есть такая штука как valgrind. По возможности прогоните ПО через нее. При наличии утечек памяти надо идти и стучать в бубен. Или же перейти на языки с автоматическим уборщиком мусора. К примеру java. К тому же если у вас ПО пишут математики физики и прочие господа, то возникают вполне внятные подозрения на возникающие утечки памяти и не эффективное использование процессорного времени.
Тык. Будто неизвестно нам про неё : ) Конечно, прогоняется всё через неё и через electricfence и free/malloc используются в отладочном режиме. Кроме того, в вычислительных приложениях, обычно, память выделяется редко, просто её выделяется ОЧЕНЬ много, меньше выделять просто нельзя, потому что данных тоже ОЧЕНЬ много. В этом проблема.

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

Кроме того, в вычислительных приложениях, обычно, память выделяется редко, просто её выделяется ОЧЕНЬ много, меньше выделять просто нельзя, потому что данных тоже ОЧЕНЬ много. В этом проблема.

Вот надо ли вообще столько памяти? У вас ваши разработчики про дисциплину "численные методы" слышали? :)

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

Они, конечно, оптимизируют, выдумывают новые методы, защищают на этом кандидатские и докторские и сами пишут книги по 'численным методам'.

Хм. Если у них одна матрица занимает 120Gb (она не разреженная, она просто такая вот), какие численные методы позволят сэкономить память?

Такая матрица и так в память не помещается. Так что прийдется вам ее разбивать, на части для обработки. К тому же сжатие и распараллеливание еще никто не отменял.


Они, конечно, оптимизируют, выдумывают новые методы, защищают на этом кандидатские и докторские и сами пишут книги по 'численным методам'.

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


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

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


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

Но с другой стороны, если Linux не позволяет эффективно разобраться пользователю с этой проблемой. И если для этого нужны дополнительные программисты, администраторы, финансирование, то возникает вопрос к эффективности самого Linux. Тем более, если это всё можно решить простыми методами в ядре, без привлечения к ответу правительства РФ?

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

Зря вы не используете java. Там есть специальная опция для виртуальной машины.


Но с другой стороны, если Linux не позволяет эффективно разобраться пользователю с этой проблемой.

Позволяет. Штатных средств в виде ulimit в большинстве случаев хвает. К тому же никто вам не запрещает, запускать все приложения с ограничениями.


И если для этого нужны дополнительные программисты, администраторы, финансирование, то возникает вопрос к эффективности самого Linux.

К эффективности ваши проблемы не имеют никакого отношения.


Тем более, если это всё можно решить простыми методами в ядре

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

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

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

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

Мы не используем java по одной очень простой причине, тестовые программы, написанные на ней (преобразования Фурье, умножения матриц, расчёт систем из большого количества тел) работают раз в 10 медленней, чем программы на С, откомпилированные gcc.

Какая java машина и какое ядро Linux?


А теперь представьте, что средняя программа у нас оптимизированная и вылизанная, в том числе и по доступам в линии кэша, да ещё и с переписанными на ассемблере некоторыми функциями, чтобы хорошо использовать SSE2, грызёт данные около 60 часов подряд.

Так у вас софт таки на C или на асме частично?


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

У меня есть знакомый, они гоняют расчетные задачи в кластере на Java.


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

Хорошо задам очень простой вопрос. Как будете классифицировать относятся процессы к этой группе или нет?


Зачем для этого обязательно нужен сложный openvz

Он обеспечивает песочницу, которая не позволяет обеспечить практически железнобетонную защиту.


Почему в VPS'ах так жутко падает скорость передачи данных? Вместо 1.5 гигабита в секунду на бондинге получаю .7 гигабита плюс дикую загрузку процессора в 50%. Что надо исправить в настройках?

Какой тип соединения VZ с корневой системой используете?
Тестировали две, которые считаются (считались?) самыми производительными: 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.

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

Ну щас и от Sun неплохи, только там надо указывать, что приложение серверное имеется специальный ключ.


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

Группы процессов в Unix нет. Есть понятие child process и вполне возможно, что на них как раз ulimit parent действует. По uid кстати реализовано в limits только вот число процессов надо указывать и делить на них объем памяти.


Если имеется в виду то, как к сети доступ выдан, так при помощи такой штуки:

vzctl set 101 --netdev_add bond0 --save

Попробуйте через виртуальные устройства. Так как если у вас только одно подключение через bonding оно может работать медлено.
Предлагаю взглянуть на linux/kernel/sys.c:sys_getrlimit с той целью, чтобы устранить все разногласия по поводу того, для чего именно устанавливаются пределы в Linux. После чего, если поискать все упомянутые в этой функции имена в исходных текстах, можно запросто обнаружить, как именно эти пределы учитываются.
Посмотрел. Я правильно понял лимиты выставляются на группу ?
Да. Но контроль осуществляется индивидуально для процессов. Когда ресурсы выделяются, всегда проверяется current->signal->rlim - локальный массив задачи с описанием ограничений, который просто от лидера в группе наследуется, при создании новых процессов.
Понятно. Я вижу только одну проблему почему нет возможности динамического ограничения. Так как это может отрицательно повлиять на производительность.
Можно поискать только штучку rlim[, тоже даст ясную картину использования.
Это несерьёзно. Может быть, они действительно считались таковыми несколько лет назад. На сегодняшний день Sun Java 1.6 лучшее по производительности на PC.
Если смотреть сюда http://shootout.alioth.debian.org/sandbo…, то можно заметить по крайней мере двухкратное отстование java -server в скорости от gcc (шикарный результат в исполнении байткода для такого гибкого и мощного языка, как java, но это, всё равно, в 2 раза медленней). Кроме того, виртуальная машина жадная до памяти.
На спарке запустите :) А памяти да она хочет много :)
Там указано JVM 1.5.0_08. С тех пор времени уже прошло заметно. Кроме того, ещё не факт, что именно -server обязательно подходит для таких задач. Ещё думается, что многие из тех тестовых программ можно неслабо оптимизировать.
А как сделать наоборот? На 32-х разрядной системе выделить хотя бы 8Гб памяти одному процессу?
Sign up to leave a comment.

Articles