Привет всем!Сразу оговорюсь - НИКАКОГО ФЛЕЙМА!
Итак, насколько я знаю Линукс не умеет разделять сегмент кода для нескольких тредов. (или нет?) То есть он грузит отдельно каждую копию программы. Насколько это сказывается на производительности сервера? Скажем, если запущено много одинаковых приложений? У меня стоит сервер, который в основном используется для телнета к нему и телнета с него. Поэтому там всегда около 100 юзверей и телнет запущен раз 80... Он начал затыкаться время от времени из-за нехватки ресурсов. Поможет ли здесь BSD? И насколько? Сервер: Pentium 800; RAM 128Mb.
Заранее спасибо!
/SergeyK
IMHO.
Должно помочь ограничение ресурсов для юзеров на количество процессов и обьему оперативной памяти.
>IMHO.
>Должно помочь ограничение ресурсов для юзеров на количество процессов и обьему оперативной
>памяти.Так вот этого делать не хотелось бы.... Они родные должны все паолучить что могут. Просто ресурсы хочется поэкономить, не зарезая юзеров, а им дать побольше.
>Привет всем!
>
>Сразу оговорюсь - НИКАКОГО ФЛЕЙМА!
>
>Итак, насколько я знаю Линукс не умеет разделять сегмент кода для нескольких
>тредов. (или нет?) То есть он грузит отдельно каждую копию программы.Ну как же не пофлэймить если вы мягко говоря (грубо сказать воспитание не позволяет ;-)))
не правы. У Linux-а сегмент кода read-only и всегда разделяется - как для fork (тяжеловесный процесс) так и для vfork и thread-ов (здесь разделяется также сегмент данных) А в вашем случае, я думаю, виноват inetd/xinetd который каждый раз запускает in.telnetd по новой - так причем здесь Linux?
>Насколько это сказывается на производительности сервера? Скажем, если запущено много одинаковых
>приложений? У меня стоит сервер, который в основном используется для телнета
>к нему и телнета с него. Поэтому там всегда около 100
>юзверей и телнет запущен раз 80... Он начал затыкаться время от
>времени из-за нехватки ресурсов. Поможет ли здесь BSD? И насколько? Сервер:
>Pentium 800; RAM 128Mb.
>
>Заранее спасибо!
>
>/SergeyK
>>Привет всем!
>>
>>Сразу оговорюсь - НИКАКОГО ФЛЕЙМА!
>>
>>Итак, насколько я знаю Линукс не умеет разделять сегмент кода для нескольких
>>тредов. (или нет?) То есть он грузит отдельно каждую копию программы.
>
>Ну как же не пофлэймить если вы мягко говоря (грубо сказать воспитание
>не позволяет ;-)))
>не правы. У Linux-а сегмент кода read-only и всегда разделяется -
>как для fork (тяжеловесный процесс) так и для vfork и
>thread-ов (здесь разделяется также сегмент данных) А в вашем случае, я
>думаю, виноват inetd/xinetd который каждый раз запускает in.telnetd по новой
>- так причем здесь Linux?Хм, так это не флэйм, а разьяснение истины для заблудших (меня то есть). То есть вы хотите сказать что делая fork запускается еще один thread по той же самой физической памяти (сегменту кода)? Хм.. может мы о разном говорим или я что то не так изьяснил. В общем пошло это с одного из семинаров где мне довелось присутствовать, так вот докладчик сказал что "у Линукса нет разницы между понятиями "thread and process" якобы для него это все process. В то время как в Solaris - это разные вещи. threads могут разделять один сегмент кода, а процессы - каждый имеет свой.
Разьясните плиз - а то так и помру неучем, так ли это? И если нет то запустив in.telnetd как демон я получу разделение сегмента кода?Заранее спасибо!
/SergeyK
>Хм, так это не флэйм, а разьяснение истины для заблудших (меня то
>есть). То есть вы хотите сказать что делая fork запускается еще
>один thread по той же самой физической памяти (сегменту кода)? Хм..
>может мы о разном говорим или я что то не так
>изьяснил. В общем пошло это с одного из семинаров где мне
>довелось присутствовать, так вот докладчик сказал что "у Линукса нет разницы
>между понятиями "thread and process" якобы для него это все process.
>В то время как в Solaris - это разные вещи. threads
>могут разделять один сегмент кода, а процессы - каждый имеет свой.
>
>Разьясните плиз - а то так и помру неучем, так ли это?
>И если нет то запустив in.telnetd как демон я получу разделение
>сегмента кода?
>
>Заранее спасибо!
>
>/SergeyK
Если под "разделением кода" имеется ввиду его совместное использование, то вроде я все понял правильно. Вообще если подразумевать, что thread должен иметь PID родителя, в то в Linux-е thread (я имею ввиду библиотеку libpthread, единственную с которой работал) конечно тоже является процессом. Только насчет разделения кода скорее всего вы неправильно поняли докладчика. Для подробностей читайте man и doc, а здесь я коротенько:при запуске fork создается новый процесс, со своим адресным пространством, но использующий тот же сегмент кода.
thread (libpthread) - у него только PID и stack свой, все остальное общее с родителем.
С telnet я не разбирался, по моему in.telnetd и сделан чтоб запускаться из inetd, так что вряд ли он может использоваться как демон и сомневаюсь что BSD чем то здесь поможет (хотя кто знает...). Вобщем смотрите ответ N1 (SandySandy) - он более по теме.
>при запуске fork создается новый процесс, со своим адресным пространством, но
>использующий тот же сегмент кода.
>
>thread (libpthread) - у него только PID и stack
>свой, все остальное общее с родителем.То есть никакой разницы с Solaris нет? ОК, ну тогда я спокоен... Спасибо!
/SergeyK
>>Хм, так это не флэйм, а разьяснение истины для заблудших (меня то
>>есть). То есть вы хотите сказать что делая fork запускается еще
>>один thread по той же самой физической памяти (сегменту кода)? Хм..
>>может мы о разном говорим или я что то не так
>>изьяснил. В общем пошло это с одного из семинаров где мне
>>довелось присутствовать, так вот докладчик сказал что "у Линукса нет разницы
>>между понятиями "thread and process" якобы для него это все process.
>>В то время как в Solaris - это разные вещи. threads
>>могут разделять один сегмент кода, а процессы - каждый имеет свой.
>>
>>Разьясните плиз - а то так и помру неучем, так ли это?
>>И если нет то запустив in.telnetd как демон я получу разделение
>>сегмента кода?Скорее всего, товарисч хотел донести до вас следующую мысль - в Linux треады эмулируются через отдельные процессы, с которыми и работает ядро. В Solaris для ядра нет понятия процессов - там есть тн. LWP, с котрыми собсно и происходит работа. При создании нового процесса (fork) и при создании новой thread (thr_create) в Solaris происходят разные операции...
Сразу скажу, так это или нет для Linux - не знаю, глубоко не ковырял.
Но то, что в Solaris thr_create на порядок эффективнее fork - это проверено неоднократно; слишком много дополнительных операций fork делает:)>>
>>Заранее спасибо!
>>
>>/SergeyK
>
>
>Если под "разделением кода" имеется ввиду его совместное использование, то вроде я
>все понял правильно. Вообще если подразумевать, что thread должен иметь
>PID родителя, в то в Linux-е thread (я имею ввиду библиотеку
>libpthread, единственную с которой работал) конечно тоже является процессом.В Solaris thread как раз и не является процессом:)))
>Только насчет разделения кода скорее всего вы неправильно поняли докладчика. Для
>подробностей читайте man и doc, а здесь я коротенько:
>
>при запуске fork создается новый процесс, со своим адресным пространством, но
>использующий тот же сегмент кода.
>
>thread (libpthread) - у него только PID и stack
>свой, все остальное общее с родителем.
>
>С telnet я не разбирался, по моему in.telnetd и сделан чтоб
>запускаться из inetd, так что вряд ли он может использоваться
>как демон и сомневаюсь что BSD чем то здесь поможет (хотя
>кто знает...). Вобщем смотрите ответ N1 (SandySandy) - он более
>по теме.В данном случае треады и fork тут ни при чем; in.telnetd в Solaris и FreeBSD не является
многопотоковым приложением - весь вопрос в том, насколько хорошо VMS использует
один и тот же elf-файл...
Я думаю, что вам имеет смысл понять что именно "тормозит" и попытаться оптимизировать
вашу систему; по-моему это лучше, чем метаться между разными OС:))