TL;DR: ky artikulli flet për një mënyrë të përshtatshme, të shpejtë dhe të besueshme për të përcaktuar programet Linux që shkruajnë të dhëna në disk, gjë që ndihmon në identifikimin e ngarkesave të mëdha ose anomalisht të shpeshta në nën-sistemin disk, si dhe në vlerësimin e kostove të sistemit të skedarëve. Kjo është veçanërisht e rëndësishme për SSD në PC, EMMC dhe memorien Flash në kompjuterët me një pllakë.
Gjatë shkruarjes së artikullit, u zbulua se shkrimi i disa kilobyteve të dhënash në sistemin e skedarëve BTRFS shkakton shkrimin e 3 megabyteve të dhënash reale në disk.
Hyrje
«O, është budallallëk, qelizat e memories në SSD-të moderne do të shkatërrohen pas dhjetëra vitesh përdorimi të zakonshëm, nuk ka arsye për t'u shqetësuar, dhe aq më pak për të transferuar swap, makinat virtuale dhe dosjen e profilit të shfletuesit në HDD» — një përgjigje tipike ndaj pyetjes për besueshmërinë e dysqeve të gjendjes solide me një garanci të ≈150 TBW. Nëse kalkulojmë se sa të dhëna mund të shkruajë një softuer tipik, duket se 10-20 GB në ditë është një numër i madh, le të mendojmë se maksimumi është 40 GB, çfarë më shumë. Me këto numra, përgjigjja duket mjaft e arsyeshme — nevojitet 10 vjet për të arritur vlerat e garantuara për numrin e rikthimeve të qelizave, me 40 GB të dhënash të shkruara çdo ditë.
Megjithatë, gjatë 6 viteve, unë kam përdorur tashmë SSD-në time të tretë: e para kishte dështuar kontrolluesi, dhe e dyta filloi të zhgënjente të dhënat midis qelizave disa herë në ditë, gjë që rezultoi në vonesa prej 30 sekondash në shërbimin e shkarkimit.
Pas 7 muajsh përdorimi të SSD-së së re, vendosa të kontrolloj numrin e të dhënave të shkruara, ashtu siç i raporton vetë disku përmes SMART.
19.7 TB.
Gjatë 7 muajve, kam përdorur 13% të numrit të garantuar të të dhënave të shkruara, për më tepër, ai është konfiguruar sipas rekomandimeve për rrafshimin e ndarjeve dhe konfigurimin e FS, swap-i im pothuajse nuk përdoret, disqet makinat virtuale janë të vendosura në HDD!
Ky është një numër anormalisht i madh, me këto ritme TBW e garantuar do të tejkalohet përpara se të arrijë 5 vjet garancie për diskin. Dhe kompjuteri im nuk mund të shkruajë 93 gigabyte në ditë! Duhet të kontrollojmë se sa të dhëna shkruhen në disk brenda 10 minutash…
Totali:
Shkruajtjet në pritje: 24,712, 2,237MiB
Shkruajtjet e përfunduara: 25,507, 2,237MiB
Bashkimet e shkruajtjeve: 58, 5,472KiB
2.2 GiB, oh wow!
Përcaktimi i sasisë së të dhënave të shkruara në pajisjen diskore
Nëse pajisja juaj mbështet S.M.A.R.T. (SSD, EMMC, disa MicroSD industriale), atëherë e para gjë që duhet bërë është të kërkoni të dhënat nga disku me programet smartctl, skdump ose mmc (nga grupi mmc-utils).
Shembuj të nxjerrjes së programit smartctl
$ 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
=== START OF INFORMATION SECTION ===
Model Family: SSD-të e bazuara në Samsung
Device Model: Samsung SSD 860 EVO mSATA 250GB
Serial Number: S41MNC0KA13477K
LU WWN Device Id: 5 002538 e700fa64b
Firmware Version: RVT41B6Q
User Capacity: 250 059 350 016 bytes [250 GB]
Sector Size: 512 bytes logjik/ fizik
Rotation Rate: Pajisje SSD
Form Factor: mSATA
Device is: Në bazën e të dhënave smartctl [për detaje përdorni: -P show]
ATA Version is: ACS-4 T13/BSR INCITS 529 revision 5
SATA Version is: SATA 3.1, 6.0 Gb/s (aktuale: 3.0 Gb/s)
Local Time is: Mar 19 Nënt 01:48:50 2019 MSK
SMART support is:: I disponueshëm - pajisja ka kapacitet SMART.
SMART support is: Aktivizuar
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: KALUAR
Vlerat Generale SMART:
Statusi i grumbullimit të të dhënave Offline: (0x00) Aktiviteti i grumbullimit të të dhënave Offline
nuk është nisur kurrë.
Grumbullimi Automatik i të Dhënave Offline: I Çaktivizuar.
Statusi i ekzekutimit të vetë-testit: ( 0) Rutinë e mëparshme e vetë-testit përfundoi
pa gabim ose nuk është kryer ndonjë vetë-test.
Koha totale për të përfunduar grumbullimin e të dhënave Offline: ( 0) sekonda.
Aftësitë e grumbullimit të të dhënave Offline: (0x53) SMART ekzekuto grumbullimin Offline të menjëhershëm.
Grumbullimi automatik i të dhënave Offline në/on mbështetje.
Përcakto grumbullimin Offline pas urdhrit të ri.
Asnjë skanim të sipërfaqes Offline nuk mbështetet.
Vetë-testi mbështetet.
Asnjë Vetë-test i transportit nuk mbështetet.
Vetë-test i zgjedhur i mbështetur.
Aftësitë SMART: (0x0003) Ruaj të dhënat SMART para se të hysh
në modalitetin e kursimit të energjisë.
Mbështet orarin e ruajtjes automatike të SMART.
Kapaciteti i regjistrimit të gabimeve: (0x01) Regjistrimi i gabimeve mbështetet.
Regjistrimi i Qëllimeve të Përgjithshme mbështetet.
Koha e rekomanduar e ankesës për rutinën e vetë-testit të shkurtër: ( 2) minuta.
Koha e rekomanduar e ankesës për rutinën e vetë-testit të zgjeruar: ( 85) minuta.
Aftësitë SCT: (0x003d) Statusi SCT mbështetet.
Kontrolli i Rindërtimit të Gabimeve SCT mbështetet.
Kontrolli i Karakteristikave SCT mbështetet.
Tabela e të Dhënave SCT mbështetet.
Numri i rishikimeve të Strukturës së të Dhënave të Atributeve SMART: 1
Atributet SMART të markave me threshold:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
5 Reallocated_Sector_Ct 0x0033 100 100 010 Para-dështim Gjithmonë - 0
9 Power_On_Hours 0x0032 098 098 000 Mosha e vjetër Gjithmonë - 5171
12 Power_Cycle_Count 0x0032 099 099 000 Mosha e vjetër Gjithmonë - 459
177 Wear_Leveling_Count 0x0013 096 096 000 Para-dështim Gjithmonë - 62
179 Used_Rsvd_Blk_Cnt_Tot 0x0013 100 100 010 Para-dështim Gjithmonë - 0
181 Program_Fail_Cnt_Total 0x0032 100 100 010 Mosha e vjetër Gjithmonë - 0
182 Erase_Fail_Count_Total 0x0032 100 100 010 Mosha e vjetër Gjithmonë - 0
183 Runtime_Bad_Block 0x0013 100 100 010 Para-dështim Gjithmonë - 0
187 Uncorrectable_Error_Cnt 0x0032 100 100 000 Mosha e vjetër Gjithmonë - 0
190 Airflow_Temperature_Cel 0x0032 058 039 000 Mosha e vjetër Gjithmonë - 42
195 ECC_Error_Rate 0x001a 200 200 000 Mosha e vjetër Gjithmonë - 0
199 CRC_Error_Count 0x003e 100 100 000 Mosha e vjetër Gjithmonë - 0
235 POR_Recovery_Count 0x0012 099 099 000 Mosha e vjetër Gjithmonë - 29
241 Total_LBAs_Written 0x0032 099 099 000 Mosha e vjetër Gjithmonë - 38615215765
Versioni i Regjistrit të Gabimeve SMART: 1
Asnjë Gabim të Regjistruar
Struktura e regjistrit të vetë-testit SMART e numrit të rishikimeve 1
Nuk janë regjistruar vetë-teste. [Për të ekzekutuar vetë-testet, përdorni: smartctl -t]
Struktura e të dhënave të regjistrit të vetë-testit të zgjedhur SMART e numrit të rishikimeve 1
SPAN MIN_LBA MAX_LBA STATUSI AKTUAL_TESTIM
1 0 0 Nuk_po_testohet
2 0 0 Nuk_po_testohet
3 0 0 Nuk_po_testohet
4 0 0 Nuk_po_testohet
5 0 0 Nuk_po_testohet
Flagat e vetë-testit të zgjedhura (0x0):
Pas skenimit të shtrirjeve të zgjedhura, mos lexoni skanimin e mbetur të diskut.
Nëse vetë-testi i zgjedhur është duke pritur pas ndezjes, rifilloni pas 0 minutash vonese.SSD im në ruan sasinë e të dhënave të shkruara në parametrin 241 Total_LBAs_Written, në blloqet logjikë (LBA), dhe jo në bajta. Madhësia e bllokut logjik në rastin tim është 512 bajtë (mund të shihet në daljen smartctl, në Sector Size). Për të marrë bajta, duhet të shumëzojmë vlerën e parametrin me 512.
38615215765 × 512 ÷ 1000 ÷ 1000 ÷ 1000 ÷ 1000 = 19,770 TB
38615215765 × 512 ÷ 1024 ÷ 1024 ÷ 1024 ÷ 1024 = 17,981 TiBProgrami skdump në SSD-në time përpiqet të interpretojë vlerën Total_LBAs_Written në një mënyrë të vetën, duke u shkaktuar që të shfaqë 1296217.695 TB, që, është e qartë, është e pasaktë.
Për të zbuluar sasinë e informacionit të shkruar në nivelin e pajisjes, do të përdorim programin btrace nga paketa blktrace. Ai tregon si statistikën e përgjithshme për të gjitha kohët e funksionimit të programit, ashtu edhe proceset dhe thread-et e veçanta (përfshirë bllokadat), të cilat kanë kryer shkrimin.
Ekzekutoni komandën e mëposhtme për të mbledhur informacion për 10 minuta, ku /dev/sdb është disku juaj:
# btrace -w 600 -a write /dev/sdbDilja tipike e komandës
…
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 tregon qartë sasinë reale të të dhënave të shkruara, por është e vështirë të kuptohet se cilat programe po shkruajnë nga nxjerrja e saj.
Përcaktimi i programeve që shkruajnë në ruajtës
Programi iotop do të tregojë proceset që shkruajnë në hard disk dhe madhësinë e të dhënave të shkruara.
Parametrat më të përshtatshëm për një dalje të qartë janë:
# iotop -obPatShembulli i daljes së programit
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]'Kaq shumë bie në sy Firefox, i cili ka shkruar 283 megabajt brenda disa minutash që iotop ishte në veprim.
Përcaktimi i skedarëve ku po shkruhet
Informacioni për procesin që abuzon me diskun — është mirë, por edhe më mirë do të ishin rrugët ku po bëhet shkrimi.
Do të përdorim programin fatrace, i cili ndjek ndryshimet në sistemin e skedarëve.
# fatrace -f WShembulli i daljes së programit
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 nuk e mbështet shfaqjen e sasisë së të dhënave të shkruara për shkak të përdorimit të një ndjekjeje mjaft të thjeshtë të faktit të qasjes në skedarë përmes inotify.
Nga dalja tregohet se si habr ruan artikullin tim në ruajtjen lokale të shfletuesit ndërsa e shkruaj, si dhe shtesa Group Speed Dial, që u zbulua të lexojë të dhënat e saj çdo 30 sekonda. Në fakt, ajo lexon, e jo shkruan: CW para skedullin e skedullin e skedullin e skedullin e skedullin nj"period"(file)", me menyrë të krijohet, nëse ai nuk ekziston (thirrja openat me flakën O_RDWR|O_CREAT), por nuk tregon që në skedullin e dokumentit është shkruar ndonjë informacion.
Për çdo rast, për t'u siguruar për këtë, do të përdorim strace, me filtrin për thirrjet e sistemit të skedhës:
strace -yy -e trace=open,openat,close,write -f -p 15057 2>&1 | grep extensionDalja e komandës
[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 Nuk ka asnjë thirrje write(), që tregon për mungesën e të dhënave të shkruara në skedull.
Përkufizimi i kostove të sistemit të skedhës
Një diferencë e madhe në lexime iotop dhe btrace më shtyu të provonim sistemin e skedhës duke shkruar dorazi të dhëna në një skedull dhe duke ndjekur leximet e btrace.
Nëse e përjashtojmë plotësisht shkrimin në disk, duke u ngarkuar në modalitetin emergjent të systemd, dhe shkruajmë dorazi disa byte të dhënash në një skedull ekzistues, btrace në SSD me btrfs raporton për shkrimin 3 megabajt të dhënave reale. Sistemi i skedarëve të sapo krijuar në një flash drive prej 8 GB shkruan minimum 264 KiB kur shkruan një byte.
Për krahasim, shkrimi i një çifti byte në një skedar në ext4 përfundon me shkrimin e 24 kilobajtëve të dhënash në disk.
Në vitin 2017, Jayashree Mohan, Rohan Kadekodi dhe Vijay Chidambaram , rezultatet e tyre për btrfs dhe ext4 kur shkruajnë 4 KB janë të lidhura me të mijat.

Përfundim dhe konkluzion
Dhe përmes manovrave të përshkruara u zbulua:
- Shkrimi i shpesh i shteteve të punëve për printerin nga demonsi i printimit CUPS në /var/cache/cups каждую минуту. Проблема устранена очисткой /var/spool/cups (хотя никаких заданий печати не было);
- Fakti i leximit të bazës së të dhënave çdo 30 sekonda nga zgjerimi Group Speed Dial për Firefox;
- Shkrimi periodik i ditarëve nga shërbime të ndryshme për monitorimin e performancës në Fedora, i cili çonte në shkrimin e disa megabajt të dhënash në btrfs: pmcd.service, pmie.service, pmlogger.service;
- Një amplifikim i madh kur shkruhet një sasi të vogël të dhënash duke përdorur btrfs.
Përfundimi: nuk rekomandohet të pëdoresh btrfs nëse programet shkruajnë shpesh sasi të vogla të dhënash (disa kilobajtë), përndryshe kjo do të rezultojë në megabajt të dhënash të shkruara. Kjo është veçanërisht e rëndësishme për kompjuterët me një plackë që përdorin një sistem operativ në MicroSD.
Burimi: habr.com
