> A jak zni otazka ? > > Kazdy novy thread vyzaduje aby pro ni kernel drzel jakousi datovou > strukturu. Mnozstvi pameti kernelu dostupne je vsak omezene. Po > vycerpani dalsi alokace mozna neni - a to dopadne prave takhle. fakt jo? :) chvilku predstirejme ze jsem Dan a napisu dlouhej mail :)
takze.. FreeBSD 6.x ma 3 threadovaci knihovny 1) libkse ta implementujes takzvane M:N threadovani coz priblizne znamena to ze v kernelu je M threadu na ktere se mapuje N userspace threadu. cele je to divne slozite ale v 7.x uz se v tom da vyznam. prakticky vyznam to ma v tom ze je to pomalejsi ale ciste teoreticky by to melo setrit prave tu kernelovou pamet. rozhodne ale tady plati ze velikost_pameti_pro_thread_stacky != N*velikost_thread_stacku 2) libthr ta implementuje 1:1 threadovani coz je priblizne to co maji v linuxu a tak pekne zmagorili svet ze je to jedine mozne reseni :) tady je vyzadovan kernel space stack pro kazdy thread. srandovni je ze libthr je zoufale nezavisla na KSE a je tam spousta duplicit. na druhou stranu libthr je vyrazne rychlejsi (z MNOHA duvodu - mimojine ma umtx) 3) libc_r tohle je ciste 1:M threadovani kde velikost kernelove pameti zaalokovane pro stacky je konstatni (tj. nezavisla na poctu threadu v procesu) 6.x ma defaultni threadovaci knihovnu libkse... > Vytvareni novych procesu (ktere take vyzaduje alokaci datove struktury) > obsahuje limity, ktere by mely omezit schopnost uzivatele vycerpat tyto > omezene zdroje. nooooo.. zrovna tohle mne na fbsd dost se*e.. ty ruzne limity a vubec vetsina hardcoded hodnot ma velikosti nekdy z 80tych let a je to cele naprd... nezkoumal jsemto nejak moc podrobne ale u mne na workstation je kern.maxproc: 4068 coz je trapne... > Moznost vytvaret nove thready IMHO nijak omezena neni a kazdy uzivatel > tak patrne nezrizenym vytvarenim movych ma moznost shora popsany panic > vyvolat. no... ten panic je z vm_thread_new() ktery se pouziva pro allokaci threadu v kernelu, coz muze a nemusi mit vubec nic spolecneho s userspace threadovanim (viz vyse) kazopadne plati ze vm_thread_new se pouziva pri 1) alokaci procesu 2) alokaci threadu pomoci libthr 3) alokaci thread pomoci kse kazdopadne plati ze omezeni tady JE pro vsecky pripady, sice pokazde je to omezene jinak ale pokazde tady je kern.threads.max_threads_per_proc: 1500 roman -- FreeBSD mailing list (users-l@freebsd.cz) http://www.freebsd.cz/listserv/listinfo/users-l