от Захари Евгениев Димитров(20-08-2001)

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

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

Как да прецакаме Linux с помощта на  hdparm.
(ръководство на потребителя)

Идеята на тази статия е не да се научим как да си развалим отлично конфигурираната Линукс дистрибуция (предполагам, това всеки го знае? ;), а да увеличим скоростта на EIDE твърдия ви диск под Линукс. Заглавието е такова, защото когато се опитвах да тествам програмата си скапах моя компютър, но както и да е*. Целта е да се помогне на всеки начинаещ да разбере как да ускори системата си посредством използването на hdparm. Предполагам, че статията няма да е интересна за ветерани в Линукс, затова препоръчвам такива да не я четат.

Жертвана (тествана) система:
ZIDA 5STX (Intel 430TX) Mainboard
Intel Pentium
88 RAM
Твърд диск: марка - QUANTUM, модел - FIREBALLP AS20.5, характеристики - 20 GB, 2 MB Cache; 7200 rpm
Slackware Linux 7.0.0 - отлично конфигурирана.
kernel - 2.2.19
e2fsprogs - 1.22
hdparm - 4.1
kernel report for hard drive: hda: QUANTUM FIREBALLP AS20.5, 19595MB w/1902kB Cache, CHS=2498/255/63


1. Увод

Предполагам, че използвате Intel/Linux с (Е)IDE твърд диск?

Няма ли да е хубаво, ако има магическа команда, която да удвои I/O performance
на вашия твърд диск?

Чудили ли сте се някога как да разберете скоростта на действие на вашата настроена Линукс машина?

Не поглеждайте hdparm(8). Не сте чували за hdparm не се безпокойте, повечето хора също не са. Но ако сте един от тези използващи IDE/Linux система (като повечето хора) вие ще се учудите как сте карали толкова дълго време без нея. Знам че е така.

Каква е далаверата?
Значи, имате чисто нов UltraATA/66 EIDE твърд диск, с най-новия възможен чипсет, който поддържа multiple PIO modes и DMA. Но вашата система всъщност не използва тези прекрасни възможности? С помощта на hdparm(8) вие не само ще разберете как се справя твърдия ви диск, но и ще можете да го ускорите!

Преди да се възбудите твърде много, не е лошо да знаете че в някои случаи тази команда може да доведе до НЕОЧАКВАНА ЗАГУБА НА ДАННИ!(не е шега) Използвайте я на собствен риск!(виж заглавието) Преди да започнем направете си резервно копие на данните!


2. Подготовка

Най-добре е да си свалите последната версия на програмата а не да изполвате тази към вашата дистрибуция.Адреса е:
http://www.ibiblio.org/pub/Linux/system/hardware/
Аз използвах последната до момента версия hdparm-4.1, която беше 20K. Предполагам, че знаете как се инсталира програма от изходен код? Не?
Ами:

tar zxpvfC hdparm-4.1.tar.gz /tmp
cd /tmp/hdparm-4.1
make

и като root:
make install

Преди да изпълните make е добре да редактирате Makefile и да смените редове:

sbindir = /usr/local/sbin
mandir = /usr/local/man

с нещо по-подходящо

sbindir = /usr/sbin
mandir = /usr/man

Целта е новата версия да се запише върху старата за да няма проблеми при извикване или при четене на man страницата. Ако пътят за hdparm ви е друг сменето го с подходящ. А ако нямате инсталиран hdparm няма нужда от промяна на Makefile.

Преди да инсталирам hdparm обаче, аз си обнових и ext2 програмите (e2fsprogs-1.22 - последна по време на тестване) Адреса за сваляне е:

download.sourceforge.net/pub/sourceforge/e2fsprogs/e2fsprogs-1.22.tar.gz

Този пакет съдържа командата е2fsck (която се надявам, че няма да ви се наложи да използвате), както и други полезни команди като debugfs и dumpe2fs (за повече инфо вижте съответните man страници).

Инсталирането на e2fsprogs-1.22.tar.gz става по следния начин:

tar zxpvfC e2fsprogs-1.22.tar.gz /tmp
cd /tmp/e2fsprogs-1.22
mkdir build; cd build
../configure
make; make check

и като root:
make install

Препоръчвам използването на последните версии, защото както ще забележите в ChangeLog файловете им доста грешки от по-старите версии са оправени (а някои нови са добавени, но това е друга тема :)


3. Предупреждение

Първо преминете в single-user mode на Линукс преди да продължите.(telinit 1)

Наред с обичайните предупреждения, искам да отбележа, че ако използвате съвременен хардуер (т.е. вашият твърд диск, контролер и дънна платка са произведени през последните две или три години) вие се излагате на сравнително слаб риск. Тази команда е тествана на различни хардурени конфигурации, и най-лошото, което се е случвало е обикновено зависване на системата, без загуба на данни след рестартиране. За разлика от моята система на която след увисване, се пусна e2fsck и успя да ми направи от /sbin/ и /usr/sbin/ файлове и след това спираше по средата на INIT процеса. Това стана с последна версия на hdparm, но със стандартни e2fsprogs (тези към Slackware 7.0).

И за да не плачете горчиво, и да проклинате света заради собствения си лош късмет, имайте придвид че, не поемам никаква отговорност за това, което правита на ВАШИЯ компютър. Предупредени сте.


4. Обяснения

И ако все още не сте се уплашили, опитайте това(като root, за предпочитане в single-user mode):

hdparm -Tt /dev/hda

Ще видите нещо от сорта:

/dev/hda:
Timing buffer-cache reads:   128 MB in  3.32 seconds = 38.55 MB/sec
Timing buffered disk reads:  64 MB in 13.41 seconds =  4.77 MB/sec

Какво означава това? Опцията -T означава да тества кеширана система (т.e., памет, процесор, и кеш на буфера). Опцията -t означава да докладва статистиките на диска, използвайки данни ненамиращи се в кеша. Двете опции заедно, пуснати няколко пъти в single-user mode, ще ви дадат представа за скоростта на вашата Входно/Изходна система (I/O). Това са актуалните данни от посочената система вашите би трябвало да са различни.

Но дори и различни 4.77 MB/sec е малко дори за такъв хардуер. Спомням си, че рекламата за твърдия диск споменаваше за около 100MB за секунда!!?!? А какво излиза?

Нека разберем повече за това как Линукс адресира вашия твърд диск:

hdparm /dev/hda

/dev/hda:
multcount    =  0 (off)
I/O support  =  0 (default 16-bit)
unmaskirq    =  0 (off)
using_dma    =  0 (off)
keepsettings =  0 (off)
nowerr       =  0 (off)
readonly     =  0 (off)
readahead    =  8 (on)
geometry     = 2498/255/63, sectors = 40132503, start = 0

Това са стандартните настойки. Добри, сигурни, но не и оптимални. Какво е това за 16-bit mode? Мисля, че вече не съм на 386! И защо повечето от другите опции са изключени (off)?

Общо взето е добра идея за всяка уважаваща себе си дистрибуция да може да се инсталира възможно най-сигурно. Посочените горе настройки са виртуално гарантирани че работят на почти всеки хардуер за който може да се сетите. Но след като знаем, че имаме нещо повече от прахолясала, 8-годишна, 16-bit multi-IO карта нека да видим и интересните опции:


multcount: Съкратено от многократно преброяване на сектори (multiple sector count). Това контролира колко сектора са четени от твърдия диск при едно Входно/Изходно прекъсване. Повечето модерни твърди дискове поддържат това.

man страницата твърди:

Когато тази опция е активирана, обикновено намалява натоварването на операционната система за дисковия Вход/Изход между 30 и 50%. На много системи, също осигурява увеличаване на обмена на данни от 5% дo 50%.


I/O support: ВАЖНО! Тази опция контролира как данните преминават от PCI шината до контролера. Почти всеки съвременен контролен чипсет поддържа mode 3, или 32-bit mode със синхронизация. Някои дори поддържат 32-bit асинхронно. Включването на опцията почти винаги увеличава пропусквателната способност (виж по-долу).


unmaskirq: Включвайки това вие позволявате на Линукс да демаскира други прекъсвания, докато обработва дисково прекъсване. Какво означава това? Обръща внимание на Линукс да използва други задачи използващи прекъсвания (като мрежов трафик и т.н.) докато чакате вашият диск да отговори с данните, които сте поискали. Трябва да подобри времето за отговор на цялата система, но имайте предвид, че: Не всички хардуерни конфигурации са способни да се справят с него. За повече инфо вижте man страницата.


using_dma: DMA може да е рискована работа. Ако можете да накарате вашият контролер и диск да го използват, направете го. Но повечето системи увисват докато си играете с тази опция. Отново вижте man страницата (и примера по-надолу)!


5. Начало или Турбо-ускорение

След като сте преминали в single-user mode като всеки добър администратор, нека да пробваме няколко турбо настройки:

hdparm -c3 -m16 /dev/hda

/dev/hda:
setting 32-bit I/O support flag to 3
setting multcount to 16
multcount    =  16 (on)
I/O support  =  3 (32-bit w/sync)

Страхотно! 32-bit изглежда добре. И някои мулти-прочита може да работят. Нека да тестваме отново:

hdparm -tT /dev/hda

/dev/hda:
Timing buffer-cache reads:   128 MB in  3.27 seconds = 39.14 MB/sec
Timing buffered disk reads:  64 MB in  8.59 seconds =  7.45 MB/sec

Уха! Почти двойно увеличение на пропускателната способност без сериозни усилия! Невероятно.

Но почакайте, има още: Ние все още не демаскираме прекъсванията, не използваме DMA, или дори не сме включили на свестен PIO mode! Разбира се, включването на тези опции винаги е рисковано. (Защо винаги трябва да има компромис между свободата и сигурността?) Man страницата споменава да опитаме Multiword DMA mode2 - НЕ ГО ПРАВЕТЕ! Когато изпълних следната команда:

hdparm -X34 -d1 -u1 /dev/hda

Линукс-а ми увисна (рядко явление - както пише в статията на O'Reilly увисна като NT машина пускаща Java програма) и след рестартиране и последвалата проверка с e2fsck на файловата система загубих достта ценни за мен данни (от типа на тази статия), и възможността да ги възстановя изчезна. Тъй като все още не съм Линукс-гуру (макар да го ползвам от три години), се наложи да инсталирам и конфигурирам всичко на ново, което (повярвайтe ми) отнема доста време и нерви. Ще попитате защо тогава показвам тази опция ? Ами в man страницата пише така :) В действителност на някои системи би трябвало да работи, а и се надявам някой непрочел всичко и преписващ командите на сляпо да си скапе Линукс-а, както направих аз ;0

След като НЕ ИЗПЪЛНИТЕ горната команда, опитайте това:

hdparm -X66 -d1 -u1 -m16 -c3 /dev/hda

/dev/hda:
setting 32-bit I/O support flag to 3
setting multcount to 16
setting unmaskirq to 1 (on)
setting using_dma to 1 (on)
setting xfermode to 66 (UltraDMA mode2)
multcount    = 16 (on)
I/O support  =  3 (32-bit w/sync)
unmaskirq    =  1 (on)
using_dma    =  1 (on)

И после проверете:

hdparm -tT /dev/hda

/dev/hda:
Timing buffer-cache reads:   128 MB in  3.87 seconds = 33.07 MB/sec
Timing buffered disk reads:  64 MB in  6.10 seconds = 10.49 MB/sec

10.49 MB/sec. Доста по-добре от малкото 4.77 MB/sec с което започнахме...

Между другото, забележете че отново включихме -m16 и -c3 ? Това е защото не се запомнят настройките на hdparm между рестартиранията. Не сте рестартирали?! Не изпълнихте ли посочената по-горе команда ? Добре, тогава може да тествате.

Пуснете проверката (hdparm -tT /dev/hda) още няколко пъти. И ако няма проблеми преминете в multi-user mode (telinit 3) пуснете X и стартирайте Netscape; Mozilla; Konqueror; Galeon; Nautilos; Evolution... и се пригответе да не паднете от стола. Зареждат по-бързо от преди, нали?

За да включвате всеки път hdparm с тези настройки е добре да добавите командата в някой начален скриптов файл, аз използвах:

/etc/rc.d/rc.local

като добавих в него следните редове

# Run the hdaprm
echo -e "Executing hdparm..."
/usr/sbin/hdparm -X66 -d1 -u1 -m16 -c3 /dev/hda

ВНИМАНИЕ! Добавете тези редове в стартов файл само след като се убедите, че системата ви работи стабилно с тези опции на програмата.


6. Забележки.

- Трябва да имате root привилегии за да можете да използвате hdparm.

- Може да използвате кой да е от началните скриптове (/etc/rc.d/*), но е добре hdparm да се стартира след проверката на файловата система (от fsck).

- След първоначално зареждане би трябвало да видите нещо от сорта на:

Executing hdparm...

/dev/hda:
setting 32-bit I/O support flag to 3
setting multcount to 16
setting unmaskirq to 1 (on)
setting using_dma to 1 (on)
setting xfermode to 66 (UltraDMA mode2)
multcount    = 16 (on)
I/O support  =  3 (32-bit w/sync)
unmaskirq    =  1 (on)
using_dma    =  1 (on)

Това не бива да ви плаши, просто показва, кои опции на командата са включени и така сте сигурни, че се е изпълнила.


- Ако имате няколко твърди диска може да ги тествате един след друг по същия начин и да добавите и техните редове в скрипта. Пример:
/usr/sbin/hdparm -X66 -d1 -u1 -m16 -c3 /dev/hdb (за /dev/hdb)
/usr/sbin/hdparm -X66 -d1 -u1 -m16 -c3 /dev/hdc (за /dev/hdc)

- За да видите във всеки един момент настойките на твърдия ви диск използвайте

hdparm /dev/hda

пример :

/dev/hda:
multcount    = 16 (on)
I/O support  =  3 (32-bit w/sync)
unmaskirq    =  1 (on)
using_dma    =  1 (on)
keepsettings =  0 (off)
nowerr       =  0 (off)
readonly     =  0 (off)
readahead    =  8 (on)
geometry     = 2498/255/63, sectors = 40132503, start = 0


7. Заключение

Това е една от онези интересни малки програми, които убягват от окото на многогодишни Линукс ветерани, докато някой не забележи, че системата му използва далеч от оптималните му настройки. (Виждате ли, всички мои съобщения на ядрото изглеждат добре...) Използването на hdparm никога не е било безрисково начинание, но за сметка на това е доста добре изследвано.

hdparm не само ускорява: Също ви позволява да настроите и включите различни ниско консумиращи енергия състояния на твърдия си диск.

Вижте hdparm(8) man страницата за последни думи.

Сърдечни поздрави за Mark Lord който е направил тази страхотна програма!


8. Използвана литература

Speeding up Linux Using hdparm - by Rob Flickenger (06/29/2000)
Rob Flickenger is the O'Reilly Network's Systems Administrator
Published on The O'Reilly Network (http://www.oreillynet.com/)
Copyright 2000 O'Reilly & Associates, Inc.
http://linux.oreillynet.com/pub/a/linux/2000/06/29/hdparm.html
- (почти) пълен превод с добавки.

Hard Drive Speed Tweak for Linux -- Written By: Fancy Piper (fancypiper@crosswinds.net)
http://www.linuxnewbie.org/nhf/intel/hardware/hdtweak.html
- използвано за отправна точка. Ако го откриете обърнете внимание на бележката най-отдолу на гореспоменатия сайт!

info hdparm


9. Връзки

На
http://metalab.unc.edu/pub/Linux/system/hardware/
можете да откриете hdparm, както и множество други полезни програми. Актуалната версия на hdparm - 4.1 е около 20К.
Директно сваляне:
http://www.ibiblio.org/pub/Linux/system/hardware/hdparm-4.1.tar.gz

Директно сваляне на e2fsprogs 1.22 (около 1.2MB)
ftp://download.sourceforge.net/pub/sourceforge/e2fsprogs/e2fsprogs-1.22.tar.gz

Ако нещо се скапе вижте:
http://www.hack.gr/users/mastoras/tips/debugfs.html


10. Интересно

Интересно е да се отбележи, че има кръпка за e2fsprogs (по-точно за версия 1.18), която след като се приложи ви позволява да играете тетрис, докато fsck проверява за грешки. Друг е въпроса, колко е уместно да го използвате. Можете да го свалите от:
http://www.movement.uklinux.net/fscktris/fscktris-1.18-0.1.diff
а e2fsprogs - 1.18 от:
ftp://tsx-11.mit.edu/pub/linux/packages/ext2fs/e2fsprogs-1.18.tar.gz
Домашна страница за повече информация:
http://www.movement.uklinux.net/fscktris/fscktris.html



Пожелавам ви
Happy hacking!

Захари Евгениев Димитров
10 Aвгуст 2001.


--------
* - Спокойно не смятам да го връщам на никой просто обяснявам защо заглавието е такова.


<< MBR след преинсталация на Уиндоус | Тестване на XFree86 4.1.0 без да махате стария X сървър >>