From 5647679359cf2d13cb15e5aeacf2186002b72b4d Mon Sep 17 00:00:00 2001 From: ridethepig Date: Sun, 16 Apr 2023 22:01:45 +0800 Subject: [PATCH] OSTEP Chapter 46 (Fin) --- assets/ostep_1681115599584_0.edn | 1036 ++++++++++++++++- ...n => 2023-04-16T10_45_09.261Z.Desktop.edn} | 0 ...n => 2023-04-16T11_37_50.548Z.Desktop.edn} | 0 ...n => 2023-04-16T12_21_16.983Z.Desktop.edn} | 0 logseq/config.edn | 2 +- pages/hls__ostep_1681115599584_0.md | 343 +++++- 6 files changed, 1355 insertions(+), 26 deletions(-) rename logseq/bak/logseq/config/{2023-04-15T15_42_07.581Z.Desktop.edn => 2023-04-16T10_45_09.261Z.Desktop.edn} (100%) rename logseq/bak/logseq/config/{2023-04-16T06_01_41.642Z.Desktop.edn => 2023-04-16T11_37_50.548Z.Desktop.edn} (100%) rename logseq/bak/logseq/config/{2023-04-16T06_01_48.493Z.Desktop.edn => 2023-04-16T12_21_16.983Z.Desktop.edn} (100%) diff --git a/assets/ostep_1681115599584_0.edn b/assets/ostep_1681115599584_0.edn index 6258fed..2db801c 100644 --- a/assets/ostep_1681115599584_0.edn +++ b/assets/ostep_1681115599584_0.edn @@ -6678,5 +6678,1039 @@ :height 1555.2}), :page 595}, :content {:text "cease"}, + :properties {:color "green"}} + {:id #uuid "643bce2b-3e0d-4860-a7fd-34c0b0565fe2", + :page 595, + :position {:bounding {:x1 139.29454040527344, + :y1 1082.265625, + :x2 359.86199951171875, + :y2 1108.265625, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 139.29454040527344, + :y1 1082.265625, + :x2 359.86199951171875, + :y2 1108.265625, + :width 1036.8, + :height 1555.2}), + :page 595}, + :content {:text "Storing a Single Bit"}, + :properties {:color "yellow"}} + {:id #uuid "643bce49-47a3-43c6-ae82-825fd5224dd4", + :page 595, + :position {:bounding {:x1 0, + :y1 364, + :x2 830.3471069335938, + :y2 1199.21875, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 0, + :y1 364, + :x2 0, + :y2 388, + :width 1036.8, + :height 1555.2} + {:x1 0, + :y1 380, + :x2 0, + :y2 404, + :width 1036.8, + :height 1555.2} + {:x1 168.015625, + :y1 1130.421875, + :x2 830.3355712890625, + :y2 1151.421875, + :width 1036.8, + :height 1555.2} + {:x1 139.3125, + :y1 1154.328125, + :x2 830.3471069335938, + :y2 1175.84375, + :width 1036.8, + :height 1555.2} + {:x1 139.3125, + :y1 1178.21875, + :x2 203.69427490234375, + :y2 1199.21875, + :width 1036.8, + :height 1555.2}), + :page 595}, + :content {:text "Flash chips are designed to store one or more bits in a single transistor; the level of charge trapped within the transistor is mapped to a binary value. "}, + :properties {:color "yellow"}} + {:id #uuid "643bcf1a-e41d-4ad2-83a3-ed550f9be123", + :page 596, + :position {:bounding {:x1 206.25347900390625, + :y1 644.140625, + :x2 428.631591796875, + :y2 670.140625, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 206.25347900390625, + :y1 644.140625, + :x2 428.631591796875, + :y2 670.140625, + :width 1036.8, + :height 1555.2}), + :page 596}, + :content {:text "From Bits to Banks"}, + :properties {:color "yellow"}} + {:id #uuid "643bcf8f-05db-476d-8b73-e9a052d91e4d", + :page 597, + :position {:bounding {:x1 139.29454040527344, + :y1 214.8125, + :x2 402.5329284667969, + :y2 240.8125, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 139.29454040527344, + :y1 214.8125, + :x2 402.5329284667969, + :y2 240.8125, + :width 1036.8, + :height 1555.2}), + :page 597}, + :content {:text "Basic Flash Operations"}, + :properties {:color "yellow"}} + {:id #uuid "643bd219-634d-4c9a-abf7-e266b5b3c2d7", + :page 597, + :position {:bounding {:x1 0, + :y1 428, + :x2 830.3175048828125, + :y2 924.421875, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 0, + :y1 428, + :x2 0, + :y2 452, + :width 1036.8, + :height 1555.2} + {:x1 168.015625, + :y1 879.515625, + :x2 830.3175048828125, + :y2 900.515625, + :width 1036.8, + :height 1555.2} + {:x1 139.3125, + :y1 903.421875, + :x2 264.7312316894531, + :y2 924.421875, + :width 1036.8, + :height 1555.2}), + :page 597}, + :content {:text "One way to think about flash chips is that each page has a state associated with it"}, + :properties {:color "yellow"}} + {:id #uuid "643bd351-d4f4-406a-9910-f44ab31bc83f", + :page 600, + :position {:bounding {:x1 679.5498657226562, + :y1 430.5, + :x2 755.29736328125, + :y2 451.5, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 679.5498657226562, + :y1 430.5, + :x2 755.29736328125, + :y2 451.5, + :width 1036.8, + :height 1555.2}), + :page 600}, + :content {:text "rigidity"}, + :properties {:color "green"}} + {:id #uuid "643bd3a4-af24-4e7f-905b-f3c3a8739831", + :page 599, + :position {:bounding {:x1 740.496826171875, + :y1 861.109375, + :x2 820.3475341796875, + :y2 882.109375, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 740.496826171875, + :y1 861.109375, + :x2 820.3475341796875, + :y2 882.109375, + :width 1036.8, + :height 1555.2}), + :page 599}, + :content {:text "accrues "}, + :properties {:color "green"}} + {:id #uuid "643bd3c4-c868-44fb-bd96-1ac7f3fe14c0", + :page 599, + :position {:bounding {:x1 0, + :y1 412, + :x2 830.3388671875, + :y2 929.9375, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 0, + :y1 412, + :x2 0, + :y2 436, + :width 1036.8, + :height 1555.2} + {:x1 0, + :y1 428, + :x2 0, + :y2 452, + :width 1036.8, + :height 1555.2} + {:x1 181.5852813720703, + :y1 861.109375, + :x2 830.3379669189453, + :y2 882.109375, + :width 1036.8, + :height 1555.2} + {:x1 139.3125, + :y1 885.015625, + :x2 830.3388671875, + :y2 906.53125, + :width 1036.8, + :height 1555.2} + {:x1 139.3125, + :y1 908.9375, + :x2 756.644287109375, + :y2 929.9375, + :width 1036.8, + :height 1555.2}), + :page 599}, + :content {:text " when a flash block is erased and programmed, it slowly accrues a little bit of extra charge. Over time, as that extra charge builds up, it becomes increasingly difficult to differentiate between a 0 and a 1"}, + :properties {:color "yellow"}} + {:id #uuid "643bd3e8-304f-4e43-93a6-a8630df283b0", + :page 599, + :position {:bounding {:x1 0, + :y1 604, + :x2 830.3336334228516, + :y2 1192.9375, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 0, + :y1 604, + :x2 0, + :y2 628, + :width 1036.8, + :height 1555.2} + {:x1 205.71986389160156, + :y1 1148.015625, + :x2 830.3336334228516, + :y2 1169.015625, + :width 1036.8, + :height 1555.2} + {:x1 139.3125, + :y1 1171.9375, + :x2 557.8182373046875, + :y2 1192.9375, + :width 1036.8, + :height 1555.2}), + :page 599}, + :content {:text " When accessing a particular page within a flash, it is possible that some bits get flipped in neighboring pages;"}, + :properties {:color "yellow"}} + {:id #uuid "643bd544-e923-48b0-a513-2e8d3753e0c2", + :page 600, + :position {:bounding {:x1 250.203125, + :y1 1027.484375, + :x2 468.0198669433594, + :y2 1056.484375, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 250.203125, + :y1 1027.484375, + :x2 468.0198669433594, + :y2 1056.484375, + :width 1036.8, + :height 1555.2}), + :page 600}, + :content {:text "flash translation layer"}, + :properties {:color "yellow"}} + {:id #uuid "643bd5c6-9fbd-4bac-a71a-0e86a73b7ce2", + :page 600, + :position {:bounding {:x1 0, + :y1 652, + :x2 897.3101806640625, + :y2 1321.25, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 0, + :y1 652, + :x2 0, + :y2 676, + :width 1036.8, + :height 1555.2} + {:x1 845.890625, + :y1 1268.359375, + :x2 897.3101806640625, + :y2 1297.359375, + :width 1036.8, + :height 1555.2} + {:x1 206.28125, + :y1 1292.25, + :x2 336.5986022949219, + :y2 1321.25, + :width 1036.8, + :height 1555.2} + {:x1 206.28125, + :y1 1296.25, + :x2 336.5986022949219, + :y2 1317.765625, + :width 1036.8, + :height 1555.2}), + :page 600}, + :content {:text "write amplification"}, + :properties {:color "yellow"}} + {:id #uuid "643bd69a-5cc5-4ce1-97c9-805f422a0562", + :page 601, + :position {:bounding {:x1 0, + :y1 332, + :x2 830.34326171875, + :y2 869.828125, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 0, + :y1 332, + :x2 0, + :y2 356, + :width 1036.8, + :height 1555.2} + {:x1 802.84375, + :y1 816.921875, + :x2 830.34326171875, + :y2 845.921875, + :width 1036.8, + :height 1555.2} + {:x1 139.3125, + :y1 840.828125, + :x2 262.4523620605469, + :y2 869.828125, + :width 1036.8, + :height 1555.2} + {:x1 139.3125, + :y1 844.828125, + :x2 262.4523620605469, + :y2 866.34375, + :width 1036.8, + :height 1555.2}), + :page 601}, + :content {:text "direct mapped"}, + :properties {:color "yellow"}} + {:id #uuid "643bd777-947b-4627-844b-b84fd5573657", + :page 602, + :position {:bounding {:x1 231.8767547607422, + :y1 214.8125, + :x2 462.4686279296875, + :y2 240.8125, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 231.8767547607422, + :y1 214.8125, + :x2 462.4686279296875, + :y2 240.8125, + :width 1036.8, + :height 1555.2}), + :page 602}, + :content {:text "Log-Structured FTL"}, + :properties {:color "yellow"}} + {:id #uuid "643bd89f-4561-4b1e-94fa-9bd46914d870", + :page 602, + :position {:bounding {:x1 0, + :y1 60, + :x2 897.2860717773438, + :y2 380.46875, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 0, + :y1 60, + :x2 0, + :y2 84, + :width 1036.8, + :height 1555.2} + {:x1 0, + :y1 76, + :x2 0, + :y2 100, + :width 1036.8, + :height 1555.2} + {:x1 752.7103271484375, + :y1 311.65625, + :x2 897.2835693359375, + :y2 332.65625, + :width 1036.8, + :height 1555.2} + {:x1 332.390625, + :y1 333, + :x2 352.42205810546875, + :y2 362, + :width 1036.8, + :height 1555.2} + {:x1 206.265625, + :y1 335.5625, + :x2 897.2860717773438, + :y2 357.078125, + :width 1036.8, + :height 1555.2} + {:x1 206.265625, + :y1 359.46875, + :x2 516.6146850585938, + :y2 380.46875, + :width 1036.8, + :height 1555.2}), + :page 602}, + :content {:text "Upon a write to logical block N , the device appends the write to the next free spot in the currently-being-written-to block; "}, + :properties {:color "yellow"}} + {:id #uuid "643bd8de-7dda-4882-ab7c-bbbe75f2a925", + :page 602, + :position {:bounding {:x1 0, + :y1 92, + :x2 897.2958984375, + :y2 409.8125, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 0, + :y1 92, + :x2 0, + :y2 116, + :width 1036.8, + :height 1555.2} + {:x1 870.8861694335938, + :y1 359.46875, + :x2 897.2890625, + :y2 380.46875, + :width 1036.8, + :height 1555.2} + {:x1 547.078125, + :y1 380.8125, + :x2 567.1095581054688, + :y2 409.8125, + :width 1036.8, + :height 1555.2} + {:x1 754.765625, + :y1 380.8125, + :x2 897.2958984375, + :y2 409.8125, + :width 1036.8, + :height 1555.2} + {:x1 206.265625, + :y1 383.375, + :x2 760.46875, + :y2 404.890625, + :width 1036.8, + :height 1555.2}), + :page 602}, + :content {:text " To allow for subsequent reads of block N , the device keeps a mapping table"}, + :properties {:color "yellow"}} + {:id #uuid "643bd8fd-99ed-4d7b-adaa-50be9ee619dc", + :page 603, + :position {:bounding {:x1 0, + :y1 12, + :x2 830.3519287109375, + :y2 293.109375, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 0, + :y1 12, + :x2 0, + :y2 36, + :width 1036.8, + :height 1555.2} + {:x1 0, + :y1 28, + :x2 0, + :y2 52, + :width 1036.8, + :height 1555.2} + {:x1 565.3927001953125, + :y1 218.859375, + :x2 830.3255615234375, + :y2 239.859375, + :width 1036.8, + :height 1555.2} + {:x1 789.671875, + :y1 240.203125, + :x2 830.3519287109375, + :y2 269.203125, + :width 1036.8, + :height 1555.2} + {:x1 139.3125, + :y1 242.765625, + :x2 830.3519287109375, + :y2 264.28125, + :width 1036.8, + :height 1555.2} + {:x1 139.3125, + :y1 264.109375, + :x2 313.37261962890625, + :y2 293.109375, + :width 1036.8, + :height 1555.2} + {:x1 139.3125, + :y1 268.109375, + :x2 324.125, + :y2 289.625, + :width 1036.8, + :height 1555.2}), + :page 603}, + :content {:text "Most SSDs will write pages in order (i.e., low to high), reducing reliability problems related to program disturbance."}, + :properties {:color "yellow"}} + {:id #uuid "643bdcba-9e46-4dfc-8366-6472c734abdb", + :page 604, + :position {:bounding {:x1 206.25347900390625, + :y1 866.890625, + :x2 428.8628845214844, + :y2 892.890625, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 206.25347900390625, + :y1 866.890625, + :x2 428.8628845214844, + :y2 892.890625, + :width 1036.8, + :height 1555.2}), + :page 604}, + :content {:text "Garbage Collection"}, + :properties {:color "yellow"}} + {:id #uuid "643bdd25-8551-40be-9072-2cc3342f6c42", + :page 606, + :position {:bounding {:x1 545.5, + :y1 809.65625, + :x2 683.0527954101562, + :y2 838.65625, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 545.5, + :y1 809.65625, + :x2 683.0527954101562, + :y2 838.65625, + :width 1036.8, + :height 1555.2}), + :page 606}, + :content {:text "overprovision"}, + :properties {:color "yellow"}} + {:id #uuid "643bde06-ad8f-42a7-a322-85d8b511d56e", + :page 606, + :position {:bounding {:x1 370.625, + :y1 398.828125, + :x2 510.7003173828125, + :y2 427.828125, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 376, + :y1 398.828125, + :x2 423.23126220703125, + :y2 427.828125, + :width 1036.8, + :height 1555.2} + {:x1 370.625, + :y1 401.390625, + :x2 510.7003173828125, + :y2 422.90625, + :width 1036.8, + :height 1555.2}), + :page 606}, + :content {:text " trim operation"}, + :properties {:color "yellow"}} + {:id #uuid "643bdf55-53c3-407f-b87f-86b3d8f1141b", + :page 611, + :position {:bounding {:x1 139.3125, + :y1 720.234375, + :x2 338.80157470703125, + :y2 746.234375, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 139.3125, + :y1 720.234375, + :x2 338.80157470703125, + :y2 746.234375, + :width 1036.8, + :height 1555.2}), + :page 611}, + :content {:text "SSD Performance"}, + :properties {:color "yellow"}} + {:id #uuid "643bdf64-fb3a-4417-8dc8-3cc736841285", + :page 606, + :position {:bounding {:x1 206.28125, + :y1 1015.8125, + :x2 434.48309326171875, + :y2 1041.8125, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 206.28125, + :y1 1015.8125, + :x2 434.48309326171875, + :y2 1041.8125, + :width 1036.8, + :height 1555.2}), + :page 606}, + :content {:text "Mapping Table Size"}, + :properties {:color "yellow"}} + {:id #uuid "643bdf97-2eae-45e1-b6be-c93c7c47112b", + :page 606, + :position {:bounding {:x1 206.28125, + :y1 1221.796875, + :x2 448.6535949707031, + :y2 1252.796875, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 206.28125, + :y1 1221.796875, + :x2 448.6535949707031, + :y2 1252.796875, + :width 1036.8, + :height 1555.2}), + :page 606}, + :content {:text "Block-Based Mapping"}, + :properties {:color "yellow"}} + {:id #uuid "643be2e5-4f61-4aa5-9885-e0fc862c3df6", + :page 608, + :position {:bounding {:x1 206.265625, + :y1 817.40625, + :x2 392.86383056640625, + :y2 848.40625, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 206.265625, + :y1 817.40625, + :x2 392.86383056640625, + :y2 848.40625, + :width 1036.8, + :height 1555.2}), + :page 608}, + :content {:text "Hybrid Mapping"}, + :properties {:color "yellow"}} + {:id #uuid "643be6ec-00bb-413f-96a1-7268f5b01709", + :page 609, + :position {:bounding {:x1 617.7431640625, + :y1 821, + :x2 750.5863647460938, + :y2 850, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 617.75, + :y1 821, + :x2 750.5863647460938, + :y2 850, + :width 1036.8, + :height 1555.2} + {:x1 617.7431640625, + :y1 823.5625, + :x2 750.5863647460938, + :y2 845.078125, + :width 1036.8, + :height 1555.2}), + :page 609}, + :content {:text "switch merge"}, + :properties {:color "yellow"}} + {:id #uuid "643be6f3-d351-4b04-a201-03dda410950d", + :page 610, + :position {:bounding {:x1 223.40625, + :y1 473.421875, + :x2 355.32086181640625, + :y2 502.421875, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 223.40625, + :y1 473.421875, + :x2 355.32086181640625, + :y2 502.421875, + :width 1036.8, + :height 1555.2}), + :page 610}, + :content {:text "partial merge"}, + :properties {:color "yellow"}} + {:id #uuid "643be6f7-4656-4f93-a208-88a6fa9be6e0", + :page 610, + :position {:bounding {:x1 716.4375, + :y1 593.625, + :x2 818.8125, + :y2 622.625, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 716.4375, + :y1 593.625, + :x2 818.8125, + :y2 622.625, + :width 1036.8, + :height 1555.2}), + :page 610}, + :content {:text "full merge"}, + :properties {:color "yellow"}} + {:id #uuid "643be86a-9bd8-4962-92ac-76832cc93a6c", + :page 610, + :position {:bounding {:x1 206.265625, + :y1 916.65625, + :x2 515.0299682617188, + :y2 947.65625, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 206.265625, + :y1 916.65625, + :x2 515.0299682617188, + :y2 947.65625, + :width 1036.8, + :height 1555.2}), + :page 610}, + :content {:text "Page Mapping Plus Caching"}, + :properties {:color "yellow"}} + {:id #uuid "643be88d-4648-4dc3-8f5a-fc7c45fa144a", + :page 611, + :position {:bounding {:x1 139.2952423095703, + :y1 214.8125, + :x2 306.540771484375, + :y2 240.8125, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 139.2952423095703, + :y1 214.8125, + :x2 306.540771484375, + :y2 240.8125, + :width 1036.8, + :height 1555.2}), + :page 611}, + :content {:text "Wear Leveling"}, + :properties {:color "yellow"}} + {:id #uuid "643bec95-40fd-4df9-9981-1f6d641ec520", + :page 619, + :position {:bounding {:x1 139.3125, + :y1 1003.890625, + :x2 365.77032470703125, + :y2 1029.890625, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 139.3125, + :y1 1003.890625, + :x2 365.77032470703125, + :y2 1029.890625, + :width 1036.8, + :height 1555.2}), + :page 619}, + :content {:text "Disk Failure Modes"}, + :properties {:color "yellow"}} + {:id #uuid "643beca7-e6d1-4a17-93ec-d7445eee92c1", + :page 620, + :position {:bounding {:x1 0, + :y1 76, + :x2 897.2681274414062, + :y2 392.359375, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 0, + :y1 76, + :x2 0, + :y2 100, + :width 1036.8, + :height 1555.2} + {:x1 234.953125, + :y1 347.4375, + :x2 897.2681274414062, + :y2 368.4375, + :width 1036.8, + :height 1555.2} + {:x1 206.265625, + :y1 371.359375, + :x2 332.8004455566406, + :y2 392.359375, + :width 1036.8, + :height 1555.2}), + :page 620}, + :content {:text "LSEs arise when a disk sector (or group of sectors) has been damaged in some way. "}, + :properties {:color "yellow"}} + {:id #uuid "643bed56-bc80-4332-b799-933755811759", + :page 621, + :position {:bounding {:x1 139.29454040527344, + :y1 856.203125, + :x2 487.1074523925781, + :y2 882.203125, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 139.29454040527344, + :y1 856.203125, + :x2 487.1074523925781, + :y2 882.203125, + :width 1036.8, + :height 1555.2}), + :page 621}, + :content {:text "Handling Latent Sector Errors"}, + :properties {:color "yellow"}} + {:id #uuid "643beee5-af3c-44c2-bf55-716c0a4ce0c4", + :page 622, + :position {:bounding {:x1 206.265625, + :y1 649.015625, + :x2 642.359619140625, + :y2 675.015625, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 206.265625, + :y1 649.015625, + :x2 642.359619140625, + :y2 675.015625, + :width 1036.8, + :height 1555.2}), + :page 622}, + :content {:text "Detecting Corruption: The Checksum"}, + :properties {:color "yellow"}} + {:id #uuid "643befc3-80a8-40de-a3b9-c994a90c0f0a", + :page 623, + :position {:bounding {:x1 231.4464874267578, + :y1 408.5625, + :x2 314.3844909667969, + :y2 429.5625, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 231.4464874267578, + :y1 408.5625, + :x2 314.3844909667969, + :y2 429.5625, + :width 1036.8, + :height 1555.2}), + :page 623}, + :content {:text "beverages"}, + :properties {:color "green"}} + {:id #uuid "643befcd-f69a-4c19-bb76-21d8945d4cc8", + :page 623, + :position {:bounding {:x1 139.3125, + :y1 514.078125, + :x2 475.31256103515625, + :y2 545.078125, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 139.3125, + :y1 514.078125, + :x2 475.31256103515625, + :y2 545.078125, + :width 1036.8, + :height 1555.2}), + :page 623}, + :content {:text "Common Checksum Functions"}, + :properties {:color "yellow"}} + {:id #uuid "643bf039-a6cb-475c-b990-df21d8f3919f", + :page 624, + :position {:bounding {:x1 206.265625, + :y1 919.859375, + :x2 403.4557189941406, + :y2 950.859375, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 206.265625, + :y1 919.859375, + :x2 403.4557189941406, + :y2 950.859375, + :width 1036.8, + :height 1555.2}), + :page 624}, + :content {:text "Checksum Layout"}, + :properties {:color "yellow"}} + {:id #uuid "643bf2c6-9c4f-44a8-bcc5-0af3570b64be", + :page 625, + :position {:bounding {:x1 139.29454040527344, + :y1 933.828125, + :x2 348.3673400878906, + :y2 959.828125, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 139.29454040527344, + :y1 933.828125, + :x2 348.3673400878906, + :y2 959.828125, + :width 1036.8, + :height 1555.2}), + :page 625}, + :content {:text "Using Checksums"}, + :properties {:color "yellow"}} + {:id #uuid "643bf2f7-fc6a-4289-a50b-784e6a765eb9", + :page 626, + :position {:bounding {:x1 410.45086669921875, + :y1 306.53125, + :x2 627.4166870117188, + :y2 332.53125, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 410.45086669921875, + :y1 306.53125, + :x2 627.4166870117188, + :y2 332.53125, + :width 1036.8, + :height 1555.2}), + :page 626}, + :content {:text "isdirected Writes"}, + :properties {:color "yellow"}} + {:id #uuid "643bf30b-6fcf-4d5f-9c13-dd29d4284f63", + :page 626, + :position {:bounding {:x1 0, + :y1 140, + :x2 897.2720947265625, + :y2 482.125, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 0, + :y1 140, + :x2 0, + :y2 164, + :width 1036.8, + :height 1555.2} + {:x1 289.17462158203125, + :y1 436.6875, + :x2 897.2720947265625, + :y2 457.6875, + :width 1036.8, + :height 1555.2} + {:x1 206.265625, + :y1 460.609375, + :x2 479.2613220214844, + :y2 482.125, + :width 1036.8, + :height 1555.2}), + :page 626}, + :content {:text " disk and RAID controllers which write the data to disk correctly, except in the wrong location."}, + :properties {:color "yellow"}} + {:id #uuid "643bf3ff-eeec-4c89-b385-6a104d0596bd", + :page 627, + :position {:bounding {:x1 358.6805114746094, + :y1 446.109375, + :x2 492.76861572265625, + :y2 472.109375, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 358.6805114746094, + :y1 446.109375, + :x2 492.76861572265625, + :y2 472.109375, + :width 1036.8, + :height 1555.2}), + :page 627}, + :content {:text "Lost Writes"}, + :properties {:color "yellow"}} + {:id #uuid "643bf40f-573a-4004-9b3f-443502a7a198", + :page 627, + :position {:bounding {:x1 0, + :y1 188, + :x2 830.3338012695312, + :y2 588.09375, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 0, + :y1 188, + :x2 0, + :y2 212, + :width 1036.8, + :height 1555.2} + {:x1 572.8367309570312, + :y1 543.171875, + :x2 830.3338012695312, + :y2 564.171875, + :width 1036.8, + :height 1555.2} + {:x1 139.3125, + :y1 567.09375, + :x2 776.4985961914062, + :y2 588.09375, + :width 1036.8, + :height 1555.2}), + :page 627}, + :content {:text "he device informs the upper layer that a write has completed but in fact it never is persisted;"}, + :properties {:color "yellow"}} + {:id #uuid "643bf4d3-df61-4530-928f-ed524699c44f", + :page 627, + :position {:bounding {:x1 139.3125, + :y1 1245.5625, + :x2 204.66717529296875, + :y2 1271.5625, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 139.3125, + :y1 1245.5625, + :x2 204.66717529296875, + :y2 1271.5625, + :width 1036.8, + :height 1555.2}), + :page 627}, + :content {:text "Scrub"}, + :properties {:color "green"}} + {:id #uuid "643bf4f5-4ec4-4b42-962d-8c3a7729b64e", + :page 628, + :position {:bounding {:x1 206.25347900390625, + :y1 472.90625, + :x2 557.4531860351562, + :y2 498.90625, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 206.25347900390625, + :y1 472.90625, + :x2 557.4531860351562, + :y2 498.90625, + :width 1036.8, + :height 1555.2}), + :page 628}, + :content {:text "Overheads Of Checksumming"}, + :properties {:color "yellow"}} + {:id #uuid "643bf592-4dec-43c4-b8ff-996d765e071b", + :page 628, + :position {:bounding {:x1 680.9038696289062, + :y1 313.9375, + :x2 828.8343505859375, + :y2 342.9375, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 680.90625, + :y1 313.9375, + :x2 828.8343505859375, + :y2 342.9375, + :width 1036.8, + :height 1555.2} + {:x1 680.9038696289062, + :y1 316.515625, + :x2 828.8343505859375, + :y2 338.03125, + :width 1036.8, + :height 1555.2}), + :page 628}, + :content {:text "disk scrubbing"}, + :properties {:color "yellow"}} + {:id #uuid "643bfdfa-6681-4fcc-b7c1-b84887afeecd", + :page 633, + :position {:bounding {:x1 313.9092712402344, + :y1 669.453125, + :x2 372.1202697753906, + :y2 690.453125, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 313.9092712402344, + :y1 669.453125, + :x2 372.1202697753906, + :y2 690.453125, + :width 1036.8, + :height 1555.2}), + :page 633}, + :content {:text "levity "}, + :properties {:color "green"}} + {:id #uuid "643bfe9d-913f-4ab7-aba3-a3fac83d1dfb", + :page 634, + :position {:bounding {:x1 566.5701293945312, + :y1 218.859375, + :x2 640.9887084960938, + :y2 239.859375, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 566.5701293945312, + :y1 218.859375, + :x2 640.9887084960938, + :y2 239.859375, + :width 1036.8, + :height 1555.2}), + :page 634}, + :content {:text "sarcastic"}, + :properties {:color "green"}} + {:id #uuid "643bfeb8-34d1-428d-82d5-0bfefb871d4e", + :page 634, + :position {:bounding {:x1 272.0708923339844, + :y1 355.6875, + :x2 354.34539794921875, + :y2 376.6875, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 272.0708923339844, + :y1 355.6875, + :x2 354.34539794921875, + :y2 376.6875, + :width 1036.8, + :height 1555.2}), + :page 634}, + :content {:text "scribbles "}, :properties {:color "green"}}], - :extra {:page 595}} + :extra {:page 686}} diff --git a/logseq/bak/logseq/config/2023-04-15T15_42_07.581Z.Desktop.edn b/logseq/bak/logseq/config/2023-04-16T10_45_09.261Z.Desktop.edn similarity index 100% rename from logseq/bak/logseq/config/2023-04-15T15_42_07.581Z.Desktop.edn rename to logseq/bak/logseq/config/2023-04-16T10_45_09.261Z.Desktop.edn diff --git a/logseq/bak/logseq/config/2023-04-16T06_01_41.642Z.Desktop.edn b/logseq/bak/logseq/config/2023-04-16T11_37_50.548Z.Desktop.edn similarity index 100% rename from logseq/bak/logseq/config/2023-04-16T06_01_41.642Z.Desktop.edn rename to logseq/bak/logseq/config/2023-04-16T11_37_50.548Z.Desktop.edn diff --git a/logseq/bak/logseq/config/2023-04-16T06_01_48.493Z.Desktop.edn b/logseq/bak/logseq/config/2023-04-16T12_21_16.983Z.Desktop.edn similarity index 100% rename from logseq/bak/logseq/config/2023-04-16T06_01_48.493Z.Desktop.edn rename to logseq/bak/logseq/config/2023-04-16T12_21_16.983Z.Desktop.edn diff --git a/logseq/config.edn b/logseq/config.edn index 657d2d7..10c46a7 100644 --- a/logseq/config.edn +++ b/logseq/config.edn @@ -342,7 +342,7 @@ ;; ;use triple underscore `___` for slash `/` in page title ;; ;use Percent-encoding for other invalid characters :file/name-format :triple-lowbar - :ui/show-brackets? true + :ui/show-brackets? false :feature/enable-timetracking? false ;; specify the format of the filename for journal files diff --git a/pages/hls__ostep_1681115599584_0.md b/pages/hls__ostep_1681115599584_0.md index f8799ce..ef6051f 100644 --- a/pages/hls__ostep_1681115599584_0.md +++ b/pages/hls__ostep_1681115599584_0.md @@ -1671,31 +1671,27 @@ file-path:: ../assets/ostep_1681115599584_0.pdf - COW: never overwrite in place - back-pointer: add backward pointer to inode to check consistency - optimistic crash consistency: kind of transaction checksum -- premise +- premise 引出,预先提出;作为…的前提 ls-type:: annotation hl-page:: 563 hl-color:: green id:: 643b824d-2732-46ae-961d-74a06db18138 -- tad +- tad 少量;一点儿: ls-type:: annotation hl-page:: 563 hl-color:: green id:: 643b824f-c588-4b82-93e6-393016d3b5b1 -- hideous +- hideous 可怕的;丑恶的 ls-type:: annotation hl-page:: 572 hl-color:: green id:: 643b9c40-6329-4720-9d26-75a78701392c -- hairy - ls-type:: annotation - hl-page:: 572 - hl-color:: green - id:: 643b9c49-9e7c-4379-a640-8aff152ea511 - ## Log-structured File Systems hl-page:: 579 ls-type:: annotation id:: 643b8dad-3813-4048-8d04-5eb93a6bd182 hl-color:: yellow + collapsed:: true - **Writing To Disk Sequentially** hl-page:: 580 ls-type:: annotation @@ -1803,38 +1799,337 @@ file-path:: ../assets/ostep_1681115599584_0.pdf ls-type:: annotation id:: 643bc10e-be20-47b3-bab4-713493dd5153 hl-color:: yellow +- mandate (政府组织经过选举得到的)授权;(政府)任期;委托; + hl-page:: 586 + ls-type:: annotation + id:: 643bb439-b7d0-4170-9417-cd900062bfbd + hl-color:: green +- entail 牵涉;须要;使必要 involve + hl-page:: 586 + ls-type:: annotation + id:: 643bb533-1fee-4b9a-9965-7a63016d5591 + hl-color:: green +- ceremonious 讲究礼节的,正式的 + hl-page:: 587 + ls-type:: annotation + id:: 643bb6e8-6466-4574-aa04-4ea25b3e9034 + hl-color:: green +- cease 停止, 终止, 结束 + ls-type:: annotation + hl-page:: 595 + hl-color:: green + id:: 643bc4b4-dc22-471c-9229-558a42904cc8 - ## Flash-based SSDs ls-type:: annotation hl-page:: 595 hl-color:: yellow id:: 643ba369-83df-42f9-9ee9-b45d4652e8fb + collapsed:: true + - Storing a Single Bit + ls-type:: annotation + hl-page:: 595 + hl-color:: yellow + id:: 643bce2b-3e0d-4860-a7fd-34c0b0565fe2 + - Flash chips are designed to store one or more bits in a single transistor; the level of charge trapped within the transistor is mapped to a binary value. Such as SLC (0, 1), MLC (00, 01, 10, 11), TLC and even QLC + hl-page:: 595 + ls-type:: annotation + id:: 643bce49-47a3-43c6-ae82-825fd5224dd4 + hl-color:: yellow + - From Bits to Banks + ls-type:: annotation + hl-page:: 596 + hl-color:: yellow + id:: 643bcf1a-e41d-4ad2-83a3-ed550f9be123 + - page: a few KB in size + - block (erase block): hundreds of KB, consists of many pages + - bank/plane: flash chips are organized into banks/planes, consisting of a large number of cells. + - Basic Flash Operations + ls-type:: annotation + hl-page:: 597 + hl-color:: yellow + id:: 643bcf8f-05db-476d-8b73-e9a052d91e4d + - **Read** (a page): ==Any page==; Fast; Access any location ==uniformly quickly== + - **Erase** (a ==block==): Before writing to a page, the page's enclosing block must be *erased* (all set to 1). ==Expensive==. Flash chips will ==wear out== as it is erased. + - **Program** (a page): Once a block has been erased, it can be *programmed* by page, changing some of the 1s to 0s in order to write the desired content. Slower than *read*, but faster than *erase*. + - One way to think about flash chips is that each page has a state associated with it, namely INVALID, VALID and ERASED. + hl-page:: 597 + ls-type:: annotation + id:: 643bd219-634d-4c9a-abf7-e266b5b3c2d7 + hl-color:: yellow + - Reliability Problem + - Wear out + - when a flash block is erased and programmed, it slowly accrues a little bit of extra charge. Over time, as that extra charge builds up, it becomes increasingly difficult to differentiate between a 0 and a 1 + ls-type:: annotation + hl-page:: 599 + hl-color:: yellow + id:: 643bd3c4-c868-44fb-bd96-1ac7f3fe14c0 + - Disturbance + - When accessing a particular page within a flash, it is possible that some bits get flipped in neighboring pages + ls-type:: annotation + hl-page:: 599 + hl-color:: yellow + id:: 643bd3e8-304f-4e43-93a6-a8630df283b0 + - Most SSDs will write pages in order (i.e., low to high), reducing reliability problems related to program disturbance. + ls-type:: annotation + hl-page:: 603 + hl-color:: yellow + id:: 643bd8fd-99ed-4d7b-adaa-50be9ee619dc + - Flash Translation Layer (FTL) + hl-page:: 600 + ls-type:: annotation + id:: 643bd544-e923-48b0-a513-2e8d3753e0c2 + hl-color:: yellow + - FTL turns client reads and writes into internal flash operations, i.e., accepts requests on logical blocks and do low-level commands on underlying physical blocks and pages. + - **write amplification**: The total traffic issued to the flash chips by FTL $\div$ the total traffic issued by the client. + hl-page:: 600 + ls-type:: annotation + id:: 643bd5c6-9fbd-4bac-a71a-0e86a73b7ce2 + hl-color:: yellow + - Goal: More parallelism, Less write amplification, Reduce wear out, Minimize program disturbance + - Direct mapped FTL + hl-page:: 601 + ls-type:: annotation + id:: 643bd69a-5cc5-4ce1-97c9-805f422a0562 + hl-color:: yellow + - A logical page is mapped directly to a physical page. + - Bad idea. Write is slow and leads to severe amplification, because it needs to read, erase and program the whole block for a single page. + - Log-Structured FTL + ls-type:: annotation + hl-page:: 602 + hl-color:: yellow + id:: 643bd777-947b-4627-844b-b84fd5573657 + - Upon a write to logical block N , the device appends the write to the next free spot in the currently-being-written-to block. + hl-page:: 602 + ls-type:: annotation + id:: 643bd89f-4561-4b1e-94fa-9bd46914d870 + hl-color:: yellow + - To allow for subsequent reads of block N , the device keeps a mapping table which stores the physical address of each logical block in the system. + ls-type:: annotation + hl-page:: 602 + hl-color:: yellow + id:: 643bd8de-7dda-4882-ab7c-bbbe75f2a925 + - Garbage Collection + ls-type:: annotation + hl-page:: 604 + hl-color:: yellow + id:: 643bdcba-9e46-4dfc-8366-6472c734abdb + - Find a block that contains dead pages, read its live pages, write those live pages to the log, and reclaim the entire block. + id:: 643bdcd2-053a-4c18-bf9a-393fd367ebef + - GC can be ==expensive==, requiring reading and rewriting of live data. The ideal candidate for reclamation is a ==block that consists of only dead pages==. + - overprovision: adding extra flash capacity, cleaning can be delayed and pushed to the background + hl-page:: 606 + ls-type:: annotation + id:: 643bdd25-8551-40be-9072-2cc3342f6c42 + hl-color:: yellow + - **trim** operation: inform FTL that the logical block has been deleted and thus the device no longer need to track it. + hl-page:: 606 + ls-type:: annotation + id:: 643bde06-ad8f-42a7-a322-85d8b511d56e + hl-color:: yellow + - Mapping Table Size + ls-type:: annotation + hl-page:: 606 + hl-color:: yellow + id:: 643bdf64-fb3a-4417-8dc8-3cc736841285 + - Page-level mapping takes up too much space + - Block-Based Mapping + ls-type:: annotation + hl-page:: 606 + hl-color:: yellow + id:: 643bdf97-2eae-45e1-b6be-c93c7c47112b + - Block-level mapping is akin to larger page size in VM, the basic unit grows from page to block. + - Terrible performance under log-structured scheme. Even a write is small (page size), the FTL has to read from the old block and write the updated block to log. This leads to severe write amplification. + - Hybrid Mapping + ls-type:: annotation + hl-page:: 608 + hl-color:: yellow + id:: 643be2e5-4f61-4aa5-9885-e0fc862c3df6 + - **log table**: FTL keeps a few blocks erased and directs all writes to them, and keeps per-page mappings for these *log blocks*. + - **data table**: per-block mappings + - When looking for a logical address, FTL first consults the *log table*, and consults the *data table* if not found. + - To keep the log table small, FTL has to periodically examine the *log blocks* and switch them into *data blocks* (which can be pointed to by a block-level mapping). The details of three different situation, refer to the example in the book. + - switch merge: the pages in a log block can exactly share the same block number + hl-page:: 609 + ls-type:: annotation + id:: 643be6ec-00bb-413f-96a1-7268f5b01709 + hl-color:: yellow + - partial merge: some of the pages in a log block can share the same block, so FTL needs to move their buddies here to form a data block + hl-page:: 610 + ls-type:: annotation + id:: 643be6f3-d351-4b04-a201-03dda410950d + hl-color:: yellow + - full merge: none of these pages can share the same block. better not merge the block + hl-page:: 610 + ls-type:: annotation + id:: 643be6f7-4656-4f93-a208-88a6fa9be6e0 + hl-color:: yellow + - Page Mapping Plus Caching + hl-page:: 610 + ls-type:: annotation + id:: 643be86a-9bd8-4962-92ac-76832cc93a6c + hl-color:: yellow + collapsed:: true + - Akin to paging in VM, load a small active set of the page-level mappings into the memory. + - If working set is limited, this approach works fine. Otherwise, frequent eviction will damage the performance. + - Wear Leveling + ls-type:: annotation + hl-page:: 611 + hl-color:: yellow + id:: 643be88d-4648-4dc3-8f5a-fc7c45fa144a + collapsed:: true + - Spread erase/program across the blocks of the device evenly. + - The log structured approach does most of the work for this goal, but one problem remains. Blocks filled with long-lived data rarely get overwritten and thus do not receive fair share of write load. + - One simple solution could be periodically move such blocks elsewhere, but it will increase write amplification. + - SSD Performance + ls-type:: annotation + hl-page:: 611 + hl-color:: yellow + id:: 643bdf55-53c3-407f-b87f-86b3d8f1141b + - SSD outperforms HDD dramatically in random IO, while there is less difference in Sequential IO. + - Random read is slower than random write for SSD, due to the log-structured design. +- accrue 逐渐增加;积累 + hl-page:: 599 + ls-type:: annotation + id:: 643bd3a4-af24-4e7f-905b-f3c3a8739831 + hl-color:: green +- rigid 死板的;僵硬的 + hl-page:: 600 + ls-type:: annotation + id:: 643bd351-d4f4-406a-9910-f44ab31bc83f + hl-color:: green - ## Data Integrity and Protection ls-type:: annotation hl-page:: 619 hl-color:: yellow id:: 643ba392-acd9-4255-930e-a97f94fb28ef -- spouse + collapsed:: true + - Disk Failure Modes + ls-type:: annotation + hl-page:: 619 + hl-color:: yellow + id:: 643bec95-40fd-4df9-9981-1f6d641ec520 + - Latent-sector errors + - LSEs arise when a disk sector (or group of sectors) has been damaged in some way. + ls-type:: annotation + hl-page:: 620 + hl-color:: yellow + id:: 643beca7-e6d1-4a17-93ec-d7445eee92c1 + - Head crash (disk head somehow touches the surface and damages it) or Cosmic rays! + - Can be detected or even corrected by in-disk ECC (error correcting code). + - Block Corruption + - Not detectable by the disk itself. Silent faults + - Buggy firmware, faulty bus + - Handling Latent Sector Errors + ls-type:: annotation + hl-page:: 621 + hl-color:: yellow + id:: 643bed56-bc80-4332-b799-933755811759 + - Since LSEs can be ==easily detected==, the storage system simply uses whatever ==redundancy mechanism to recover== this. + - Detecting Corruption: The Checksum + ls-type:: annotation + hl-page:: 622 + hl-color:: yellow + id:: 643beee5-af3c-44c2-bf55-716c0a4ce0c4 + - A function takes a chunk of data as input and produces ==a small summary of the data==, which is the checksum. Checksum should enable the system to detect data corruption by ==re-computing and matching== + - Common Checksum Functions + ls-type:: annotation + hl-page:: 623 + hl-color:: yellow + id:: 643befcd-f69a-4c19-bb76-21d8945d4cc8 + - XOR: only detect odd number of bit(s) flip + - 2's compliment addition (ignoring overflow): vulnerable to shift + - Fletcher checksum: almost as strong as the CRC, detecting all single-bit, double-bit errors, and many burst errors + - ```C + uint16_t Fletcher16( uint8_t *data, int count ) + { + uint16_t sum1 = 0; + uint16_t sum2 = 0; + int index; + for ( index = 0; index < count; ++index ) { + sum1 = (sum1 + data[index]) % 255; + sum2 = (sum2 + sum1) % 255; + } + return (sum2 << 8) | sum1; + } + ``` + - CRC: Treat the data block `D` as a large binary number and divide it by an agreed value `k`. The remainder is the CRC value. + - No perfect checksum, there is always a collision (non-identical data generate identical checksum) + - Checksum Layout + ls-type:: annotation + hl-page:: 624 + hl-color:: yellow + id:: 643bf039-a6cb-475c-b990-df21d8f3919f + - If supported by drive manufacturer, one solution is to format the drive with 8-byte checksum and 520-byte data per sector. + - Another solution: the FS packs checksums into 512 Byte blocks to be stored in sectors with corresponding data sectors following. + - Using Checksums: compare *stored checksum* and *computed checksum* + hl-page:: 625 + ls-type:: annotation + id:: 643bf2c6-9c4f-44a8-bcc5-0af3570b64be + hl-color:: yellow + - Misdirected Writes + ls-type:: annotation + hl-page:: 626 + hl-color:: yellow + id:: 643bf2f7-fc6a-4289-a50b-784e6a765eb9 + - Disk/RAID controllers write the data to disk correctly but ==in the wrong location==. Checksum itself won't help in this situation. + hl-page:: 626 + ls-type:: annotation + id:: 643bf30b-6fcf-4d5f-9c13-dd29d4284f63 + hl-color:: yellow + - Add an extra *physical ID* to each checksum, and we can check this since data itself is correct. + - Lost Writes + ls-type:: annotation + hl-page:: 627 + hl-color:: yellow + id:: 643bf3ff-eeec-4c89-b385-6a104d0596bd + - The device informs the upper layer that a write is ==completed but in fact not persisted==. Checksum won't help, since the new checksum does not get to disk either. + hl-page:: 627 + ls-type:: annotation + id:: 643bf40f-573a-4004-9b3f-443502a7a198 + hl-color:: yellow + - Solution: Perform a write verify or read-after-write, though slow. Add a checksum elsewhere in the system to detect lost writes. + - Disk Scrubbing + hl-page:: 628 + ls-type:: annotation + id:: 643bf592-4dec-43c4-b8ff-996d765e071b + hl-color:: yellow + - Most data is rarely accessed, and thus would stay unchecked, which affects the reliability. + - Many systems utilize disk scrubbing (i.e., periodically read through every block and check them) + - Overheads Of Checksumming + hl-page:: 628 + ls-type:: annotation + id:: 643bf4f5-4ec4-4b42-962d-8c3a7729b64e + hl-color:: yellow + - Space: disk (take up user data space) and memory (mostly short-lived, not a problem) + - Time: CPU (has to compute through the data) and IO (checksum stored elsewhere, or scrubbing) + - CPU overheads can be reduced by combining data copying and checking, since copy is needed anyhow +- beverage (除水以外的)饮料 + hl-page:: 623 + ls-type:: annotation + id:: 643befc3-80a8-40de-a3b9-c994a90c0f0a + hl-color:: green +- scrub 擦洗;刷洗;矮树丛 + hl-page:: 627 + ls-type:: annotation + id:: 643bf4d3-df61-4530-928f-ed524699c44f + hl-color:: green +- spouse 配偶 ls-type:: annotation hl-page:: 633 hl-color:: green id:: 643ba3b2-5a2a-4589-a871-62ad213de195 -- mandate +- levity 轻率的举止;轻浮 + hl-page:: 633 ls-type:: annotation - hl-page:: 586 + id:: 643bfdfa-6681-4fcc-b7c1-b84887afeecd hl-color:: green - id:: 643bb439-b7d0-4170-9417-cd900062bfbd -- entail +- sarcastic 讥讽的, 讽刺的, + hl-page:: 634 ls-type:: annotation - hl-page:: 586 + id:: 643bfe9d-913f-4ab7-aba3-a3fac83d1dfb hl-color:: green - id:: 643bb533-1fee-4b9a-9965-7a63016d5591 -- ceremonious +- scribble 草草记下,匆匆书写;胡写乱画;潦草的文字 + hl-page:: 634 ls-type:: annotation - hl-page:: 587 - hl-color:: green - id:: 643bb6e8-6466-4574-aa04-4ea25b3e9034 -- cease - ls-type:: annotation - hl-page:: 595 - hl-color:: green - id:: 643bc4b4-dc22-471c-9229-558a42904cc8 \ No newline at end of file + id:: 643bfeb8-34d1-428d-82d5-0bfefb871d4e + hl-color:: green \ No newline at end of file