Дельта-синхронизация крипто-дисков

Существуют разные способы зашифровать "облако". Один из них - поместить в облако крипто-диск. В предыдущей статье мы писали, почему это не всегда удобно.

Смотрим плавность хода с помощью BMW Rheingold

Всем знакома ситуация, когда двигатель немного "троит", но пропусков зажигания нет...

Дельта синхронизация без облака

Ранее мы показывали разные способы синхронизации криптодиска между ПК и Android-устройством.

Облачный хостинг VDS за 2 минуты

Настоящий облачный VDS-хостинг от UltraVDS: тестируем производительность

Тюнинг домашнего тукса


Денис Колисниченко

Как "разогнать" свой Linux

Тюнинг - это настройка чего-либо, приводящая к повышению производительности. "Тюнинговать" можно все, что угодно - от компьютера до автомобиля. В отличие от апгрейда, у тюнинга есть одно неоспоримое преимущество: не нужно покупать дополнительное железо, следовательно, тюнинг экономит деньги. На апгрейде тоже можно сэкономить, если подходить к этому процессу с умом. Например, будь у меня компьютер с процессором Duron 1,2 Ghz и 128 Мб оперативки, я бы лучше купил еще 256 Мб оперативки, чем более мощный процессор, поскольку Линукс более чувствителен к объему оперативки, чем к частоте процессора. Но статья сейчас о тюнинге, поэтому больше сочинений на тему "как проапгрейдить компьютер" не будет.

твое собственное тюнинг-ателье

Мечтал о таком? Если да, то сейчас мечта воплотиться в реальность. Давай определимся, как мы будем настраивать нашу систему. Пойдем по пути наименьшего сопротивления - вдруг после самого простого изменения результат тебя устроит, а оставшееся время можно будет потратить с большей пользой?

Уродовать систему мы также не будем - после нашего тюнинга работа с системой не должна стать менее комфортной. Смотри: можно и с автомобиля повыдергивать все, что есть в салоне, оставив одно кресло, руль и педали - так мы уменьшим вес, и машина будет ехать быстрее, но будет ли тебе комфортно? Точно также и в Linux. Можно отключить все и оставить одну консоль - система будет быстрее загружаться и будет много свободного места, но что делать, если захочется послушать музыку или посмотреть фильм?

План наших действий будет следующим:

  1. Отключение ненужных сервисов
  2. Увеличение объема виртуальной памяти
  3. Тюнинг свопа
  4. Изменение работы планировщика процессов
  5. Конфигурирование ядра
  6. Установка новой системы инициализации
  7. Выбор другой файловой системы

Перед началом настройки нужно отметить, что настройка будет производиться на примере дистрибутива Fedora Core 4, а также, что некоторые приемы, описанные в статье, не будут работать со старыми ядрами (ниже 2.6).

Отключение ненужных сервисов

Каждый запущенный сервис "съедает" не только драгоценное процессорное время, но но и память, которой постоянно не хватает. Что ни говори, а памяти много не бывает. Если бы еще были нужны все эти сервисы, тогда другое дело. А на практике получается, что о существовании запущенных сервисов многие даже и не подозревают.

Как уже было отмечено, тюнинг Linux будет рассматриваться на примере FC4, а значит, и сервисы будут от Федоры. Возможно, в твоем дистрибутиве будут другие сервисы, которые здесь не рассмотрены, но особо не расстраивайся - какой бы ни был дистрибутив, средство настройки сервисов поможет тебе определиться, нужен тебе тот или иной сервис или нет. В FC для настройки сервисов используется конфигуратор "system-config-services", а в Mandrake - "drakxservices".

В целях экономии времени (и моего и твоего) остановимся только на сервисах, которые в большинстве случаев включены по умолчанию, но домашнему пользователю не нужны - их можешь смело отключить:

  1. acpid - управляет ACPI-событиями
  2. anacron, atd, crond - демоны-планировщики (запускают указанные тобою команды в указанное время). Обычному домашнему пользователю они ни к чему. Логику разработчиков не понять: да, может пользователю и нужен планировщик, но зачем целых три???
  3. apmd - нужно оставить только на ноутбуках
  4. cpuspeed, haldaemon - просто отключи их
  5. cups* - система печати CUPS полезна только, если принтер используется каждый день. Если принтера нет или печать производится время от времени, данные сервисы можно отключить. А когда появится принтер - запустить заново с помощью команды "service имя-сервиса"
  6. isdn - у тебя есть ISDN? Нет? Тогда зачем тебе этот сервис?
  7. kudzu - этого "зверя" можно запускать вручную, как правило, после того, как в компьютер была установлена новая железка: kudzu используется для определения новых устройств (в Mandrake вместо kudzu используется harddrake2)
  8. lm_sensors - используется для наблюдения за различными датчиками системы, вроде температуры процессора. Кроме простого запуска демона для системного мониторинга, нужно много чего еще настроить, так что пока выключи этот сервис. Иногда проще заглянуть в SETUP...
  9. messagebus - "шина" сообщений, выключай ее
  10. mdmonitor - используется для мониторинга программных RAID-массивов, в остальных случаях (когда RAID не используется) просто не нужен
  11. netfs - нужен для различных сетевых файловых систем, в том числе и для SMB, поэтому не выключай его, если вокруг тебя компьютеры под управлением Windows и нужно использовать их общие ресурсы
  12. mDNSResponder, nifd - просто выключи и забудь
  13. pcmcia - данный сервис нужен для поддержки PCMCIA-карт, которые, как все мы знаем, используются на ноутбуках
  14. portmap - домашнему пользователю вряд ли пригодится этот сервис
  15. rpc* - отключай все сервисы для поддержки RPC - удаленный вызов процедур - заодно устранишь потенциальную дыру в своей системе безопасности
  16. smartd - нужен для S.M.A.R.T. устройств. У меня таких нет, поэтому я его выключил
  17. sshd - предоставляет удаленный доступ к консоли системы. Если тебе такое счастье не нужно, можешь смело выключить.
  18. sendmail - если не планируешь в ближайшее время настраивать свой SMTP-сервер, а все еще отправляешь почту через SMTP своего провайдера, отключи sendmail
  19. rhnsd - можно смело выключить
  20. irqbalance - нужен только на SMP-машинах, то есть где имеется несколько процессоров

Только что мы не только повысили быстродействие системы, но и немного обезопасили ее - ведь каждый ненастроенный, но запущенный сервис - это потенциальная дыра в системе безопасности. Теперь перезагрузи компьютер. Нет, не для того, чтобы изменения вступили в силу как в Windows, а для того, чтобы почувствовать насколько быстрее стала загружаться твоя система. Теперь поработай с системой. Скажем с полчаса. Стала работать быстрее? Значит, не зря ты читаешь эту статью и этот журнал. Но не будем останавливаться на достигнутом.

Увеличение объема виртуальной памяти

Введи команду free в консоли. Сколько виртуальной памяти сейчас свободно? Совсем забыл сказать: виртуальная память - это физическая память и своп-память (то есть область подкачки). Если все заполнено, например, осталось несколько мегабайтов физической памяти и столько же в своп-области, значит, памяти катастрофически не хватает.

Лучший совет - это купить новый модуль оперативки, но пока попробуем создать дополнительный своп-файл, который добавит несколько мегабайтов виртуальной памяти. Выполни команду:

# dd if=/dev/zero of=/sw-file bs=1m count=64

Этим мы создали пустой файл /sw-file объемом 64 Мб. Если нужно больше, можешь создать файл на 128, 256 Мб - не имеет значение, хоть на гигабайт, лишь бы места на диске хватило. Теперь сделаем из этого файла своп-файл (64*1024):

# mkswap /sw-file 65536

Осталось попросить систему, чтобы она задействовала новый своп-файл:

# swapon /sw-file

Дабы последнюю команду не вводить каждый раз при запуске системы, пропиши ее в загрузочных сценариях (желательно после команды "swapon -a") - это временно решит проблемы с оперативкой. Заметь, для комфортной работы в Linux (при использовании X Windows и KDE/GNOME) нужно как минимум 192 Мб оперативной памяти и хотя бы 128 Мб своп-памяти. На моей машине картина следующая: со 256 Мб физической ОЗУ свободно лишь 4 Мб, но зато своп практически свободен - занято обычно несколько мегабайтов.

Тюнинг свопа

Мало только добавить несколько дополнительных мегабайтов своп-памяти. Очень важно еще точно настроить сам механизм виртуальной памяти, а именно - правильно установить коэффициент подкачки.

Предположим, что по работе приходится использовать несколько (или даже одно) довольно громоздких приложений и нечасто переключаться между ними. Возможно, ты работаешь с документами, поэтому с самого утра запускаешь OO Writer и/или OO Calc и переключаешься только между ними. Также утром запускаешь xmms – кто это без музыки работает? Изредка, скажем 5-7 раз в день ты переключаешься между этими приложениями.

Если установить большое значение коэффициента подкачки (файл /proc/sys/vm/swappiness), скажем, 90 или даже 100 (максимальное), то переключение между приложениями будет довольно медленное, но зато производительность основного приложения (то есть Writer или Calc) будет максимальной.

Если целый день приходится работать с небольшими программками и часто переключаться между ними, возможно, лучше установить коэффициент подкачки в районе 20 или 30. Поэкспериментируй с различными параметрами - так можно выбрать оптимальный для себя.

Вывести текущее значение файла /proc/sys/vm/swappiness можно с помощью команды:

# cat /proc/sys/vm/swappiness 

Значение по умолчанию – 70. Возможно, тебе больше всего подойдет именно это значение. Установить значение (в данном случае 20) можно с помощью команды:

# echo "20" > /proc/sys/vm/swappiness 

Изменение работы планировщика ввода/вывода

Каждой программе, работающей под Linux, время от времени необходим доступ к диску - прочитать данные с диска или записать на диск. Часть ядра, отвечающая за планирование ввода/вывода, называется планировщиком ввода/вывода. Имеется четыре различных алгоритма работы планировщика:

  • Режим по умолчанию (noop) – вряд ли он подойдет для обычного пользователя, не смотря даже на то, что он используется по умолчанию. Мы его даже рассматривать не будем
  • Упреждающее планирование (Anticipatory Scheduling) – при чтении программой данных с диска ядро пытается предугадать, какие данные программа, вероятно, будет читать при следующей операции чтения. Если ядро правильно угадало «мысли» программы, данный алгоритм позволяет существенно повысить производительность системы. Кроме всего прочего, эффективность этого алгоритма сильно зависит и от логики программы.

    elevator=as

  • «Справедливая» очередь (Complete Fairness Queuing) – равные права для всех программ. Ядро равномерно планирует операции ввода/вывода для каждой программы, здесь нет каких-либо программ, которые могут монополизировать доступ к диску. Если несколько программ одновременно запросят доступ к диску, все программы получат ответ. Данный метод в некоторых случаях позволяет повысить производительность системы, а в некоторых, наоборот, снижает общую производительность – все зависит от конкретной системы.

    elevator=cfq

  • Deadline-планирование или планирование крайних сроков (Deadline Queuing) – все приложения, запросившие доступ к диску, ставятся в очередь. Из очереди извлекается одна программа, которая и получает практически монопольный доступ к диску. Пока эта программа работают, все остальные ожидают в очереди. По истечению определенного времени, планировщик переводит эту программу в состояние ожидания и переключается на другую программу – следующую в очереди. Теперь вторая программа получается доминирующий доступ к диску. Потом третья, четвертая и т.д. Данный метод хорош для сервера баз данных, но не для пользовательского компьютера.

    elevator=deadline

У каждого алгоритма есть свои преимущества и недостатки. Но только два алгоритма подходят для обычного домашнего компьютера (то есть рабочей станции) – второй и третий. Для изменения планировщика даже не нужно перекомпилировать ядро: достаточно передать параметр elevator при загрузке ядра. А чтобы не делать это каждый раз при загрузке - прописать в конфигурационном файле загрузчика /boot/grub/grub.conf или /etc/lilo.conf. Пример (фрагмент /etc/lilo.conf):

image=/boot/vmlinuz-2.6.9
    label=Linux
    root=/dev/hda1
    append="elevator=as"
    ...

В случае с LILO по окончанию редактирования файла не забудь перезаписать загрузчик - команда lilo. В случае с GRUB перезапись загрузчика не нужна:

...
title My Default Linux
root (hd1,0)
kernel /boot/vmlinuz-2.6.9 ro root=/dev/hda1 elevator=as
...

Каждый следующий этап требует намного больше времени, чем все предыдущие вместе взятые.

Конфигурирование ядра

Повысить производительность системы может правильно сконфигурированное ядро. О конфигурировании ядра и о его компиляции уже много писалось (в том числе и мною), поэтому повторяться не буду. Скажу, что при конфигурировании ядра нужно следовать следующим правилам:

  1. Отключай неиспользуемые тобою возможности, например, если у тебя обычный модем, выключи поддержку USB-модемов, даже если та включена в состав ядра в виде модуля.
  2. Наиболее часто используемые модули можешь включить в ядро. Да, модуль, это хорошо, но если код уже в составе ядра, то его не нужно загружать с диска, поэтому можно ожидать, что система будет работать быстрее

Только не переусердствуй - всему есть мера. Можно отключить все и оставить самый минимум, а потом, чтобы подключить Flash-диск приятеля нужно будет перекомпилировать ядро - зачем тебе это нужно?

Если ты не знаешь, как компилировать ядро, рекомендую пропустить этот этап, чтобы не наделать ошибок. Если все же интересно, можешь прочитать об этом процессе в Интернете - по данному вопросу много написано.

Установка новой системы инициализации

В одном из номеров этого журнала (кажется, в предыдущем), рассматривалась экспериментальная система инициализации - initng, позволяющая практически мгновенно загружать Linux. На установку и настройку этой системы может уйти день, но результат, поверь, того стоит.

По умолчанию практически во всех дистрибутивах Linux используется старая добрая программка init - именна она и выполняет всю рутинную работу по инициализации системы. Но "выполняет" - это громко сказано. По своей природе init довольно ленива: все, что она делает - это анализирует файл /etc/inittab и, в зависимости от его содержимого, запускает определенные сценарии из каталога /etc/rc.d/. Сценарии написаны на bash и их выполнением занимается сам bash собственной персоной. Поскольку выполнение сценариев выполняется посторонней программой (bash'ем), снижается скорость загрузки Linux.

Initng сама занимается выполнением сценариев, которые, между прочем, написаны не на bash, а на собственном языке, который, впрочем повторяет синтаксис всем известного bash. Именно потому, что выполнением сценариев занимается сама initng, загрузка Linux происходит быстрее. Новую систему инициализации можно установить не на каждый Linux. Для установки последней версии initng 0.5.3 от

системы требуется поддержка SELinux, пакет filesystem версии 2.2.4 или выше и библиотека glibc версии 2.3.4 (или выше). На третью версию Fedora Core initng установилась сразу и без ошибок, а вот десятая версия Mandrake оказалась старой для initng.

Скачать initng можно по адресу https://initng.thinktux.net/download/v0.5/. Рекомендую скачать исходный код, чтобы потом самостоятельно откомпилировать программу. RPM-пакет с initng можно скачать лишь в том случае, если система полностью соответствует требованиям initng, особенно это касается версии библиотеки glibc.

Другая файловая система

Статью, посвященную повышению производительности системы, я уже когда-то писал, но это было довольно давно, и тогда в ней рекомендовалось разгонять винт с помощью программы hdparm. В те времена ни один дистрибутив не выжимал из жесткого диска все, что он может, поэтому жесткий диск работал в режиме черепашки. Но те времена прошли - теперь вряд ли с помощью hdparm можно существенно поднять производительность винта, поскольку это уже сделали разработчики дистрибутива. Но у тебя есть еще шанс - ты можешь изменить файловую систему. Обзор файловых систем в свое время занял одну статью, подобную этой. Ее можно найти на сайте https://www.dkws.org.ua в разделе Система.

Если изменение файловой системы - слишком накладно, то можно выбрать оптимальный для себя режим ext3. Самым быстрым режимом является режим обратной записи (writeback), изменить его можно в файле /etc/fstab, например:

/dev/hda1 /  ext3 data=writeback 1 0

На этом тюнинг домашнего тукса можно считать завершенным.