Назад | Перейти на главную страницу

Вызов sync / fsync замедляет ввод-вывод после 30 минут безотказной работы

После 30 минут безотказной работы при использовании Ubuntu 14.04 с ext4 гибридный SSD Я вижу, как многие процессы блокируют ввод-вывод с помощью iotop.

Основная причина этого замедления восходит к системному вызову Unix. sync.

Бег sync от терминала повторное использование может занять порядка 1-2 секунд, но ТОЛЬКО после 30 минут безотказной работы.

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

while true;
do
cat /proc/uptime | awk '{printf "%f ",$1}'; /usr/bin/time -f '%e' sync;
sleep 1;
done;

Я запустил приведенный выше сценарий, подождал около часа (система оставалась бездействующей) и построил график результатов в gnuplot (y = время в секундах для выполнения синхронизации, x = время безотказной работы в секундах):

Момент времени, когда график растет, составляет около 1780 (1780/60 = примерно 30 минут).

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

Когда я проверяю cat /proc/meminfo грязная строка (данные в кэше страниц, которые необходимо сохранить на диск?) и строка обратной записи (дисковый буфер HD?) равны нулю. Моя мысль была этим призванием sync сбрасывает эти дисковые кеши, но он все равно зависает, даже когда в этих кешах ничего нет, делает ли он что-то еще?

Эта проблема сохраняется после перезагрузки; например - если я жду 30 минут для замедления, а затем перезагружаюсь, замедление все равно будет. Если я отключаюсь, а затем перезагружаюсь, проблема исчезает через 30 минут.

Еще одно любопытство заключается в том, что когда я изучил приведенный выше график и увеличил масштаб области, где происходит замедление, я получил следующее:

Пики и впадины повторяются - это происходит с интервалом в 10 секунд от впадины к впадине.

Я также провел тесты hdparm (hdparm -t /dev/sda и hdparm -T /dev/sda) до замедления:

/dev/sda:
Timing cached reads:   23778 MB in  2.00 seconds = 11900.64 MB/sec
/dev/sda:
Timing buffered disk reads: 318 MB in  3.01 seconds = 105.63 MB/sec

и во время замедления:

/dev/sda:
 Timing cached reads:     2 MB in  2.24 seconds = 915.50 kB/sec
/dev/sda:
Timing buffered disk reads: 300 MB in  3.01 seconds =  99.54 MB/sec

Показывая, что фактическое чтение с диска не выполняется, но выполняется чтение из кэша, может ли это означать, что это связано с системной шиной, а не с HD?

Вот решения, которые я пробовал:

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

Кэширование записи включено на рассматриваемом диске, я также пробовал отключить барьеры записи. Данные SMART на HD указывают на отсутствие проблем с самим HD, однако я подозреваю, что HD делает что-то загадочное, поскольку сохраняется после перезагрузки.

Это было вызвано Данные SMART включен для рассматриваемого диска.

Отключение данных SMART решило эту проблему:

sudo smartctl --smart=off /dev/sda

Интересно, что повторное включение данных SMART для диска не приводит к возврату проблемы, что говорит мне о том, что SMART находился в несогласованном состоянии (возможный сбой во время выполнения самотестирования?), И его выключение, а затем повторное включение сбрасывают это состояние.

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

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

Эта проблема сохраняется после перезагрузки; например - если я жду 30 минут для замедления, а затем перезагружаюсь, замедление все равно будет. Если я отключаюсь, а затем перезагружаюсь, проблема исчезает через 30 минут.

Это указывает на наличие ошибки прошивки самого SSD, которая появляется через 30 минут после включения.