TL;DR: Artikkel räägib mugavast, kiirest ja usaldusväärsest viisist Linuxi programmide tuvastamiseks, mis salvestavad andmeid kettale, mis aitab tuvastada suurt või ebanormaalselt sagedast koormust kettaalale ja võimaldab hinnata failisüsteemi kulusid. See on eriti актуaalne SSD-de puhul arvutites, EMMC ja Flash-mälude puhul ühekandjalistes arvutites.
Artikli kirjutamise käigus selgus, et paarikümne kilobaidi andmete kirjutamine BTRFS failisüsteemi toob endaga kaasa 3 megabaiti reaalseid andmeid, mis salvestatakse kettale.
Sissejuhatus
„Ai, vale jutt, modernaalsete SSD-de mälurakud lagunevad tavakasutuses aastate jooksul, ei ole põhjust muretseda, ja veel vähem kanda swap-i, virtuaalmasinaid ja brauseri profiilikatalooge HDD-le“ — tüüpiline vastus küsimusele SSD-de usaldusväärsuse kohta, millega on tagatud ≈150 TBW. Kui arvutada, kui palju tüüpiline tarkvara võib andmeid kirjutada, siis näib, et 10-20 GB päevas on juba suur number, las olla maksimum 40 GB, kuhu enam. Selliste numbritega on vastus täiesti mõistlik — 10 aastat on vajalik, et saavutada garanteeritud rakenduste üle kirjutamise arv, kui iga päev on kirjutatud 40 GB andmeid.
Siiski olen ma 6 aasta jooksul kasutanud juba kolmandat SSD-d: esimesel lagunes kontroller, ja teisel hakkas andmeid mitme korra päevas rakenduste vahel liigutama, mis viis 30-sekundiliste viivitusteni kirjutamise teenindamisel.
Pärast uue SSD kasutamist 7 kuu jooksul otsustasin kontrollida kirjutatud andmete hulka, nagu seda teatab ketas ise läbi SMART-i.
19.7 TB.
Kokku 7 kuu jooksul olen kasutanud 13% garantiis sätestatud kirjutatud andmete kogusest, kuigi see on seadistatud vastavalt sektsioonide tasakaalustamise ja failisüsteemi seadistamise soovitustele, swap-i kasutan ma peaaegu üldse, kettad virtuaalmasinate asuvad HDD-l!
See on ebaharilikult suur number, selliste tempo korral ületatakse garantiiga TBW enne, kui ketta 5-aastane garantii on saavutatud. Ja mu arvuti ei saa ju kirjutada 93 gigabaidi päevas! Tuleb kontrollida, kui palju andmeid kirjutatakse kettale 10 minuti jooksul…
Kokku:
Kirjutamised järjekorras: 24,712, 2,237MiB
Kirjutamised lõpetatud: 25,507, 2,237MiB
Kirjutamise ühendused: 58, 5,472KiB
2.2 GiB, vau!
Andmete hulga määramine salvestusseadmest
Kui teie seade toetab S.M.A.R.T. (SSD, EMMC, mõned tööstuslikud MicroSD), siis tuleks kõigepealt küsida andmeid seadmest programmidega smartctl, skdump või mmc (mmc-utils komplektist).
Smartctl programmi väljundi näide
$ sudo smartctl -a /dev/sdb
smartctl 7.0 2019-03-31 r4903 [x86_64-linux-5.3.11-200.fc30.x86_64] (local build)
Copyright (C) 2002-18, Bruce Allen, Christian Franke, www.smartmontools.org
=== ALUSTAME TEABE SEKTSIOON ===
Mudeli perekond: Samsungi põhised SSD-d
Seadmestiku mudel: Samsung SSD 860 EVO mSATA 250GB
Seerianumber: S41MNC0KA13477K
LU WWN seadme ID: 5 002538 e700fa64b
Firmware'i versioon: RVT41B6Q
Kasutaja mahutavus: 250 059 350 016 baiti [250 GB]
Sektsioonide suurus: 512 baiti loogilise/füüsilise
Pöörlemiskiirus: Kindel olek
Korpuse tüüp: mSATA
Seade on: smartctl andmebaasis [detailide kasutamiseks: -P show]
ATA versioon on: ACS-4 T13/BSR INCITS 529 revision 5
SATA versioon on: SATA 3.1, 6.0 Gb/s (praegu: 3.0 Gb/s)
Kohalik aeg on: Teisipäev, 19. november 2019 01:48:50 MSK
SMART tugi on: Saadaval - seade omab SMART võimet.
SMART tugi on: Lubatud
=== ALUSTAME SMART ANDME LUGEMISE SEKTSIOONI ===
SMART üldise tervise enesehindamise testitulemus: JÄETUD KANDIDEERIMA
Üldised SMART väärtused:
Offline andmete kogumise staatus: (0x00) Offline andmete kogumise tegevus
ei ole kunagi alustatud.
Automaatne Offline andmete kogumine: Keelatud.
Enese-testimise teostamise staatus: ( 0) Eelmine enese-testimise rutiin
lõpetati
vea või mitte pernahii enese-
testimist ei ole kunagi teostatud.
Kokkuvõtteks aeg Online
data kogumiseks: ( 0) sekundit.
Offline andmete kogumise
võimed: (0x53) SMART teostada Offline kohe.
Automaatne Offline andmete kogumise kaasa/ära tugi.
Suspend Online kogumine uue
käsu korral.
Ei toetata Offline pinnaskannimist.
Enese-testimine toetatud.
Ei toetata edastus enese-testimist.
Valikuline enese-testimine toetatud.
SMART võimed: (0x0003) Salvestab SMART andmeid enne sisenemist
energiasäästu režiimi.
Toetab SMART automaatset salvestusaja.
Veakogumise võime: (0x01) Veakogumine toetatud.
Üldkasutusega logimist toetatud.
Lühike enese-testimise rutiin
soovitatav jälgimisaeg: ( 2) minutit.
Pikendatud enese-testimise rutiin
soovitatav jälgimisaeg: ( 85) minutit.
SCT võimed: (0x003d) SCT olek toetatud.
SCT veakontrolli juhtimine toetatud.
SCT funktsiooni juhtimine toetatud.
SCT andme tabel toetatud.
SMART atribuutide andmestruktuuri versiooni number: 1
Müüja spetsiifilised SMART atribuudid koos künnisväärtustega:
ID# ATRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UUPDATED KUI_VIGA RAW_VALUE
5 Tagasi loetletud sektorite arv 0x0033 100 100 010 Enne rikke Alati - 0
9 Kasutusaeg 0x0032 098 098 000 Vanus Alati - 5171
12 Toite tsüklite arv 0x0032 099 099 000 Vanus Alati - 459
177 Kulumise tasakaalu arv 0x0013 096 096 000 Enne rikke Alati - 62
179 Kasutatud reserveeritud plokkide arvu kogus 0x0013 100 100 010 Enne rikke Alati - 0
181 Programmi vea kogust 0x0032 100 100 010 Vanus Alati - 0
182 Kustutamise vea kogust 0x0032 100 100 010 Vanus Alati - 0
183 Käitusse vigased plokkide arv 0x0013 100 100 010 Enne rikke Alati - 0
187 Parandamatute vigade arv 0x0032 100 100 000 Vanus Alati - 0
190 Õhuvoolu temperatuur Celsiuse järgi 0x0032 058 039 000 Vanus Alati - 42
195 ECC veateenuse määr 0x001a 200 200 000 Vanus Alati - 0
199 CRC viga kogust 0x003e 100 100 000 Vanus Alati - 0
235 POR taastamisarv 0x0012 099 099 000 Vanus Alati - 29
241 Koguväärtus, LBAd kirjutatud 0x0032 099 099 000 Vanus Alati - 38615215765
SMART veakirjeldus Versioon: 1
Ei ole logitud vigu
SMART enese-testimise logistruktuuri revision number 1
Ei ole logitud enese-testimist. [Enese-testimiseks, kasutage: smartctl -t]
SMART valikuline enese-testimise logi andmestruktuuri revision number 1
SPAN MIN_LBA MAX_LBA CURRENT_TEST_STATUS
1 0 0 Ei testita
2 0 0 Ei testita
3 0 0 Ei testita
4 0 0 Ei testita
5 0 0 Ei testita
Valikuline enese-testimise lipud (0x0):
Pärast valitud ulatuste skannimist, EI LUGE skännida ketta ülejäänud osa.
Kui valikuline enese-testimine on ooterežiimis, jätkake pärast 0-minutilist viivitust.Minu SSD salvestab kirjutatud andmete hulga parameetris 241 Total_LBAs_Written loogilistes blokkgades (LBA), mitte baitides. Minu juhul on loogilise bloki suurus 512 baiti (seda saab näha smartctl väljundis, sektorite suuruses). Baitide saamiseks tuleb parameetri väärtus korrutada 512-ga.
38615215765 × 512 ÷ 1000 ÷ 1000 ÷ 1000 ÷ 1000 = 19,770 TB
38615215765 × 512 ÷ 1024 ÷ 1024 ÷ 1024 ÷ 1024 = 17,981 TiBProgramm skdump minu SSD püüab tõlgendada Total_LBAs_Written väärtust omamoodi, mistõttu väljastab ta 1296217.695 TB, mis on ilmselgelt vale.
Kandke andmete kirjutamise hulga määramiseks seadme tasemel kasutusele programm btrace komplektist blktrace'i. See näitab nii kogu statistikat programmi kogu tööaja jooksul kui ka üksikute protsesside ja lõimede (sealhulgas tuumade) kirjutamisprotsesse.
Käitage järgmist käsku, et koguda teavet 10 minuti jooksul, kus /dev/sdb on teie ketas:
# btrace -w 600 -a write /dev/sdbKäsku tüüpiline väljund
…
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):
Ooteidud: 0, 0KiB Kirjutamised Ooteidud: 345, 25,932KiB
Ootevalu: 0, 0KiB Kirjutamised: 331, 25,788KiB
Ooteidud uuesti: 0 Kirjutamised uuesti: 0
Ooteidud lõpetatud: 0, 0KiB Kirjutamised lõpetatud: 1,597, 117,112KiB
Ootepankad: 0, 0KiB Kirjutamised pankade ühendused: 1, 16KiB
Oote sügavus: 0 Kirjutamiste sügavus: 177
IO lahtiühendamine: 0 Ajastuse lahtiühendamine: 0
CPU1 (8,16):
Ooteidud: 0, 0KiB Kirjutamised Ooteidud: 502, 39,948KiB
Ootevalu: 0, 0KiB Kirjutamised: 495, 40,076KiB
Ooteidud uuesti: 0 Kirjutamised uuesti: 0
Ooteidud lõpetatud: 0, 0KiB Kirjutamised lõpetatud: 0, 0KiB
Ootepankad: 0, 0KiB Kirjutamised pankade ühendused: 0, 0KiB
Oote sügavus: 0 Kirjutamiste sügavus: 177
IO lahtiühendamine: 0 Ajastuse lahtiühendamine: 0
CPU2 (8,16):
Ooteidud: 0, 0KiB Kirjutamised Ooteidud: 297, 26,800KiB
Ootevalu: 0, 0KiB Kirjutamised: 287, 26,800KiB
Ooteidud uuesti: 0 Kirjutamised uuesti: 0
Ooteidud lõpetatud: 0, 0KiB Kirjutamised lõpetatud: 0, 0KiB
Ootepankad: 0, 0KiB Kirjutamised pankade ühendused: 0, 0KiB
Oote sügavus: 0 Kirjutamiste sügavus: 177
IO lahtiühendamine: 0 Ajastuse lahtiühendamine: 0
CPU3 (8,16):
Ooteidud: 0, 0KiB Kirjutamised Ooteidud: 418, 24,432KiB
Ootevalu: 0, 0KiB Kirjutamised: 408, 24,448KiB
Ooteidud uuesti: 0 Kirjutamised uuesti: 0
Ooteidud lõpetatud: 0, 0KiB Kirjutamised lõpetatud: 0, 0KiB
Ootepankad: 0, 0KiB Kirjutamised pankade ühendused: 2, 272KiB
Oote sügavus: 0 Kirjutamiste sügavus: 177
IO lahtiühendamine: 0 Ajastuse lahtiühendamine: 0
Kokku (8,16):
Ooteidud: 0, 0KiB Kirjutamised Ooteidud: 1,562, 117,112KiB
Ootevalu: 0, 0KiB Kirjutamised: 1,521, 117,112KiB
Ooteidud uuesti: 0 Kirjutamised uuesti: 0
Ooteidud lõpetatud: 0, 0KiB Kirjutamised lõpetatud: 1,597, 117,112KiB
Ootepankad: 0, 0KiB Kirjutamised pankade ühendused: 3, 288KiB
IO lahtiühendamine: 0 Ajastuse lahtiühendamine: 0
Läbilöök (R/W): 0KiB/s / 2,338KiB/s
Sündmused (8,16): 9,287 sissekannet
Vahelejätud: 0 edasi (0 - 0.0%) btrace näitab selgelt salvestatud andmete tegelikku hulka, kuid on keeruline aru saada, millised programmid salvestavad, selle väljundi põhjal.
Programmide määramine, mis kirjutavad salvestusse
Programm iotop näitab protsesse, mis kirjutavad ketta peale, ja salvestatud andmete mahtu.
Kõige mugavamat väljundit tagavad järgmised parameetrid:
# iotop -obPatProgrammi väljundi näide
02:55:47 Total DISK READ : 0.00 B/s | Total DISK WRITE : 30.65 K/s
02:55:47 Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s
TIME PID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
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 % 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]'Silma järgi jääb silma Firefox, mis on salvestanud 283 megabaiti paari minuti jooksul iotop-i töötab.
Failide määramine, kuhu kirjutatakse
Teave protsessi kohta, mis koormab ketast — see on hea, kuid teave salvestuskohtade kohta on veel parem.
Kasutame programmi fatrace, mis jälgib failisüsteemi muudatusi.
# fatrace -f WProgrammi väljundi näide
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.sqliteFatrace ei suuda näidata kirjutatud andmete hulka, kuna see kasutab üsna lihtsat faili kasutamise jälgimist inotify kaudu.
Väljundist nähtub, kuidas habr salvestab minu artiklit brauseri kohaliku salvestusse, kuni ma seda kirjutan, samuti laiendust Group Speed Dial, mis, nagu selgus fatrace'i abiga, loeb oma andmeid iga 30 sekundi järel. Nimelt loeb, mitte ei kirjuta: CW Faili üle avamine räägib, et fail avatakse lugemiseks ja kirjutamiseks ning samal ajal luuakse fail, kui seda pole olemas (kutsutakse esile openat koos lipuga O_RDWR|O_CREAT), kuid ei ütle, et faili kirjutati tegelikult mingit teavet.
Igaks juhuks, et selles veenduda, kasutame strace'i koos failisüsteemi süsteemikutsungite filtriga:
strace -yy -e trace=open,openat,close,write -f -p 15057 2>&1 | grep extensionKäskluse väljund
[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 Ühtegi kutsungit pole write(), mis näitab, et faili kirjutamist ei olnud.
Failisüsteemi overheadi määramine
Suur erinevus mõõtmistes iotop ja btrace ajendas mind katsetama failisüsteemi, kirjutades andmeid faili käsitsi ja jälgides btrace'i näitumisi.
Kui kirjutamine kettale täielikult välistada, käivitudes systemd hädaolukorraseisundis ja kirjutades käsitsi paar bait andmeid olemasolevasse faili, btrace SSD-l btrfs teatab kirjutamisest 3 megabaiti reaalne teave. Uues loodud failisüsteem USB-mälupangal, mille maht on 8 GB, salvestab vähemalt 264 KiB, kui salvestatakse üks bait.
Võrdluseks, paaribaitide salvestamine failile ext4 lõpeb 24 kilobaiti andmete salvestamisega kettale.
Aastal 2017 viibisid Jayashree Mohan, Rohan Kadekodi ja Vijay Chidambaram , nende tulemused btrfs ja ext4 puhul 4 KB salvestamisel vastavad minu omadele.

Kokkuvõte ja järeldus
Esitatud toimingute käigus selgus:
- Prindi tööolekute sagedane salvestamine CUPS-i printimise deemoniga kaustas /var/cache/cups каждую минуту. Проблема устранена очисткой /var/spool/cups (хотя никаких заданий печати не было);
- Andmebaasi lugemise fakt iga 30 sekundi järel Firefoxi laienemise Group Speed Dial jaoks;
- Erinevate jõudluse jälgimise teenuste perioodiline logi salvestamine Fedoral, mis viis mitme megabaidi andmete salvestamiseni btrfs: pmcd.service, pmie.service, pmlogger.service;
- Mitteolulise andmemahu salvestamisel btrfs-i kasutamisel tohutu amplifikatsioon.
Järeldus: btrfs-i ei tasu kasutada, kui programmid salvestavad sageli väikesi andmeliike (mõned kilobaitid), vastasel juhul lõpeb see megabaitide salvestamisega. See on eriti asjakohane ühesilindrilistele arvutitele, millel on OS MicroSD-l.
Allikas: habr.com
