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

После 30 минут времени работы с помощью Ubuntu 14.04 с ext4 гибридным SSD я вижу, что много процессов блокируют IO, использующий 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 = время работы в секундах):

slowdown graph

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

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

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

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

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

slowdown graph zoomed

Повторение пиков и канавок - это происходит с промежутками в 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, в конце концов?

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

  • Измените spindown настройки HD (возможно, HD входил в режим экономии электроэнергии?):

    hdparm /dev/sda -S252 #(set it to 5 hours before spindown)
    
  • Измените тип журналирования файловой системы на обратную запись, а не заказанный так, чтобы мы получили повышения производительности - это не решает проблему, хотя, поскольку это не объясняет эти 30 минут время работы без замедления, когда я попробовал это, не было никакого изменения.

  • Отключенный КРОН, поскольку это, кажется, происходит после раунда 30 минуты.

  • Использование ЦП прекрасно и абсолютно неактивно, таким образом, никакие процессы не могут быть обвинены однако, я попытался закрыть каждый сервис включая менеджер сеансов (lightdm), это ничего не делает, поскольку я полагаю, что проблема ниже находится на одном уровне.

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

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

Запишите, что кэширование включено на рассматриваемом диске, я также попытался отключить барьеры записи. УМНЫЕ данные по HD не указывают ни на какие проблемы с самим HD однако, у меня есть свои подозрения, это - HD, делающий что-то таинственное, поскольку это сохраняется после перезагрузок.

6
задан 4 November 2014 в 15:30
2 ответа

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

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

sudo smartctl --smart=off /dev/sda

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

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

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

3
ответ дан 3 December 2019 в 00:32

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

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

2
ответ дан 3 December 2019 в 00:32

Теги

Похожие вопросы