LINUX.ORG.RU

[патч] hung-iosched - Временное отключение жёсткого диска

 


0

0

В Linux есть такая штука как laptop_mode, которая призвана делать так, чтобы обращения к жёсткому диску были сгруппированы пачками, между которыми диск можно останавливать.

У меня в этом режиме оно действительно меняет ситуацию (диск поднимается через секунд 10 вместо 2), но в целом оно выглядит больше как «соседи попросили не обращаться к винту», а не как «командир приказал не обращаться к винту», и тишину получалось организовать только на весьма непродолжительное время. (А ещё я хочу чтобы было «mount -o atime» - мне нужна будет потом статистика).

Не найдя хорошего решения, я написал пару патчей, которые позволят замораживать жёсткий диск в режиме «командир приказал». Естественно, при этом многие процессы начнут уходить в D-sleep, но это уже издержки.

Мне показалось, что проще всего будет это реализовать как специальный io scheduler, что я и сделал, назвав его hung-iosched (зависший). Выбираешь его - блочное устройство зависает. Ставишь обратно нормальный - отвисает.

Протестировав его на UML /* User Mode Linux */ (дольше было времени ожидать пока соберётся UML, чем собственно писать hung-iosched), перенёс в виде патча в своё ядро и протестировал на ноутбуке (получилось даже без перезагрузки).

Заработало. Но fsync/fdatasync тут же дали о себе знать. Второй патч уже потребовал перезагрузки. Зато теперь могу останавливать жёсткий диск и использовать свой Acer Extensa 5220 в тишине.

Включение режима:

sync
hdparm -S 1 /dev/sda
echo hung > /sys/block/sda/queue/scheduler
echo 0 > /proc/sys/fs/sync-enable
hdparm -y /dev/sda

Выключение режима:

echo 1 > /proc/sys/fs/sync-enable
echo cfq > /sys/block/sda/queue/scheduler
hdparm -S 0 /dev/sda

Критика, вопросы/предложения, предостережения?



Последнее исправление: vi0 (всего исправлений: 4)

а ты подумал на сколько хватит ресурсов механики винчестера в таком режиме? кстати, в режиме когда винчестер постоянно включен он расходует меньше электричества чем в режиме постоянного start/stop.

ЗЫ: unionfs + hdparm решит твои проблемы. берем контент в память->останавливаем блины->работаем в памяти->в конце работы заводим блины и синкаемся с диском. и никаких костылей.

isden ★★★★★
()
Ответ на: комментарий от isden

Не start/stop, а просто stop

в режиме постоянного start/stop

При чём тут постоянный start/stop? Просто stop. А start когда я специально нажму на кнопку. Мне как раз не нравилось, что когда я включаю laptop_mode, оно постоянно то раскручивало, то останавливало.

vi0
() автор топика
Ответ на: комментарий от isden

>ЗЫ: unionfs + hdparm решит твои проблемы. берем контент в память->останавливаем блины->работаем в памяти->в конце работы заводим блины и синкаемся с диском.

и никаких костылей.


Ни х?я себе «никаких костылей»

anotheranonymous
()
Ответ на: комментарий от isden

берем контент в память->останавливаем блины->работаем в памяти->в конце работы заводим блины и синкаемся с диском

Почти так и есть. Запускаем нужные программы, открываем в них нужные файлы. Активируем мой костыль. Диск останавливаются. pdflush и reiserfs/0 сразу же уходят в D-sleep. Потом к ним присоединяются некоторые другие программы, которые в это время что-то хотели поделать своё. Мы же просто используем нашу заранее запущенную программу. Если нужно что-то ещё, то нажатие на кнопку - режим отключается - программы отвисают - используем систему дальше по-нормальному.

vi0
() автор топика
Ответ на: комментарий от vi0

s/Диск останавливаются/Диск останавливается/;

vi0
() автор топика
Ответ на: комментарий от Boy_from_Jungle

Ты это используешь когда ноут работает от сети?!

Да. Основная цель - чтобы не шумело. Экономии в этом немного, я измерял. (Процессор не поддерживает замедление работы для экономии - включая/отключая Wi-Fi, звуковую карты, Ethernet, жёсткий диск, DVD-ROM можно изменить энергопотребление незначительно (субъективно процентов на 20). Значительно - меняя нагрузку на процессор и подсветку).

vi0
() автор топика

А что если для выключения сего замечательного режима системе потребуется сходить на диск? ;)

const86 ★★★★★
()
Ответ на: комментарий от Pavval

По моему глупость.

Ожидается более развёрнутый ответ. Возможно, глупостью это кажется потому что это похоже на попытку использовать ноутбук как нетбук/PDA. Но у меня нет нетбука или PDA, поэтому нужно выкручиваться. Варианты моего использования ноутбука простираются от для задач для мобильных устройств до задач для настольных компьютеров (а иногда ещё использую всесто Wi-Fi-точки доступа)

И да, купи винт потише.

купи

1. В этом месте следовало бы сказать какие из них потише. Жесткий диск в моём ноутбуке (ST9120822AS) вроде довольно обычный, так что потише это нужно специально искать.

2. Новый жёсткий диск - идея, конечно, здравая (старый жёсткий диск уже не новичок, плюс его можно будет использовать вместо DVD-шек для резервных копий), но покупать что-либо я пока не планирую.

vi0
() автор топика
Ответ на: комментарий от const86

То, чему потребуется, зависнет (в Uninterruptible Sleep). Главное следить чтобы не зависла сама кнопка выключения моего режима - в этом случае FAIL - нужно перезагружаться.

Когда режим выключаешь, всё отвисает.

vi0
() автор топика
Ответ на: комментарий от vi0

>Ожидается более развёрнутый ответ.

1. Сайд-эффекты от длительной заморозки приложений.
2. Уменьшает срок службы винта.
3. Всякие там логи и т.д. хотелось бы, чтобы писались без задержек.

Pavval ★★★★★
()
Ответ на: комментарий от Boy_from_Jungle

Если будешь, бери SSD :)

Prohibitive cost. Стоит как пол-ноута. Это всё не очень близкое будущее.

Скорее всего покупаться жёсткий диск будет когда этот сломается/начнёт ломаться. (Хотя, может и вправду лучше не дожидаться беды, а подготовиться заранее...)

Но это всё напрямую не имеет отношения к теме. Есть ли какие-нибудь комментарии по реализации hung-iosched или sync-enable?

vi0
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.