Май 24 2010

HDD

Published by

Разделы

корень лучше расположить как можно ближе к началу диска, так как скорость чтения-записи в начале и в конце диска отличается значительно и это хорошо скажется на быстродействии вновь установленной/перенесённой системы

hdparm -t /dev/sda1
/dev/sda1:
Timing buffered disk reads: 280 MB in 3.02 seconds = 92.85 MB/sec
hdparm -t /dev/sda7
/dev/sda7:
Timing buffered disk reads: 160 MB in 3.02 seconds = 53.06 MB/sec

fstab

в /etc/fstab перечислены все файловые системы, точки монтирования и их(фс) опции по-умолчанию, обычно defaults
Изменив эти опции можно немного ускорить работу с фс

Например, для

ReiserFS: acl,user_xattr,noatime,nodiratime,notail,barrier=flush

Ext3: acl,user_xattr,noatime,nodiratime,barrier=1

XFS: defaults,noatime,nodiratime,logbufs=8,logbsize=32k,biosize=16,allocsize=512m,barrier

Вот что все это означает:

  • user_xattr – расширенные атрибуты файлов (используются для индексирования).
  • barrier – команда очистки кэша.
  • noatime и nodiratime – отключение записи времени последнего доступа (для файлов/директорий).
  • allocsize – размер заранее резервируемой области на диске. Высокое значение помогает избежать фрагментации.
  • biosize – размер I/O-блоков по умолчанию.
  • logbufs – количество встроенных буферов для ведения журнала.
  • logbsize – размер буфера.
  • notail — не упаковывать хвосты больших файлов — улучшает производительность — увеличивает используемое для хранения место(~5%) — для применения этой опции надо желательно перезаписать находящиеся на ней файлы!

Writeback

В большинстве дистрибутивов при создании раздела ext3 используется тип журналирования Ordered (упорядоченный), т.к. он обеспечивает наилучшее соотношение скорости и безопасности. Однако самым быстрым режимом является Writeback (журналирование после записи): он осуществляет наименьшее журналирование.

Для его включения рекомендуется загрузиться в другой дистрибутив или с LiveCD, так как необходимо, чтобы ваш обычной корневой раздел (в нашем примере это /dev/sda1) был размонтирован:

tune2fs -O has_journal -o journal_data_writeback /dev/sda1

UDMA ( IDE HDD)

Настройка производительности IDE-дисков. Быстродействие IDE-дисков увеличивается при использовании UDMA. Ядро использует консервативный режим работы с дисками, пока ему не скажешь изменить это. «Волшебная» команда для изменения установок — это hdparm. Включение 32-bit I/O через шину PCI:

hdparm -c 1 /dev/hda

(или hdb, hdc и т.д.)

Руководство man для hdparm говорит, что для некоторых чипсетов нужно использовать «-c 3″. Все (E)IDE диски до сих пор имеют 16-разрядное подключение через ленточный кабель к интерфейсной карте. Включение DMA:

hdparm -d 1 /dev/hda

(или hdb, hdc и т.д.)

Возможность использования этой команды зависит от поддержки чипсета вашей материнской платы ядром. При включении DMA отменяется синхронизация буферизированного чтения диска, в результате чего быстродействие может увеличиться в 2 раза. Для включения multiword DMA mode 2:

hdparm -d -X34 /dev/hda

(или hdb, hdc и т.д.).

Эта установка используется для (E)IDE/ATA2 дисков (посмотрите документацию к вашему диску). Для включения UltraDMA mode2:

hdparm -d 1 -X66 /dev/ hda

(или hdb, hdc и т.д.)

Вам нужно будет заранее подготовить ваш чипсет к использованию UltraDMA, так что прочитайте man-ы к hdparm. Используйте этот режим очень осторожно!
Для включения multiple sector mode I/O:

hdparm -m XX /dev/hda

(или hdb, hdc и т.д.)

где «XX» ? максимальные установки, поддерживаемые вашим диском. Для поиска максимальных значений установленных жестких дисков может использоваться флаг -i (в выводимой информации смотрите значение MaxMultSect).

Многосекторный режим (IDE Block Mode) поддерживается большинством IDE жестких дисков, передача нескольких секторов за одно I/O прерывание быстрее, чем обычное односекторное. Когда эта возможность включена, обычно, понижаются «накладные расходы» на операциях ввода/вывода на 30-50%. На многих системах в результате также увеличивается пропускная способность от 5% до 50%. Вы можете проверить, чего добились, запустив hdparm в режиме проверки производительности:

hdparm -t /dev/hda

(или hdb, hdc и т.д.)

Как только вы определили все параметры hdparm, не забудьте добавить соответствующие команды в файл /etc/rc.d/rc.local.

Swap

в ядрах >=2.6 есть параметр swappiness — он определяет агрессивность свопа.
дефолтное значение 60 — это много. Да и зачем свопить если памяти больше половины свободно?ведь это лишний раз нагружает ввод-вывод и скорость чтения-записи резко падает.
т.е. если память забита и мы запускаем программу (особенно большую) винту приходится одновременно и считывать библиотеки и данные для запускаемой программы и записывать в своп «устаревшие» страницы — отсюда долгие запуски софта и снижение отзывчивости системы.

выход: в

/etc/sysctl.conf

добавляем строчку

vm.swappiness=10 (например)

очень маленькое значение при малом обьёме оперативной памяти может вызвать при сборке большого проекта или запуске тяжёлого софта out of memory! (не страшно,но тот же тяжёлый софт так и не запустится)

но, при своппинге с малым значением, могут возникнуть фризы
потому иногда гораздо лучше поставить win-style своппинг, т.е. 100

Есть ещё одна возможность отсрочить запись на винт.

http://code.google.com/p/compcache/

идея такая-в оперативной памяти создаётся ramdisk на который и попадут страницы из памяти которые должны быть перемещены в своп, только они предварительно сжимаются! благодаря этому те же страницы всё в той же памяти занимают меньший объём и поэтому свопить система начнёт позже.
Входит в ядра 2.6.33 и новее

Ядро может использовать своп-разделы на различных дисках в RAID0 стиле
монтируя их с одинаковыми приоритетами.

Ваш /etc/fstab для этого должен содержать что-то типа:

/dev/hda1 swap swap defaults,pri=1 0 0
/dev/hdc1 swap swap defaults,pri=1 0 0

Лучше всего поместите своп-раздел на IDE диски находящиеся на разных шинах,
т.к. master и slave на одной шине не могут передовать данные одновременно.
Это не являеться проблемой для SCSI дисков.

IO Scheduler
Резервирование места
По-умолчанию, скажем в ext*, резервируется 5% объёма за root-ом, это сделано что бы забив фс полностью от юзера, мы не получили нерабочую систему
но 5% на 80 гигах — одно, а скажем на терабайтном винте — совсем другое, т.к. во втором случае мы резервируем десятки гигов
дабы вернуть себе эти гигабайты на ext* можно сделать следующее

tune2fs -m 2 /dev/sdaX

это зарезервирует 2%, вернув нам 3%
так же можно отключить резервирование вообще (скажем на разделе с /home, который для рута и базовой системы вообще не нужен)

tune2fs -r 0 /dev/sdaX

в обоих случаях X — это номер раздела.

This page has the following sub pages.

14 responses so far

14 Responses to “HDD”

  1. viton 05 Сен 2010 at 17:30

    А где же ext4? 2010 год же… уже скоро даже в стабильном дебиане ext4 по умолчанию будет!

  2. megabakson 05 Сен 2010 at 23:38

    а что ext4?
    это по сути эволюция 3-ки

  3. unikumon 26 Июл 2011 at 19:12
    tune2fs -O ^has_journal /dev/sdXX

    совсем убирает журнал.

  4. nvyon 27 Июл 2011 at 11:44

    Не хватает информации по SATA, AHCI и NCQ. Кто может дополнить?

  5. megabakson 27 Июл 2011 at 14:38

    про NCQ есть в шедулерах
    что с SATA не хватает?

  6. unikumon 03 Фев 2012 at 11:55

    noatime для ext* включает в себя nodiratime.

  7. Alexeyon 08 Июл 2012 at 18:59

    Подскажите пожалуйста.
    У меня в fstab для раздела с системой вот такая запись:

    # /dev/sdb6
    UUID=d40410e2-cb25-414e-9d62-664355647c9f   /   xfs   defaults          0   1

    Как должно стать после оптимизации? Вот так:

    # /dev/sdb6
    UUID=d40410e2-cb25-414e-9d62-664355647c9f   /   xfs defaults,noatime,nodiratime,logbufs=8,logbsize=32k,biosize=16,allocsize=512m,barrier    0   1

    ? Поправьте меня, только точно, я не спец по линуксам.

  8. Alexeyon 08 Июл 2012 at 19:03

    Забыл, нужна скорость но только не ценой надёжности.

  9. megabakson 08 Июл 2012 at 23:00

    ну, noatime и nodiratime просто не обновляют последнее время доступа, т.е. на чтении дают некий профит
    по поводу остального — я не пытал особо xfs, потому ничего конкретного по поводу других параметров не скажу

  10. megabakson 08 Июл 2012 at 23:02

    нужна скорость но только не ценой надёжности.

    так не бывает — всегда или/или, ибо иначе это было бы дефолтом
    последнее время доступа не всегда критично, да — тут можно сказать «и/и», но в остальном так не получится

  11. Maximon 10 Апр 2013 at 16:44

    Спасибо за статью, еще бы подобный материал, но уже с учетом SSD

  12. noatimeon 07 Май 2013 at 01:27

    Note: noatime already includes nodiratime. You do not need to specify both.[1]

    Write barriers enforce proper ordering of writes, making volatile disk write caches safe to use (at some performance penalty). If your disks are battery-backed in one way or another, disabling barriers may safely improve performance.

  13. megabakson 07 Май 2013 at 01:42

    да, всё верно, но одно другому не мешает.

  14. noatimeon 07 Май 2013 at 02:09

    Для ext4 увеличивает производительность barrier=0, а не наоборот. Насколько я понял.

Trackback URI | Comments RSS

Leave a Reply


*

Powered by WordPress