TL;DR: Artikeln handlar om ett bekvÀmt, snabbt och pÄlitligt sÀtt att identifiera Linux-program som skriver data till disken, vilket hjÀlper till att upptÀcka hög eller onormalt frekvent belastning pÄ disksystemet, samt gör det möjligt att utvÀrdera filsystemets overhead. Detta Àr sÀrskilt relevant för SSD:er i PC, EMMC och Flash-minne i enkortsdatorer.
Under skrivandet av artikeln upptÀcktes att skrivning av flera kilobyte data till filsystemet BTRFS leder till att 3 megabyte verklig data skrivs till disken.
Introduktion
âĂ
h, nonsense, minnescellerna pĂ„ moderna SSD:er kommer att gĂ„ sönder efter tiotals Ă„r av vanlig anvĂ€ndning, sĂ„ du behöver inte oroa dig, och absolut inte flytta swap, virtuella maskiner och webblĂ€sarens profilsmappar till HDDâ â ett typiskt svar pĂ„ frĂ„gan om tillförlitligheten hos solid-state-enheter med garanterade â150 TBW. Om man uppskattar hur mycket typisk mjukvara kan skriva data, sĂ„ verkar 10-20 GB per dag redan vara en stor siffra, lĂ„t det vara maximalt 40 GB, hur mer kan man skriva? Med sĂ„dana siffror Ă€r svaret helt rimligt â man behöver 10 Ă„r för att nĂ„ garanterade vĂ€rden för antalet över skrivningar av celler, med 40 GB skrivna data varje dag.
Men efter 6 Är anvÀnder jag redan min tredje SSD: den första fick en trasig kontroller, och den andra började flytta data mellan cellerna flera gÄnger om dagen, vilket resulterade i 30-sekunders latens i skrivhanteringen.
Efter 7 mÄnader med den nya SSD:en bestÀmde jag mig för att kontrollera mÀngden skrivna data, som rapporteras av disken via SMART.
19.7 TB.
Totalt under 7 mÄnader har jag anvÀnt 13% av det garanterade antalet skrivna data, medan den Àr instÀlld enligt rekommendationerna för att jÀmna ut partitioner och stÀlla in filsystem, jag anvÀnder nÀstan ingen swap, diskarna virtuella maskiner Àr placerade pÄ HDD!
Detta Ă€r en onormalt stor siffra, i den takten kommer det garanterade TBW att överskridas innan 5-Ă„rs garantiavtalet för disken uppnĂ„s. Och min dator kan inte skriva 93 gigabyte per dag! Jag behöver kolla hur mycket data som skrivs till disken pĂ„ 10 minuterâŠ
Totalt:
Skrivningar i kö: 24 712, 2 237 MiB
Skrivningar genomförda: 25 507, 2 237 MiB
Skrivningssammanfogningar: 58, 5 472 KiB
2.2 GiB, wow!
BestÀmma mÀngden skrivna data till lagringsenheten
Om din enhet stöder S.M.A.R.T. (SSD, EMMC, vissa industriella MicroSD), bör du först begÀra data frÄn lagringsenheten med programmen smartctl, skdump eller mmc (ur mmc-utils).
Exempel pÄ utdata frÄn programmet smartctl
$ sudo smartctl -a /dev/sdb
smartctl 7.0 2019-03-31 r4903 [x86_64-linux-5.3.11-200.fc30.x86_64] (lokal bygg)
Copyright (C) 2002-18, Bruce Allen, Christian Franke, www.smartmontools.org
=== BĂRJAN AV INFORMATIONSAVSNITTET ===
Modellfamilj: Samsung-baserade SSD:er
Enhetsmodell: Samsung SSD 860 EVO mSATA 250GB
Serienummer: S41MNC0KA13477K
LU WWN Enhets-ID: 5 002538 e700fa64b
Firmware-version: RVT41B6Q
AnvĂ€ndarkapacitet: 250âŻ059âŻ350âŻ016 byte [250 GB]
Sektorstorlek: 512 byte logiskt/fysiskt
Rotationshastighet: Solid State-enhet
Formfaktor: mSATA
Enheten Àr: I smartctl-databasen [för detaljer anvÀnd: -P show]
ATA-version: ACS-4 T13/BSR INCITS 529 revision 5
SATA-version: SATA 3.1, 6.0 Gb/s (nuvarande: 3.0 Gb/s)
Lokal tid: Tis Nov 19 01:48:50 2019 MSK
SMART-stöd Àr: TillgÀngligt - enheten har SMART-funktioner.
SMART-stöd Àr: Aktiverat
=== BĂRJAN AV LĂSNING AV SMART-DATAAVSNITTET ===
SMART:s övergripande hĂ€lsovĂ€rdering resultat av sjĂ€lvbedömning: GĂ
TT
AllmÀnna SMART-vÀrden:
Offline datainsamlingsstatus: (0x00) Offline datainsamlingsaktivitet
har aldrig pÄbörjats.
Automatisk offline datainsamling: Inaktiverad.
SjÀlvtestens genomförandestatus: ( 0) Den föregÄende sjÀlvtestrutinen slutfördes
utan fel eller inget sjÀlvtest har nÄgonsin
körts.
Total tid för att slutföra offline
datainsamling: ( 0) sekunder.
Offline datainsamlings
funktioner: (0x53) SMART kör offline omedelbart.
Automatisk offline datainsamling pÄ/av stöd.
Pausa offline insamlingen vid ny
kommando.
Ingen offline ytsökning stöds.
SjÀlvtest stöds.
Ingen transport av sjÀlvtest stöds.
Selektivt sjÀlvtest stöds.
SMART-egenskaper: (0x0003) Sparar SMART-data innan den gÄr in i
strömsparlÀge.
Stöder SMART automatisk spara timer.
Felföljdsloggningskapabiliteter: (0x01) Felföljdsloggning stöds.
AllmÀn loggning stöds.
Kort sjÀlvtest-rutin
rekommenderad polltid: ( 2) minuter.
Utökad sjÀlvtest-rutin
rekommenderad polltid: ( 85) minuter.
SCT-funktioner: (0x003d) SCT-status stöds.
SCT-felÄterstÀllningskontroll stöds.
SCT-funktionskontroll stöds.
SCT-datatabell stöds.
SMART-attributens datastruktur revideringsnummer: 1
Leverantörsspecifika SMART-attribut med trösklar:
ID# EGNAKTION_NAMN FLAGGA VĂRDE SĂMST TRĂSKEL TYP UPPDATERAD NĂR_FEL RAW_VĂRDE
5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-failure Alltid - 0
9 Power_On_Hours 0x0032 098 098 000 Ă
lderdom Alltid - 5171
12 Power_Cycle_Count 0x0032 099 099 000 Ă
lderdom Alltid - 459
177 Wear_Leveling_Count 0x0013 096 096 000 Pre-failure Alltid - 62
179 Used_Rsvd_Blk_Cnt_Tot 0x0013 100 100 010 Pre-failure Alltid - 0
181 Program_Fail_Cnt_Total 0x0032 100 100 010 Ă
lderdom Alltid - 0
182 Erase_Fail_Count_Total 0x0032 100 100 010 Ă
lderdom Alltid - 0
183 Runtime_Bad_Block 0x0013 100 100 010 Pre-failure Alltid - 0
187 Uncorrectable_Error_Cnt 0x0032 100 100 000 Ă
lderdom Alltid - 0
190 Airflow_Temperature_Cel 0x0032 058 039 000 Ă
lderdom Alltid - 42
195 ECC_Error_Rate 0x001a 200 200 000 Ă
lderdom Alltid - 0
199 CRC_Error_Count 0x003e 100 100 000 Ă
lderdom Alltid - 0
235 POR_Recovery_Count 0x0012 099 099 000 Ă
lderdom Alltid - 29
241 Total_LBAs_Written 0x0032 099 099 000 Ă
lderdom Alltid - 38615215765
SMART-felloggar versionsnummer: 1
Inga fel loggade
SMART SjÀlvtest-loggstruktur revisionsnummer 1
Inga sjÀlvtester har loggats. [För att köra sjÀlvtester, anvÀnd: smartctl -t]
SMART Selektiv sjÀlvtest-loggdata struktur revisionsnummer 1
SPAN MIN_LBA MAX_LBA AKTUELL_TEST_STATUS
1 0 0 Ingen_testande
2 0 0 Ingen_testande
3 0 0 Ingen_testande
4 0 0 Ingen_testande
5 0 0 Ingen_testande
Selektiva sjÀlvtestflaggor (0x0):
Efter att ha skannat utvalda spann, gör INTE lÀs-skan Äterstoden av disken.
Om selektivt sjÀlvtest vÀntar vid uppstart, Äteruppta efter 0 minuters försening.Min SSD lagrar mÀngden skrivna data i parametern 241 Total_LBAs_Written, i logiska block (LBA), och inte i byte. Storleken pÄ det logiska blocket i mitt fall Àr 512 byte (det kan ses i smartctl-utdata, i Sector Size). För att fÄ byte mÄste man multiplicera vÀrdet pÄ parametern med 512.
38615215765 Ă 512 Ă· 1000 Ă· 1000 Ă· 1000 Ă· 1000 = 19,770 TB
38615215765 à 512 ÷ 1024 ÷ 1024 ÷ 1024 ÷ 1024 = 17,981 TiBProgrammet skdump pÄ min SSD försöker att tolka vÀrdet av Total_LBAs_Written pÄ sitt eget sÀtt, vilket gör att den visar 1296217.695 TB, vilket uppenbarligen Àr felaktigt.
För att ta reda pÄ mÀngden skrivinformation pÄ enhetsnivÄ anvÀnder vi programmet btrace som ingÄr i paketet blktrace. Det visar bÄde allmÀn statistik under hela programmets drift och enskilda processer och trÄdar (inklusive kÀrnor) som utförde skrivningar.
Kör följande kommando för att samla information under 10 minuter, dÀr /dev/sdb Àr din disk:
# btrace -w 600 -a write /dev/sdbTypisk utdata frÄn kommandot
âŠ
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 möjliggör en tydlig översikt över den verkliga mÀngden data som skrivits, men det Àr svÄrt att förstÄ vilka program som gör skrivningar utifrÄn dess utdata.
Identifiering av program som skriver till lagringsenheten
Programmet iotop visar processerna som skriver till disken och hur mycket data som skrivs.
De mest anvÀndarvÀnliga utdata ges av följande alternativ:
# iotop -obPatExempel pÄ programmets utdata
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]'Det Àr slÄende att Firefox har skrivit 283 megabyte pÄ bara nÄgra minuter av iotops arbete.
Identifiering av filer som skrivs till
Information om processen som sliter pÄ disken Àr bra, men vÀgarna som skrivs till Àr Ànnu bÀttre.
Vi anvÀnder programmet fatrace, som spÄrar förÀndringar i filsystemet.
# fatrace -f WExempel pÄ programmets utdata
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 kan inte visa mÀngden data som skrivits pÄ grund av den relativt enkla spÄrningen av filÄtkomst genom inotify.
FrÄn utskriften framgÄr att Habr sparar min artikel i webblÀsarens lokal lagring medan jag skriver, samt tillÀgget Group Speed Dial som, som jag upptÀckte med hjÀlp av fatrace, lÀser sina data var 30:e sekund. Det Àr just lÀsning, inte skrivning: CW Innan filen anges att filen öppnas för bÄde lÀsning och skrivning, med skapandet av filen om den inte finns (openat anropas med flaggan O_RDWR|O_CREAT), men det anges inte att nÄgon information faktiskt skrivits till filen.
För sÀkerhets skull, för att sÀkerstÀlla detta, anvÀnder vi strace med en filter för filsystemanrop:
strace -yy -e trace=open,openat,close,write -f -p 15057 2>&1 | grep extensionKommandots utdata
[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 Det finns inga anrop write(), vilket tyder pÄ att det inte finns nÄgon skrivning till filen.
Definition av filsystemets overhead
Stor skillnad i mÀtningarna iotop och btrace ledde till att jag tÀnkte testa filsystemet genom att manuellt skriva data till filen och spÄra mÀtningarna med btrace.
Om du helt utesluter skrivning till disken genom att starta i emergency-lÀget för systemd och skriva manuellt ett par byte data till en befintlig fil, rapporterar btrace pÄ SSD med btrfs att det skrevs 3 megabyte verkliga data. Det nyinrÀttade filsystemet pÄ ett 8 GB USB-minne skriver minst 264 KiB vid skrivning av ett enda byte.
Som jÀmförelse avslutas skrivning av ett par byte i en fil pÄ ext4 med att 24 kilobyte data skrivs till disken.
à r 2017 genomförde Jayashree Mohan, Rohan Kadekodi och Vijay Chidambaram , deras resultat för btrfs och ext4 vid skrivning av 4 KB överensstÀmmer med mina.

Slutsats och utvÀrdering
Genom de beskrivna manipulationerna upptÀcktes:
- Frekvent skrivning av jobbstatusar för skrivaren av CUPS-demonen i /var/cache/cups ĐșажЎŃŃ ĐŒĐžĐœŃŃŃ. ĐŃĐŸĐ±Đ»Đ”ĐŒĐ° ŃŃŃŃĐ°ĐœĐ”ĐœĐ° ĐŸŃĐžŃŃĐșĐŸĐč /var/spool/cups (Ń ĐŸŃŃ ĐœĐžĐșаĐșĐžŃ Đ·Đ°ĐŽĐ°ĐœĐžĐč пДŃаŃĐž ĐœĐ” бŃĐ»ĐŸ);
- Faktumet att databasen lÀses var 30:e sekunder av tillÀgget Group Speed Dial för Firefox;
- Periodisk skrivning av loggar av olika prestandaövervakningstjÀnster i Fedora, vilket ledde till att flera megabyte data skrevs till btrfs: pmcd.service, pmie.service, pmlogger.service;
- En enorm förstÀrkning vid skrivning av en liten mÀngd data nÀr btrfs anvÀnds.
Slutsats: btrfs bör undvikas om program ofta skriver smÄ mÀngder data (nÄgra kilobyte), annars resulterar det i megabyte av skrivna data. Detta Àr sÀrskilt relevant för enkortsdatorer med operativsystem pÄ MicroSD.
KĂ€lla: habr.com
