LINUX.ORG.RU

Забивается I/O SD карты?

 , , ,


0

4

Или что происходит. Фыр.

Имею распберри пай с установленным на ней сервером mysql. Он иногда пишет, иногда много пишет. Иногда после небольшой по объёму, но, вероятно, существенной по количеству записей, нагрузки всё начинает люто лагать со следующими проявлениями:

  • какое-то время всё работает неплохо, если пальцем в небо, то за час успевают просчитаться миллиона полтора апдейтов
  • всё начинает тормозить, SQL замедляется до пары запросов в секунду, простейшие команды запускаются по 5-10 секунд
  • load average околонулевой
  • своп не используется, памяти available 250M
  • судя по профилировщику, мой софт висит на файловом вводе/выводе, запись полутора букв в лог может залипать на несколько секунд
  • мне нравятся пони
  • dd /dev/null -> tempfile запускается долго, но пишет быстро, в районе 60 метров в секунду

Если прибить софт, использующий SQL, то ситуация не исправляется:

  • processlist СУБД пустой, выполняется только какая-то фоновая работа
  • iotop показывает IO mysqld 5%, jbd2 30%, read/write околонулевые
  • через несколько часов простоя затуп завершается, и после этого всё работает нормально

SD установлена Kingston Industrial U1, 16 Гб.

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


Забивается I/O SD карты?

Вероятно.

Посмотри во время тормозов в /proc/meminfo и покажи значения Dirty и Writeback. А лучше поставь netdata и посмотри на одноимённые графики (в разделе Memory → kernel) за период, непосредственно предшествующий тормозам. Ну и на статы ввода-вывода посмотри (либо iostat -x, либо в той же netdata).

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от intelfx

Вероятно

Предположительно, на каком уровне возникает нездоровое? В контроллере карты, непосредственно в обслуживании флеша (очистка блоков не успевает за записью, хз), в sql сервере или в кишках линукса?

Посмотри

Сейчас поставил ноунейм класса A1, посмотрю, изменится ли что-то, к вечеру, если не залипнет, верну обычную и чекну.

Могу выдать meminfo под нагрузкой в рабочем режиме, хз, может, какую-то аномалию увидишь

MemTotal:         947728 kB
MemFree:           28528 kB
MemAvailable:     189212 kB
Buffers:           24056 kB
Cached:           177892 kB
SwapCached:         1704 kB
Active:           471156 kB
Inactive:         402872 kB
Active(anon):     340528 kB
Inactive(anon):   340472 kB
Active(file):     130628 kB
Inactive(file):    62400 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:        102396 kB
SwapFree:          26632 kB
Dirty:               108 kB
Writeback:             0 kB
AnonPages:        670532 kB
Mapped:            23972 kB
Shmem:              8896 kB
Slab:              28076 kB
SReclaimable:      17228 kB
SUnreclaim:        10848 kB
KernelStack:        1704 kB
PageTables:         3596 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      576260 kB
Committed_AS:    1240316 kB
VmallocTotal:    1114112 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
CmaTotal:           8192 kB
CmaFree:            3716 kB

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

MicroSD карты и USB-флешки — очень примитивные устройства. Считается, что у большинства допустимо писать только в два-четыре места относительно одновременно. Если контроллеру нужно писать в новый erase-блок, он «закрывает» какой-нибудь из текущих, что требует записи всего блока в новое место. Поэтому обычная линейная запись файлов даёт неплохие скорости, но вот много случайных записей роняют скорость ниже плинтуса.

Попробуй форк MySQL с внедрённым RocksDB-движком. Этот движок расчитан на SSD, а не microsd-карты, но есть немалый шанс, что он будет работать получше, потому что там заявляется использование log-structured подхода, то есть меньше случайных записей.

i-rinat ★★★★★
()

Есть там такой косяк, полностью не лечится. f2fs лучше кеширует и немного сглаживает. echo 65536 > /proc/sys/vm/min_free_kbytes тоже немного помогает, но не помню каким именно образом.

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

Я хз. Может на каких то так и есть, хотя это было бы очень медленно и расточительно. «умные» контроллеры на быстрых флешках однозначно кешируют и сортируют.

kirill_rrr ★★★★★
()
Ответ на: комментарий от intelfx
Dirty:                80 kB
Writeback:            16 kB


avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          16,13    0,00   11,96    0,62    0,00   71,29

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
mmcblk0           0,04     0,53    0,11    0,54     2,49     6,28    26,75     0,30  457,04   27,95  546,85  78,06   5,12
bo4ok
() автор топика
Последнее исправление: bo4ok (всего исправлений: 1)