Puncte:0

Înțelegerea relației buff/cache și tmpfs pe un sistem de fișiere numai în citire fără schimb

drapel ru

Avem o eroare cu adevărat ciudată în care un sistem de operare Yocto care rulează pe un Raspberry Pi se va „bloca” din cauza așteptării I/-urilor pe disc.

Scenariu:

  • sistemul de operare rulează numai în citire și nu are swap
  • există un sistem de fișiere tmpfs pentru lucrurile în care sistemul de operare trebuie să scrie (/var, /log etc)
  • tmpfs are implicit jumătate din cei 2 GB de RAM disponibile
  • există un hard disk USB conectat pentru stocarea fișierelor MP4 mari

După un timp de rulare a unui program Python care interacționează cu un accelerator USB Google Coral, ieșirea de top este:

ieșirea comenzii de sus

Deci, sarcina procesorului este masivă, dar utilizarea procesorului este scăzută. Credem că acest lucru se datorează faptului că așteaptă IO pe hard disk-ul USB.

Alteori vom vedea o utilizare și mai mare a memoriei cache:

Mem: 1622744K folosit, 289184K gratuit, 93712K shrd, 32848K buff, 1158916K în cache
CPU: 0% usr 0% sys 0% nic 24% inactiv 74% io 0% irq 0% sirq
Medie de încărcare: 5,00 4,98 4,27 1/251 2645

Sistemul de fișiere arată destul de normal:

root@ifu-14:~# df -h
Dimensiunea sistemului de fișiere Utilizat Disponibil Utilizare% Montat pe
/dev/root 3.1G 528.1M 2.4G 18% /
devtmpfs 804,6M 4,0K 804,6M 0% /dev
tmpfs 933,6M 80,0K 933,5M 0% /dev/shm
tmpfs 933,6M 48,6M 884,9M 5% /run
tmpfs 933,6M 0 933,6M 0% /sys/fs/cgroup
tmpfs 933,6M 48,6M 884,9M 5% /etc/machine-id
tmpfs 933,6M 1,5M 932,0M 0% /tmp
tmpfs 933,6M 41,3M 892,3M 4% /var/volatil
tmpfs 933,6M 41,3M 892,3M 4% /var/spool
tmpfs 933,6M 41,3M 892,3M 4% /var/lib
tmpfs 933,6M 41,3M 892,3M 4% /var/cache
/dev/mmcblk0p1 39,9M 28,0M 11,9M 70% /uboot
/dev/mmcblk0p4 968,3M 3,3M 899,0M 0% /data
/dev/mmcblk0p4 968,3M 3,3M 899,0M 0% /etc/hostname
/dev/mmcblk0p4 968,3M 3,3M 899,0M 0% /etc/NetworkManager
/dev/sda1 915.9G 30.9G 838.4G 4% /mnt/sda1

Când totul „se blochează”, observăm că hard disk-ul USB nu răspunde complet (ls nu face nimic și doar îngheață).

În jurnalele dmesg am observat următoarele rânduri (lipite ca imagine pentru a păstra culorile):

ieșire dmesg

Iată o ieșire completă a dmesg după ce începem să primim aceste erori: https://pastebin.com/W7k4cp35

Presupunem că, atunci când software-ul care rulează pe sistem încearcă să facă ceva cu un fișier mare (50 MB +) (mutându-l pe hard disk-ul USB), cumva sistemul rămâne fără memorie.

Nu suntem cu adevărat siguri cum procedăm. Am gasit acest blog: https://www.blackmoreops.com/2014/09/22/linux-kernel-panic-issue-fix-hung_task_timeout_secs-blocked-120-seconds-problem/ care pare a fi aceeași problemă și sugerează modificarea vm.dirty_ratio și vm.dirty_background_ratio pentru a goli mai des cache-urile pe disc.

Este aceasta abordarea corectă?

Setările curente sunt vm.dirty_ratio = 20 și vm.dirty_background_ratio = 10

Ar putea un hard disk USB relativ lent să necesite schimbarea asta? Poate cineva să explice ce se întâmplă?

Puncte:3
drapel cn
[sda] tag#0 time out command, waited 180s
blkupdate_request: eroare I/O, dev sda1
INFORMAȚII: sarcina jbd2/sda1 blocată mai mult de 122 de secunde.

Blocarea dispozitivului /dev/sda eșuează. Înlocuiți-l și restaurați datele.

Avertismentele de blocare a sarcinilor Linux sunt atunci când o sarcină nu progresează pentru un cuplu minute. Ceea ce este o eternitate pentru un computer, chiar și pentru un sistem de stocare. Probleme I/O care declanșează acest lucru nu este normal. Fie stocarea eșuează, fie există o cantitate ridicolă de dispute, fie ceva este foarte înfometat de resurse. Deoarece celelalte mesaje conțin dovezi de eroare I/O, primul pare probabil.

Dacă spațiul de stocare a fost deja înlocuit, este posibil ca modelul respectiv să fie lent și să nu fie potrivit pentru această aplicație. Încercați un SSD de înaltă performanță, cum ar fi un NVMe într-un adaptor USB 3 sau similar.

De asemenea, veniți cu teste de încărcare sintetice pentru a exercita stocarea așa cum o face aplicația și pentru a obține câteva cifre de performanță. Scrieri mici aleatorii, lungi secvențiale, poate un amestec. Pe Linux, fio este un tester I/O foarte flexibil.

În cele din urmă, este posibil ca alte componente hardware să se defecteze. Fiind un Raspberry Pi, încercați să înlocuiți totul.

Massimo avatar
drapel ng
În funcție de dimensiune, `/dev/sda1` ar trebui să fie discul USB (pe care întrebarea îl descrie deja înghețarea); fie discul în sine se defectează, fie ceva este în neregulă cu carcasa lui.
drapel ru
Am încercat astăzi trei unități identice noi, dar voi încerca o altă marcă mâine. Ce este atât de ciudat este că problema apare doar atunci când rulăm un program care folosește acceleratorul Google Coral AI și puțin mai multă memorie. Poate o dispută pe magistrala USB? Fără funcționarea Google Coral, nu există probleme.
John Mahowald avatar
drapel cn
Unele defecțiuni apar doar sub sarcină. Continuați să înlocuiți lucruri și să încercați diferite modele de depozitare.
Puncte:1
drapel ru

Ca o actualizare a acestei întrebări, răspunsurile anterioare de aici s-au referit mai mult la bani.

Problema a fost, de fapt, că Raspberry Pi 4 nu a putut furniza suficientă energie de la porturile sale USB pentru a conduce atât hard disk-ul USB, cât și Google Coral în același timp pentru o perioadă prelungită. După un timp, hard disk-ul USB a început să se comporte foarte ciudat, conform jurnalelor de mai sus, ceea ce a făcut să pară că eșuează.

Trecerea la un SSD a făcut ca problema să dispară imediat.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.