OLD | NEW |
1 # Chrome's Blob Storage System Design | 1 # Chrome's Blob Storage System Design |
2 | 2 |
3 Elaboration of the blob storage system in Chrome. | 3 Elaboration of the blob storage system in Chrome. |
4 | 4 |
5 # What are blobs? | 5 # What are blobs? |
6 | 6 |
7 Please see the [FileAPI Spec](https://www.w3.org/TR/FileAPI/) for the full | 7 Please see the [FileAPI Spec](https://www.w3.org/TR/FileAPI/) for the full |
8 specification for Blobs, or [Mozilla's Blob documentation]( | 8 specification for Blobs, or [Mozilla's Blob documentation]( |
9 https://developer.mozilla.org/en-US/docs/Web/API/Blob) for a description of how | 9 https://developer.mozilla.org/en-US/docs/Web/API/Blob) for a description of how |
10 Blobs are used in the Web Platform in general. For the purposes of this | 10 Blobs are used in the Web Platform in general. For the purposes of this |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 optimistically include the blob data if the size is less than the maximimum IPC | 74 optimistically include the blob data if the size is less than the maximimum IPC |
75 size. | 75 size. |
76 | 76 |
77 # Blob Storage Limits | 77 # Blob Storage Limits |
78 | 78 |
79 We calculate the storage limits [here]( | 79 We calculate the storage limits [here]( |
80 https://cs.chromium.org/chromium/src/storage/browser/blob/blob_memory_controller
.cc?q=CalculateBlobStorageLimitsImpl&sq=package:chromium). | 80 https://cs.chromium.org/chromium/src/storage/browser/blob/blob_memory_controller
.cc?q=CalculateBlobStorageLimitsImpl&sq=package:chromium). |
81 | 81 |
82 **In-Memory Storage Limit** | 82 **In-Memory Storage Limit** |
83 | 83 |
84 * If the architecture is x64 and NOT ChromeOS or Android: `2GB` | 84 * If the architecture is x64 and NOT Chrome OS or Android: `2GB` |
85 * Otherwise: `total_physical_memory / 5` | 85 * Otherwise: `total_physical_memory / 5` |
86 | 86 |
87 **Disk Storage Limit** | 87 **Disk Storage Limit** |
88 | 88 |
89 * If ChromeOS: `disk_size / 2` | 89 * If Chrome OS: `disk_size / 2` |
90 * If Android: `disk_size / 20` | 90 * If Android: `disk_size / 20` |
91 * Else: `disk_size / 10` | 91 * Else: `disk_size / 10` |
92 | 92 |
93 Note: ChromeOS's disk is part of the user partition, which is separate from the | 93 Note: Chrome OS's disk is part of the user partition, which is separate from the |
94 system partition. | 94 system partition. |
95 | 95 |
96 **Minimum Disk Availability** | 96 **Minimum Disk Availability** |
97 | 97 |
98 We limit our disk limit to accomidate a minimum disk availability. The equation | 98 We limit our disk limit to accomidate a minimum disk availability. The equation |
99 we use is: | 99 we use is: |
100 | 100 |
101 `min_disk_availability = in_memory_limit * 2` | 101 `min_disk_availability = in_memory_limit * 2` |
102 | 102 |
103 ## Example Limits | 103 ## Example Limits |
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
339 | 339 |
340 The `BlobMemoryController` is responsable for: | 340 The `BlobMemoryController` is responsable for: |
341 | 341 |
342 1. Determining storage quota limits for files and memory, including restricting | 342 1. Determining storage quota limits for files and memory, including restricting |
343 file quota when disk space is low. | 343 file quota when disk space is low. |
344 2. Determining whether a blob can fit and the transportation strategy to use. | 344 2. Determining whether a blob can fit and the transportation strategy to use. |
345 3. Tracking memory quota. | 345 3. Tracking memory quota. |
346 4. Tracking file quota and creating files. | 346 4. Tracking file quota and creating files. |
347 5. Accumulating and evicting old blob data to files to disk. | 347 5. Accumulating and evicting old blob data to files to disk. |
348 | 348 |
OLD | NEW |