от Димитър(19-09-2002)

рейтинг (15)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

Това е резюме на моите опити да създам по-бързо ядро 2.4.18/19, без да разбирам в дълбочина от C и асемблер.
Причината, която ме накара да се впусна в това приключение е
съобщението на Никола Антонов във форума на linux-bg.org
за учудващото бързодействие на варианта на Линукс ядрото, разработено от МандрейкСофт за версия 8.2 на тяхната дистрибуция. Това ме амбицира да се опитам да създам подобно, което да облекчи моя стар компютър, реколта '99г.
Започнах с преглед на опциите на gcc -О2 и -О3 -> man gcc.
След това компилирах нетфилтър, сменяйки `COPT_FLAGS` във Маkefile-a на -О3. Инсталирах по следния начин (местата на нетфилтър са различни за всяка дистрибуция, моля проверете как е при вас):

make KERNEL_DIR=/usr/src/linux BINDIR=/usr/sbin LIBDIR=/usr/lib
MANDIR=/usr/man && make KERNEL_DIR=/usr/src/linux BINDIR=/usr/sbin LIBDIR=/usr/lib MANDIR=/usr/man install.

Така припокрих старите версии на нетфилтър и не се наложи да трия ръчно или през pkgtool. Продължих с избор на опциите на ядрото чрез make menuconfig.Указах само нетфилтър за се изгради модулно. Остатъка включих като твърдо ядро.
Започнах да експериментирам с добавяне на -O2/-O3 във /usr/src/linux/Makefile и компилиране.
След много опити и грешки, уцелих точната подправка - в
/usr/src/linux/Makefile, измених реда CFLAGS_KERNEL на
CFLAGS_KERNEL = -funroll-loops -O2. Това оптимизира логическите операции в ядрото изискващи повтарящ се цикъл от изчисления; големината и възможностите му.
Компилирах: make dep && make clean && make bzImage && make modules && make modules_install.
Редактирах /etc/lilo.conf, описах новото ядро, рестартирах последователно лило и компютъра - /sbin/lilo && /sbin/reboot.
Пуснах новото ядро в действие: резултатът беше намалена употреба на памет до 50МВ  при  зареждане, увеличено бързодействие с ~ 1/5 по моя преценка, 0% употреба на суапа.Направих и друг експеримент за издръжливост - пуснах Х,компилиране на ядро,музика,john и следене на процесите едновременно.XMMS взе да насича в определени моменти, обаче останалати задачи продължиха без проблем. Динамиката на свободната памет бе между 4 и 17 МБ в определени моменти, натоварването на процесора между 30 и 90% за потребителски процеси; средното натоварване - 2.30, 2.29, 1.88, минимално
използване на суап паметта.
Компилирах ново ядро 2.4.19 със същите параметри `CFLAGS_KERNEL = -funroll-loops -O2`. За мое удивление, старата кутия се справи за 30 минути вместо за 60.
Предполагам, че на по-нови машини с нови процесори, SCSI/Ultra ATA дискове и с надстройка с hdparm ефектът ще е много по-мащабен.

 Eто и подробностите:

Операционна система:
Slackware Linux 8.1, kernel 2.4.18/19, ReiserFS, glibc-2.2.5-i386-3, gcc-2.9.5-3-i386-2
Хардуер: Celeron 333 Мhz, MB:i440BX, 196 RAM, video: 8МВ TNT2, Quantum CR disk 5400 RPM.

Последни бележки: Ако искате да ползвате драйверите от Nvidia за ядрото, е добре да ги включите в него, а след това да напишете наново make в директорията NVIDIA_kernel-1.0.xxxx. Така хем конзолата с фреймбуфер ще има по-добра графика, хем Х сървъра няма да се оплаква, че не може да си намери драйвера `nvidia`.
Страничният ефект от употребата на NVdriver e вероятността от замръзване на машината при превключване на конзолите с Ctl+Alt+F*. Поне така се получаваше при мен, когато преминавах в друга конзола и после трябваше да се върна към графичен режим.
Затова е по-добре, ако можете да използвате драйверите, които идват с ядрото и XFree86. Може да не са толкова добри, както тези на Nvidia, но поне няма машината ви няма да замръзва при превключване на конзолите. Ако много държите да работите с драйверите от Nvidia, тогава терминални емулатори като xterm, rxvt, console,shell и други са вашето спасениe, докато ползвате XFree.
Ще се радвам, ако чуя дали моят опит дава положителни резултати:

 Пишете във форума дали има ефект.
 
 Поздрави,

 FreeJak,
17 септември 2002


<< Журналната файловата система ext3 | Кратко ръководство за писане на Bash скриптове >>