Как прокачать иопсы вновь
Виталий Филиппов
Примеры:
0.6-0.7 — Много исправлений зависаний, падений
0.8.9 — Стабилизация тестов и CI
1.3.0 — RDMA без ODP
1.4.0 — VDUSE в CSI
1.6.0 — Обработка ENOSPC
1.10.1 — Ускорение failover
0.7.0 — NFS
1.0.0 — Чексуммы
1.5.0 — VitastorFS & KV 😎
1.7.0 — I/O треды, Antietcd
1.9.0 — OpenNebula
2.0.0 — S3 😎😎
2.2.0 — Локальные чтения
0.8.0 — udev & vitastor-disk
0.8.7 — Онлайн конфигурация
1.4.0 — Автотюнинг ребаланса
1.6.0 — Иерарх.домены отказа
1.7.0 — Prometheus
1.9.x — dd, resize, автовыбор block_size
1.10.0 — Автонастройка RDMA
Блочный слой хранения по американским чертежам
Писать в конец
😊 Амортизация ⇒ память 1x, WA ↓↓
😢 Нужен Compaction (LSM?..) ⇒ WA ↑↑, CPU ↑↑
Можно просто отслеживать мусор
Все записи одного объекта в один блок...
...Но это не LSMeta, и WA ↑↑
Однако идея меня пленила
Решил переписать ещё раз
Ради WA 1 можно потерпеть инвалидацию 😇
Вместо журнала — буферная область
В памяти — hashmap и связные списки
Без оптимизации по CPU всё это бессмысленно!
Копирование памяти, (де)сериализация, потоки, блокировки... 👎👎👎
Linux 6.11 To Introduce Block Atomic Writes –
Including NVMe & SCSI Support
Atomic Write Unit Power Fail (AWUPF): This field indicates the size of the write
operation guaranteed to be written atomically to the NVM across all namespaces with
any supported namespace format during a power fail or error condition.
— то, что нужно!
⇒ На SSD/NVMe 4 КБ атомарны всегда!
...хорошо, а то Vitastor на это уже полагается 🤣
D5-5536 на 122 TB — блок 16 КБ
Пишем по xxx КБ → рубим питание → проверяем
MySQL: innodb_doublewrite=OFF
Vitastor: ???
Намерения записи (Write Intent)
| Что храним | |
|---|---|
| 2.4.1 | Сырые блоки + cpp-btree + журнал |
| heap | Блоки с запасом 20% + hashmap |
| lsmeta | Отдельные malloc + hashmap + связный список |
| SSD | SSD (256 КБ) | HDD (1 МБ) | ||
|---|---|---|---|---|
| 2.4.1 ≈ | 663 МБ | 371 МБ | 152 МБ | |
| heap | 740 МБ | 412 МБ | 165 МБ | +11% |
| ...в лучшем случае. А в худшем — всё, что выделено на диске 🤣 | ||||
| lsmeta | 785 МБ | 456 МБ | 154 МБ | +18% |
* без учёта чексумм (ещё 128 МБ .. 1 ГБ на 1 ТБ)
