next up previous contents index
Дал╕: Загрузка та вимкнення системи Вгору: Керування пам'яттю Назад: Вид╕лення своп простору

Буферний кеш

114  

Швидк╕сть читання з диску115, ╓ набагато меншою, н╕ж швидк╕сть доступу до (справжньо╖) пам'ят╕. Часто трапля╓ться так, що Вам потр╕бно прочитати одн╕ й т╕ ж дан╕ к╕лька раз╕в з диску на протяз╕ в╕дносно короткого в╕дтинку часу. Простий приклад: Ви чита╓те листа, який прийшов електронною поштою, пот╕м в╕дкрива╓те цього ж листа в редактор╕ для того, щоб дати на нього в╕дпов╕дь, пот╕м в╕дкрива╓те програму електонно╖ пошти, яка в╕д╕шле цю в╕дпов╕дь. Або ╕нший випадок: ск╕льки раз╕в викону╓ться команда ls  в систем╕ з багатьма користувачами? Швидк╕сть роботи системи можна п╕дняти, якщо читати вс╕ дан╕ з диску т╕льки один раз, ╕ тримати ╖х в пам'ят╕ п╕сля цього доти, доки вони б╕льше не потр╕бн╕. Таким чином п╕двищу╓ться швидк╕сть вс╕х операц╕й читання з диску кр╕м само╖ першо╖. Це називають дисковим буфером, ╕ пам'ять, яка використову╓ться при цьому називають буферним кешем.

Пам'ять дуже часто обмежена, ╕ нав╕ть б╕льше того, ╖╖ часто недостатньо. Тому дисковий буфер не вда╓ться зробити достатньо великим (тобто, в╕н не може збер╕гати вс╕ дан╕, як╕ Вам потр╕бн╕). Коли кеш заповню╓ться, дан╕, до яких не було доступу на протяз╕ найдовшого часу стираються, ╕ вив╕льнена пам'ять використову╓ться п╕д нов╕ дан╕.

Дисковий буфер працю╓ також для запису. З одного боку, дан╕ записан╕ на диск, часто читаються п╕сля цього знову в пам'ять (наприклад, програма записана на диск редактором, чита╓ться п╕сля цього комп╕лятором). Отож, непогано мати т╕льки-що записан╕ дан╕ ╕ в кеш╕ також. З ╕ншого боку, пом╕стивши дан╕ т╕льки в кеш, ╕ не записуючи насправд╕ ╖х на диск, операц╕я запису робиться значно швидшою. Справжн╕й запис на диск викону╓ться п╕сля цього, на фон╕ яко╖сь ╕ншо╖ роботи, не запов╕льнюючи ╖х роботи.

Б╕льш╕сть операц╕йних систем мають дисков╕ буфери та кеш (хоча в деяких випадках вони називаються ╕накше), але не вс╕ з цих систем працюють за одними й тими ж принципами. Деяк╕ з них ╓ з наскр╕зним записом116 - дан╕ записуються на диск без затримки (але, звичайно ж, тримаються в кеш╕). Кеш, у якому запис в╕дбува╓ться п╕зн╕ше, назива╓ться кешем з в╕дкладеним записом. В╕дкладений запис значно ефективн╕ший, н╕ж наскр╕зний запис, але в той же час, б╕льш схильний до помилок: якщо щось негаразд з системою - або зника╓ напруга (хтось висмикнув шнур з розетки), або дискету вийняли з приводу до того, як дан╕ з буферу записан╕ на не╖ - вс╕ дан╕, як╕ були в буфер╕ на цей момент, загублен╕. ╤нколи це нав╕ть може означати, що файлова система на диску (якщо така була там) не в повному порядку. Бо не записан╕ на диск дан╕ можуть бути деякими контрольними даними файлово╖ системи.

Через це не можна вимикати систему без виконання в╕дпов╕дно╖ процедури вимикання (див. п╕дрозд╕л [*]), просто витягнувши шнура з розетки. Дискету з дисководу можна витягувати т╕льки п╕сля розмонтовування ╖╖, або ж т╕льки п╕сля того, як команда, яка виконувала запис на дискету, пов╕домить Вам про те, що вона зак╕нчила писати. Команда sync  злива╓117 буфер, тобто примусово запису╓ вс╕ незаписан╕ дан╕ на диск, ╕ нею треба користуватися тод╕, коли треба впевнитися, що все записано безпечно на диск. В системах з традиц╕йними Юн╕ксами ╕сну╓ програма update , яка викону╓ться в фоновому режим╕ ╕ робить sync  кожн╕ 30 секунд, тобто в б╕льшост╕ випадк╕в нема╓ необх╕дност╕ робити sync . В Л╕накс╕ ╓ ╕нший демон bdflush , який робить чист╕шу роботу - в╕н викону╓ sync  част╕ше для того, щоб запоб╕гти раптовим короткочасним зависанням системи, як╕ ╕нколи трапляються при високих нагрузках на диск викликаних командою sync . В Л╕накс╕ bdflush  запуска╓ться процесом update . В б╕льшост╕ випадк╕в нема╓ причини п╕клуватися про них, але, якщо з деяких причин трапля╓ться так, що демон bdflush  вмира╓, то ядро видасть попередження про це ╕ його потр╕бно запустити вручну (/sbin/update ). Дисковий кеш звичайно трима╓ в буфер╕ не файли, а блоки - найменш╕ одиниц╕ дискового вводу/виводу (в Л╕накс╕ вони р╕вн╕ 1 кбайту). Таким чином тримаються в буфер╕ також директор╕╖, суперблоки, ╕нформац╕я файлово╖ системи та дан╕ диск╕в без файлових систем.

Ефективн╕сть кешу в першу чергу залежить в╕д його розм╕ру. Занадто малий кеш практично не робить н╕чого - вс╕ т╕ дан╕, як╕ в╕н трима╓ в буфер╕ будуть злит╕ на диск ран╕ше, н╕ж кеш встигне ╖х використати. Критичний розм╕р кешу залежить в╕д того, ск╕льки даних чита╓ться ╕ запису╓ться, ╕ як часто потр╕бен доступ до одних ╕ тих же даних. ╢диний шлях це д╕знатися - це шлях експерименту.

Якщо дисковий кеш ма╓ ф╕ксований розм╕р, то його надм╕рний розм╕р теж знижу╓ ефективн╕сть роботи. Кеш забира╓ оперативну пам'ять в╕д системи, пам'ять ста╓ меншою, що в свою чергу приводить до п╕двищення частоти своп╕н╜у, а своп╕н╜ - такий же пов╕льний, як ╕ ╕нш╕ дисков╕ перац╕╖. Для п╕двищення ефективност╕ використання пам'ят╕ Л╕накс автоматично використову╓ всю в╕льну пам'ять п╕д дисковий кеш, ╕ автоматично зменшу╓ розм╕р кешу, коли програмам потр╕бно б╕льше пам'ят╕.

В Л╕накс╕ в╕д адм╕н╕стратора не вимага╓ться н╕яких додаткових д╕й для користування кешем - все в╕дбува╓ться автоматично. Кр╕м вимикання комп'ютера за правилами та виймання дискети з дисководу тод╕, коли потр╕бно, Вам нема╓ про що турбуватися.



Dmytro Kovalev
1999-06-10