Identifikujemo procese sa diskovnom aktivnošću u Linuxu

TL;DR: Ta članek opisuje enostaven, hitri in zanesljiv način za določitev Linux programov, ki zapisujejo podatke na disk, kar pomaga pri ugotavljanju velike ali nenormalno pogoste obremenitve diskovne podmene, poleg tega pa omogoča oceno stroškov datotečnega sistema. To je še posebej pomembno za SSD v računalnikih, EMMC in Flash pomnilnik v enotnih računalnikih.
Med pisanjem članka se je izkazalo, da zapis več kilobajtov podatkov na datotečni sistem BTRFS vodi do zapisa 3 megabajtov dejanskih podatkov na disk.

Uvod

"Oh, neumnost, pomnilniške celice na sodobnih SSD-jih se bodo poškodovale šele po desetletjih običajne uporabe, ni vredno skrbeti, še bolj pa ne premikati swap-a, virtualnih strojev in mape profila brskalnika na HDD" — tipičen odgovor na vprašanje o zanesljivosti trdih diskov z garancijo ≈150 TBW. Če ocenimo, koliko tipična programska oprema lahko zapiše podatkov, se zdi, da je 10-20 GB na dan že velika številka, naj bo maksimalno 40 GB, kam več. Pri takšnih številkah je odgovor povsem razumljiv — potrebnih je 10 let, da dosežemo garantirana števila ponovnih zapisov celic, pri 40 GB zapisanih podatkov dnevno.
Vendar pa že 6 let uporabljam tretji SSD: pri prvem je odpovedal kontroler, drugi pa je začel vsak dan večkrat premikati podatke med celicami, kar je povzročilo 30-sekundne zamude pri obravnavi zapisa.

Po 7 mesecih uporabe novega SSD sem se odločil preveriti količino zapisanih podatkov, kot jih sporoča sam disk preko SMART-a.
19.7 TB.
Skupaj v 7 mesecih sem uporabil 13% od zagotovljenega števila zapisanih podatkov, pri čemer je nastavljen v skladu s priporočili za porazdelitev oddelkov in nastavitev FS, swap skoraj ne uporabljam, diski virtualnih naprav so nameščeni na HDD!
To je nenormalno velika številka, pri takem tempu bo zagotovljen TBW presežen prej kot po 5-letni garancijski dobi diska. Pa tudi moj računalnik ne more zapisati 93 gigabajtov na dan! Potrebno je preveriti, koliko podatkov se napiše na disk v 10 minutah…

Skupaj:
Zapiski čakajo: 24.712, 2.237MiB
Zapiski zaključeni: 25.507, 2.237MiB
Združitve zapisov: 58, 5.472KiB

2.2 GiB, uau!

Določitev količine zapisanih podatkov na diskovno napravo

Če vaša naprava podpira S.M.A.R.T. (SSD, EMMC, nekatere industrijske MicroSD), je treba najprej zahtevati podatke iz pomnilnika z programi smartctl, skdump ili mmc (iz kompleta mmc-utils).

Primer izhoda programa smartctl

$ sudo smartctl -a /dev/sdb
smartctl 7.0 2019-03-31 r4903 [x86_64-linux-5.3.11-200.fc30.x86_64] (lokalna gradnja)
Copyright (C) 2002-18, Bruce Allen, Christian Franke, www.smartmontools.org

=== POČETAK SEKCIJE INFORMACIJA ===
Porodično ime modela:     SSD-ovi bazirani na Samsungu
Model uređaja:          Samsung SSD 860 EVO mSATA 250GB
Serijski broj:          S41MNC0KA13477K
LU WWN Identifikacija uređaja: 5 002538 e700fa64b
Verzija firmvera:       RVT41B6Q
Kapacitet korisnika:    250 059 350 016 bajtova [250 GB]
Veličina sektora:       512 bajtova logički/fizički
Brzina rotacije:       Solid State Device
Oblik faktora:         mSATA
Uređaj je:             U smartctl bazi podataka [za više detalja koristite: -P show]
ATA verzija je:        ACS-4 T13/BSR INCITS 529 revizija 5
SATA verzija je:       SATA 3.1, 6.0 Gb/s (trenutno: 3.0 Gb/s)
Lokalno vreme je:      Uto Nov 19 01:48:50 2019 MSK
SMART podrška je:      Dostupna - uređaj ima SMART mogućnost.
SMART podrška je:      Aktivna

=== POČETAK SEKCIJE READ SMART PODATAKA ===
SMART rezultat samo-procene ukupnog zdravlja: PROŠAO

Opšte SMART vrednosti:
Status offline prikupljanja podataka:  (0x00) Aktivnost offline prikupljanja podataka
                                        nikada nije započeta.
                                        Auto offline prikupljanje podataka: Onemogućeno.
Status izvršenja samo-provere:        (   0) Prethodni rutinski samo-test je
                                        završen bez greške ili nijedan samo-test
                                        nikada nije pokrenut.
Ukupno vreme za završetak
offline prikupljanja podataka:       (    0) sekundi.
Offline prikupljanje
mogućnosti:                     (0x53) SMART izvršava Offline odmah.
                                        Auto offline prikupljanje podataka uključeno/isključeno.
                                        Obustavi offline prikupljanje na novu
                                        komandu.
                                        Nema offline skeniranja površine podržano.
                                        Samo-test podržan.
                                        Nema podržanog samoprocenjivanja u transportu.
                                        Selektivno samo-testiranje podržano.
SMART mogućnosti:              (0x0003) Čuva SMART podatke pre ulaska
                                        u režim uštede energije.
                                        Podržava SMART automatsko čuvanje tajmera.
Mogućnost beleženja grešaka:      (0x01) Podržano beleženje grešaka.
                                        Opšte svrhe beleženja podržano.
Preporučeno vreme za kratki samo-test
anketiranja:                 (   2) minuta.
Preporučeno vreme za prošireni samo-test
anketiranja:                 (  85) minuta.
SCT mogućnosti:                (0x003d) SCT Status podržan.
                                        SCT Kontrola oporavka grešaka podržana.
                                        SCT Kontrola mogućnosti podržana.
                                        SCT Tabela podataka podržana.

SMART struktura podataka atributa verzija broj: 1
Proizvođački specifični SMART atributi sa pragovima:
ID# NAZIV_ATRIBUTA       FLAG     VREDNOST NAJGORI PRAG TIP      AŽURIRANO  KADA_FAIL RAW_VREDNOST
  5 Broj_relokacija_sektora  0x0033   100   100   010    Pre-fail  Uvek       -       0
  9 Satovi_u_radu          0x0032   098   098   000    Staro   Uvek       -       5171
 12 Broj_pali_ciklusa      0x0032   099   099   000    Staro   Uvek       -       459
177 Broj_nivoa_trošenja  0x0013   096   096   000    Pre-fail  Uvek       -       62
179 Ukupni_količnik_zauzetih_blk   0x0013   100   100   010    Pre-fail  Uvek       -       0
181 Ukupni_brojevi_pogrešnih_programa  0x0032   100   100   010    Staro   Uvek       -       0
182 Ukupni_brojevi_gresaka_brisa 0x0032   100   100   010    Staro   Uvek       -       0
183 Broj_loših_bloca_u_radu  0x0013   100   100   010    Pre-fail  Uvek       -       0
187 Broj_neispravnih_grešaka 0x0032   100   100   000    Staro   Uvek       -       0
190 Temperatura_zraka_Cel  0x0032   058   039   000    Staro   Uvek       -       42
195 Stopa_ECC_greške       0x001a   200   200   000    Staro   Uvek       -       0
199 Broj_CRC_greškа        0x003e   100   100   000    Staro   Uvek       -       0
235 Broj_oporavka_POR     0x0012   099   099   000    Staro   Uvek       -       29
241 Ukupno_LBAs_napisano   0x0032   099   099   000    Staro   Uvek       -       38615215765

SMART verzija loga grešaka: 1
Nema zabeleženih grešaka

SMART struktura loga samo-testiranja verzija broj 1
Nema zabeleženih samo-testova.  [Za pokretanje samo-testova, koristite: smartctl -t]

SMART struktura podataka loga selektivnog samo-testiranja verzija broj 1
 SPAN  MIN_LBA  MAX_LBA  STATUS_TRENUTNOG_TESTA
    1        0        0  Nije_testa
    2        0        0  Nije_testa
    3        0        0  Nije_testa
    4        0        0  Nije_testa
    5        0        0  Nije_testa
Zastave selektivnog samo-testiranja (0x0):
  Nakon skeniranja odabranih segmenata, NE čitajte ostatak diska.
Ako je selektivni samo-test na čekanju prilikom pokretanja, ponovo započnite nakon 0 minuta kašnjenja.

Moja SSD shranjuje količino zapisanih podatkov v parametru 241 Total_LBAs_Written, v logičnih blokih (LBA), in ne v bajtih. Velikost logičnega bloka v mojem primeru je 512 bajtov (to lahko vidite v izhodu smartctl, v Sector Size). Da dobimo bajte, je treba vrednost parametra pomnožiti s 512.

38615215765 × 512 ÷ 1000 ÷ 1000 ÷ 1000 ÷ 1000 = 19,770 TB
38615215765 × 512 ÷ 1024 ÷ 1024 ÷ 1024 ÷ 1024 = 17,981 TiB

Program skdump na mojem SSD-ju poskuša interpretirati vrednost Total_LBAs_Written na svoj način, zaradi česar izpisuje 1296217.695 TB, kar je očitno napačno.

Da bi izvedeli količino zapisane informacije na ravni naprave, uporabimo program btrace iz sestavine paketa blktrace. Prikazuje tako splošno statistiko za celotno trajanje delovanja programa kot tudi posamezne procese in niti (vključno z jedrom), ki so izvajale zapisovanje.

Zaženi naslednji ukaz, da zbereš informacije v 10 minutah, kjer /dev/sdb — tvoj disk:

# btrace -w 600 -a write /dev/sdb

Tipičen izpis ukaza

…
  8,16   0     3253    50.085433192     0  C  WS 125424240 + 64 [0]
  8,16   0     3254    50.085550024     0  C  WS 193577744 + 64 [0]
  8,16   0     3255    50.085685165     0  C  WS 197246976 + 64 [0]
  8,16   0     3256    50.085936852     0  C  WS 125736264 + 128 [0]
  8,16   0     3257    50.086060780     0  C  WS 96261752 + 64 [0]
  8,16   0     3258    50.086195031     0  C  WS 94948640 + 64 [0]
  8,16   0     3259    50.086327355     0  C  WS 124656144 + 64 [0]
  8,16   0     3260    50.086843733 15368  C WSM 310218496 + 32 [0]
  8,16   0     3261    50.086975238   753  A WSM 310218368 + 32 <-(8,20) 291339904
  8,16   0     3262    50.086975560   753  Q WSM 310218368 + 32 [dmcrypt_write/2]
  8,16   0     3263    50.086977345   753  G WSM 310218368 + 32 [dmcrypt_write/2]
  8,16   0     3264    50.086978072   753  I WSM 310218368 + 32 [dmcrypt_write/2]
  8,16   0     3265    50.086979159   753  D WSM 310218368 + 32 [dmcrypt_write/2]
  8,16   0     3266    50.087055685     0  C WSM 310218368 + 32 [0]
  8,16   0     3267    50.087060168   753  A WSM 310218592 + 160 <-(8,20) 291340128
  8,16   0     3268    50.087060367   753  Q WSM 310218592 + 160 [dmcrypt_write/2]
  8,16   0     3269    50.087061242   753  G WSM 310218592 + 160 [dmcrypt_write/2]
  8,16   0     3270    50.087061698   753  I WSM 310218592 + 160 [dmcrypt_write/2]
  8,16   0     3271    50.087062361   753  D WSM 310218592 + 160 [dmcrypt_write/2]
  8,16   0     3272    50.087386179     0  C WSM 310218592 + 160 [0]
  8,16   0     3273    50.087436417 15368  A FWS 0 + 0 <-(253,1) 0
  8,16   0     3274    50.087437471 15368  Q FWS [LS Thread]
  8,16   0     3275    50.087440862 15368  G FWS [LS Thread]
  8,16   0     3276    50.088300047     0  C  WS 0 [0]
  8,16   0     3277    50.088470917   753  A WFSM 18882688 + 8 <-(8,20) 4224
  8,16   0     3278    50.088471091   753  Q WFSM 18882688 + 8 [dmcrypt_write/2]
  8,16   0     3279    50.088471688   753  G WFSM 18882688 + 8 [dmcrypt_write/2]
  8,16   0     3280    50.088474334 32254  D WSM 18882688 + 8 [kworker/0:2H]
  8,16   0     3281    50.088515572     0  C WSM 18882688 + 8 [0]
  8,16   0     3282    50.089229069     0  C WSM 18882688 [0]
CPU0 (8,16):
 Reads Queued:           0,        0KiB  Writes Queued:         345,   25,932KiB
 Read Dispatches:        0,        0KiB  Write Dispatches:      331,   25,788KiB
 Reads Requeued:         0               Writes Requeued:         0
 Reads Completed:        0,        0KiB  Writes Completed:    1,597,  117,112KiB
 Read Merges:            0,        0KiB  Write Merges:            1,       16KiB
 Read depth:             0               Write depth:           177
 IO unplugs:             0               Timer unplugs:           0
CPU1 (8,16):
 Reads Queued:           0,        0KiB  Writes Queued:         502,   39,948KiB
 Read Dispatches:        0,        0KiB  Write Dispatches:      495,   40,076KiB
 Reads Requeued:         0               Writes Requeued:         0
 Reads Completed:        0,        0KiB  Writes Completed:        0,        0KiB
 Read Merges:            0,        0KiB  Write Merges:            0,        0KiB
 Read depth:             0               Write depth:           177
 IO unplugs:             0               Timer unplugs:           0
CPU2 (8,16):
 Reads Queued:           0,        0KiB  Writes Queued:         297,   26,800KiB
 Read Dispatches:        0,        0KiB  Write Dispatches:      287,   26,800KiB
 Reads Requeued:         0               Writes Requeued:         0
 Reads Completed:        0,        0KiB  Writes Completed:        0,        0KiB
 Read Merges:            0,        0KiB  Write Merges:            0,        0KiB
 Read depth:             0               Write depth:           177
 IO unplugs:             0               Timer unplugs:           0
CPU3 (8,16):
 Reads Queued:           0,        0KiB  Writes Queued:         418,   24,432KiB
 Read Dispatches:        0,        0KiB  Write Dispatches:      408,   24,448KiB
 Reads Requeued:         0               Writes Requeued:         0
 Reads Completed:        0,        0KiB  Writes Completed:        0,        0KiB
 Read Merges:            0,        0KiB  Write Merges:            2,      272KiB
 Read depth:             0               Write depth:           177
 IO unplugs:             0               Timer unplugs:           0

Total (8,16):
 Reads Queued:           0,        0KiB  Writes Queued:       1,562,  117,112KiB
 Read Dispatches:        0,        0KiB  Write Dispatches:    1,521,  117,112KiB
 Reads Requeued:         0               Writes Requeued:         0
 Reads Completed:        0,        0KiB  Writes Completed:    1,597,  117,112KiB
 Read Merges:            0,        0KiB  Write Merges:            3,      288KiB
 IO unplugs:             0               Timer unplugs:           0

Throughput (R/W): 0KiB/s / 2,338KiB/s
Events (8,16): 9,287 entries
Skips: 0 forward (0 -   0.0%)

btrace omogoča jasno ogledati dejansko količino zabeleženih podatkov, vendar je težko razumeti, katere točno programe izvajajo zapis iz njenega izhoda.

Določanje programov, ki izvajajo zapis na snemalnik

Program iotop bo prikazal procese, ki pišejo na disk, in velikost zabeleženih podatkov.
Najbolj priročen izhod zagotavljajo naslednji parametri:

# iotop -obPat

Primer izhoda programa

02:55:47 Skupno PREBERITE DISK:       0,00 B/s | Skupno ZAPIŠITE DISK:      30,65 K/s
02:55:47 Dejanski PREBERITE DISK:       0,00 B/s | Dejanski ZAPIŠITE DISK:       0,00 B/s
    ČAS  PID  PRIO  UPORABNIK     PREBERITE DISK  ZAPIŠITE DISK  SWAPIN      IO    KOMANDA
b'02:55:47   753 be/4 root          0.00 B      0.00 B  0.00 %  0.04 % [dmcrypt_write/2]'
b'02:55:47   788 be/4 root         72.00 K     18.27 M  0.00 %  0.02 % [btrfs-transacti]'
b'02:55:47 15057 be/4 valdikss    216.00 K    283.05 M  0.00 %  0.01 % firefox'
b'02:55:47  1588 ?dif root          0.00 B      0.00 B  0.00 %  0.00 % Xorg -nolisten tcp -auth /var/run/sddm/{398f030f-9667-4dff-b371-81eaae48dfdf} -background none -noreset -displayfd 18 -seat seat0 vt1'
b'02:55:47 15692 be/4 valdikss    988.00 K      9.41 M  0.00 %  0.00 % python3 /usr/bin/gajim'
b'02:55:47 15730 ?dif valdikss      9.07 M      0.00 B  0.00 %  0.00 % telegram-desktop --'
b'02:55:47  2174 ?dif valdikss   1840.00 K      2.47 M  0.00 %  0.00 % yakuake'
b'02:55:47 19827 be/4 root         16.00 K    896.00 K  0.00 %  0.00 % [kworker/u16:7-events_unbound]'
b'02:55:47 19074 be/4 root         16.00 K    480.00 K  0.00 %  0.00 % [kworker/u16:4-btrfs-endio-write]'
b'02:55:47 19006 be/4 root         16.00 K   1872.00 K  0.00 %  0.00 % [kworker/u16:1-events_unbound]'
b'02:55:47  1429 be/4 root        484.00 K      0.00 B  0.00 %  0.00 % accounts-daemon'
b'02:55:47 15820 be/4 valdikss    312.00 K      0.00 B  0.00 %  0.00 % firefox -contentproc -childID 6 -isForBrowser -prefsLen 7894 -prefMapSize 223880 -parentBuildID 20191022164834 -greomni /usr/lib64/firefox/omni.ja -appomni /usr/lib64/firefox/browser/omni.ja -appdir /usr/lib64/firefox/browser 15057 tab'
b'02:55:47  2125 ?dif valdikss      0.00 B     92.00 K  0.00 %  0.00 % plasmashell'
b'02:55:47  1268 be/3 root          0.00 B      4.00 K  0.00 %  0.00 % auditd'
b'02:55:47  1414 be/4 root          0.00 B      4.00 K  0.00 % sssd_nss --uid 0 --gid 0 --logger=files'
b'02:55:47 15238 be/4 valdikss      0.00 B      4.00 K  0.00 %  0.00 % thunderbird'
b'02:55:47 18605 be/4 root          0.00 B      3.19 M  0.00 %  0.00 % [kworker/u16:0-btrfs-endio-write]'
b'02:55:47 18867 be/4 root          0.00 B     96.00 K  0.00 %  0.00 % [kworker/u16:5-btrfs-endio-meta]'
b'02:55:47 19070 be/4 root          0.00 B    160.00 K  0.00 %  0.00 % [kworker/u16:2-btrfs-freespace-write]'
b'02:55:47 19645 be/4 root          0.00 B      2.17 M  0.00 %  0.00 % [kworker/u16:3-events_unbound]'
b'02:55:47 19982 be/4 root          0.00 B    496.00 K  0.00 %  0.00 % [kworker/u16:6-btrfs-endio-write]'

Oči bode Firefox, ki je zabeležil 283 megabajtov v nekaj minutah delovanja iotop.

Določanje datotek, v katere poteka zapis

Informacija o procesu, ki obremenjuje disk — to je dobro, toda poti, po katerih poteka zapis — še boljše.

Uporabimo program fatrace, ki spremlja spremembe v datotečnem sistemu.

# fatrace -f W

Primer izhoda programa

firefox(15057): CW /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/moz-extension+++e5c304fb-af40-498a-9ba8-47eb0416e933^userContextId=4294967295/idb/3647222921wleabcEoxlt-eengsairo.sqlite-wal
firefox(15057): CW /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/moz-extension+++e5c304fb-af40-498a-9ba8-47eb0416e933^userContextId=4294967295/idb/3647222921wleabcEoxlt-eengsairo.sqlite
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/https+++habr.com/ls/data.sqlite-journal
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/https+++habr.com/ls/data.sqlite-journal
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/https+++habr.com/ls/data.sqlite-journal
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/https+++habr.com/ls/data.sqlite-journal
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/https+++habr.com/ls/data.sqlite-journal
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/https+++habr.com/ls/data.sqlite-journal
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/https+++habr.com/ls/data.sqlite-journal
firefox(15057): CW /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/https+++habr.com/ls/usage-journal
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/https+++habr.com/ls/usage
firefox(15057): CW /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/https+++habr.com/ls/usage
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/https+++habr.com/ls/data.sqlite-journal
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/https+++habr.com/ls/data.sqlite
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/https+++habr.com/ls/data.sqlite
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/https+++habr.com/ls/data.sqlite
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/webappsstore.sqlite-wal
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/webappsstore.sqlite-wal
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/webappsstore.sqlite-wal
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/webappsstore.sqlite-wal
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/webappsstore.sqlite-wal
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/webappsstore.sqlite-wal
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/webappsstore.sqlite-wal
firefox(15057): CW /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/https+++habr.com/ls/data.sqlite-journal
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/webappsstore.sqlite
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/webappsstore.sqlite
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/webappsstore.sqlite

Fatrace ne zna pokazati količino zapisanih podatkov zaradi preprostega sledenja dostopu do datotek preko inotify.

Iz izpisa je razvidno, kako Habr shranjuje moj članek v local storage brskalnika, medtem ko ga pišem, ter razširitev Group Speed Dial, ki, kot se je pokazalo s pomočjo fatrace, bere svoje podatke vsakih 30 sekund. Bere, ne pa da zapisuje: CW Pred zapisom datoteke se povečuje, da se datoteka odpira za branje in pisanje, pri čemer se hkrati ustvari datoteka, če le-ta ne obstaja (klic openat s zastavama O_RDWR|O_CREAT), vendar ne pove, ali so bile v datoteko dejansko zapisane kakšne informacije.

Za vsak slučaj, da bi se prepričali, bomo uporabili strace, s filtrom za sistemske klice datotek:

strace -yy -e trace=open,openat,close,write -f -p 15057 2>1 | grep extension

Izlaz komande

[pid 20352] openat(AT_FDCWD, "/home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/moz-extension+++e5c304fb-af40-498a-9ba8-47eb0416e933^userContextId=4294967295/idb/3647222921wleabcEoxlt-eengsairo.sqlite", O_RDWR|O_CREAT|O_CLOEXEC, 0644) = 153
[pid 20352] read(153, "SQLite format 3 20 22 @   d 23"..., 100) = 100
[pid 20352] read(153, "SQLite format 3 20 22 @   d 23"..., 4096) = 4096
[pid 20352] openat(AT_FDCWD, "/home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/moz-extension+++e5c304fb-af40-498a-9ba8-47eb0416e933^userContextId=4294967295/idb/3647222921wleabcEoxlt-eengsairo.sqlite-wal", O_RDWR|O_CREAT|O_CLOEXEC, 0644) = 166
…
[pid 20352] read(54, " r4304364354354364-  4204!4'414" 250 &"..., 4096) = 4096
[pid 20352] read(54, " 136Pt2262504 O24532016:"16.27 r245306>2461t1q370"..., 4096) = 4096
[pid 20352] close(77) = 0
[pid 20352] close(54) = 0

Ni nobenega klica write(), kar kaže na odsotnost zapisov v datoteko.

Določitev stroškov datotečnega sistema

Velika razlika v izmerah iotop in btrace me je spodbudila, da preizkusim datotečni sistem z ročnim zapisovanjem podatkov v datoteko in spremljanjem izmer btrace.

Če popolnoma izključim zapis na disk, ko se naložim v nujni način systemd, in ročno zapišem nekaj bajtov podatkov v obstoječo datoteko, btrace na SSD-ju z btrfs poroča o zapisu 3 megabajte Praktični podaci. Novo stvoreni fajl sistem na USB sticku od 8 GB minimalno zapisuje 264 KiB prilikom zapisivanja jednog bajta.
Za upoređivanje, zapis dva bajta u fajl na ext4 završava se zapisom od 24 kilobajta podataka na disk.

U 2017. godini, Jayashree Mohan, Rohan Kadekodi i Vijay Chidambaram sproveo je istraživanje o poboljšanju zapisivanja različitih fajl sistema, čiji su rezultati za btrfs i ext4 prilikom zapisivanja od 4 KB srodni mojim.

Identifikujemo procese sa diskovnom aktivnošću u Linuxu

Zaključak i preporuka

Kroz opisane manipulacije, otkriveno je:

  1. Česta beleženja stanja zadataka za štampač demonskim programom za štampanje CUPS u /var/predpomnilnik/cups каждую минуту. Проблема устранена очисткой /var/spool/cups (хотя никаких заданий печати не было);
  2. Fakt čitanja baze podataka svake 30 sekundi putem ekstenzije Group Speed Dial za Firefox;
  3. Periodično zapisivanje logova raznim servisima za praćenje performansi u Fedori, što je dovodilo do zapisivanja nekoliko megabajta podataka na btrfs: pmcd.service, pmie.service, pmlogger.service;
  4. Ogromna amplifikacija prilikom zapisivanja malog broja podataka prilikom korišćenja btrfs.

Zaključak: ne preporučuje se korišćenje btrfs ako programi često beleže male količine podataka (nekoliko kilobajta), inače će to rezultirati megabajtima zapisanih podataka. Ovo je posebno važno za jednoplošne računare sa OS na MicroSD.

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster