ΠΠ° ΠΏΡΠΎΡ ΠΎΠ΄ΡΡΠ΅ΠΉ Π² ΡΡΠΈ Π΄Π½ΠΈ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ Linux Plumbers 2022 ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ ΠΈΠ· ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Western Digital Π²ΡΡΡΡΠΏΠΈΠ» Ρ Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠΌ ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° Π΄Π»Ρ SSD-Π½Π°ΠΊΠΎΠΏΠΈΡΠ΅Π»Π΅ΠΉ Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ NVM-Express (NVMe), Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ Π½Π° ΡΠ·ΡΠΊΠ΅ Rust ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅Π³ΠΎ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΠ΄ΡΠ° Linux. ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠΎΠΊΠ° Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΡΠ°Π½Π½Π΅ΠΌ ΡΡΠ°ΠΏΠ΅ ΡΠ°Π·Π²ΠΈΡΠΈΡ, ΠΏΡΠΎΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΎ, ΡΡΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ NVMe-Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° Π½Π° ΡΠ·ΡΠΊΠ΅ Rust ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΈΠΌΠ΅ΡΡΠ΅ΠΌΡΡΡ Π² ΡΠ΄ΡΠ΅ NVMe-Π΄ΡΠ°ΠΉΠ²Π΅ΡΡ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠΌΡ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘ΠΈ.
Π Π΄ΠΎΠΊΠ»Π°Π΄Π΅ Π³ΠΎΠ²ΠΎΡΠΈΡΡΡ, ΡΡΠΎ ΡΠ΅ΠΊΡΡΠΈΠΉ NVMe-Π΄ΡΠ°ΠΉΠ²Π΅Ρ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², Π½ΠΎ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ° NVMe ΡΠ²Π»ΡΠ΅ΡΡΡ Ρ ΠΎΡΠΎΡΠ΅ΠΉ ΠΏΠ»ΠΎΡΠ°Π΄ΠΊΠΎΠΉ Π΄Π»Ρ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ ΡΠ΅Π»Π΅ΡΠΎΠΎΠ±ΡΠ°Π·Π½ΠΎΡΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΎΠ² Π½Π° ΡΠ·ΡΠΊΠ΅ Rust, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½Π° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ°Ρ, ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, ΠΏΡΠ΅Π΄ΡΡΠ²Π»ΡΠ΅Ρ Π²ΡΡΠΎΠΊΠΈΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΡ ΡΡΠ°Π»ΠΎΠ½Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄Π»Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ (dev, pci, dma, blk-mq, gendisk, sysfs).
ΠΡΠΌΠ΅ΡΠ°Π΅ΡΡΡ, ΡΡΠΎ PCI NVMe Π΄ΡΠ°ΠΉΠ²Π΅Ρ Π½Π° Rust ΡΠΆΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ, Π½ΠΎ ΠΏΠΎΠΊΠ° Π½Π΅ Π³ΠΎΡΠΎΠ² Π΄Π»Ρ ΡΠΈΡΠΎΠΊΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ Π΄ΠΎΡΠ°Π±ΠΎΡΠΎΠΊ. Π‘ΡΠ΅Π΄ΠΈ ΠΏΠ»Π°Π½ΠΎΠ² Π½Π° Π±ΡΠ΄ΡΡΠ΅Π΅ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΈΠ·Π±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΎΡ ΠΈΠΌΠ΅ΡΡΠΈΡ ΡΡ unsafe-Π±Π»ΠΎΠΊΠΎΠ², ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΠΈ Π²ΡΠ³ΡΡΠ·ΠΊΠΈ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ°, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° sysfs, ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° Π΄Π»Ρ blk-mq ΠΈ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ queue_rq.
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ NCC Group ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΡ ΠΏΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΎΠ² Π½Π° ΡΠ·ΡΠΊΠ΅ Rust Π΄Π»Ρ ΡΠ΄ΡΠ° FreeBSD. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΡΡΡ ΠΏΡΠΎΡΡΠΎΠΉ echo-Π΄ΡΠ°ΠΉΠ²Π΅Ρ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΠΉ Π΄Π°Π½Π½ΡΠ΅, Π·Π°ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π² ΡΠ°ΠΉΠ» /dev/rustmodule. ΠΠ° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΡΠ°ΠΏΠ΅ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΎΠ² NCC Group ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π° ΡΠ·ΡΠΊΠ΅ Rust Π±Π°Π·ΠΎΠ²ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΡΠ΄ΡΠ° Π΄Π»Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΡΠ΅ΡΠ΅Π²ΡΡ ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ.
ΠΡΠΈ ΡΡΠΎΠΌ, Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΎΡΡΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π½Π° ΡΠ·ΡΠΊΠ΅ Rust, Π±ΠΎΠ»Π΅Π΅ ΠΏΠ»ΠΎΡΠ½Π°Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Rust Π² ΡΠ΄ΡΠΎ FreeBSD ΠΏΠΎΡΡΠ΅Π±ΡΠ΅Ρ ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΏΠΎΠΌΠΈΠ½Π°Π΅ΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½Π°Π±ΠΎΡΠ° ΡΠ»ΠΎΡΠ² Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ Π½Π°Π΄ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ ΠΈ ΡΡΡΡΠΊΡΡΡΠ°ΠΌΠΈ ΡΠ΄ΡΠ°, ΠΏΠΎΡ ΠΎΠΆΠΈΡ Π½Π° Π½Π°Π΄ΡΡΡΠΎΠΉΠΊΠΈ, ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ Rust for Linux. Π Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ ΠΏΠΎΡ ΠΎΠΆΠΈΠ΅ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΡ Ρ ΡΠ΄ΡΠΎΠΌ Illumos ΠΈ Π²ΡΠ΄Π΅Π»ΠΈΡΡ ΠΎΠ±ΡΠΈΠ΅ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ Π½Π° Rust, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ Π½Π° Rust Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ°Ρ Π΄Π»Ρ Linux, BSD ΠΈ Illumos.
ΠΠΎ Π΄Π°Π½Π½ΡΠΌ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ Microsoft ΠΈ Google ΠΎΠΊΠΎΠ»ΠΎ 70% ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠ΅ΠΉ Π² ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°Ρ Π²ΡΠ·Π²Π°Π½Ρ Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠΎΠΉ Ρ ΠΏΠ°ΠΌΡΡΡΡ. ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ·ΡΠΊΠ° Rust ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΡΠ½ΠΈΠ·ΠΈΡΡ ΡΠΈΡΠΊ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠ΅ΠΉ, Π²ΡΠ·Π²Π°Π½Π½ΡΡ Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠΎΠΉ Ρ ΠΏΠ°ΠΌΡΡΡΡ, ΠΈ ΠΈΡΠΊΠ»ΡΡΠΈΡΡ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΊΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ, ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎΡΠ»Π΅ Π΅Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΈ Π²ΡΡ ΠΎΠ΄ Π·Π° Π³ΡΠ°Π½ΠΈΡΡ Π±ΡΡΠ΅ΡΠ°.
ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½Π°Ρ ΡΠ°Π±ΠΎΡΠ° Ρ ΠΏΠ°ΠΌΡΡΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ Π² Rust Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΡΠ΅ΡΠ΅Π· ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΡΡΠ»ΠΎΠΊ, ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ Π²Π»Π°Π΄Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΠΈ ΡΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² (ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ), Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅ΡΠ΅Π· ΠΎΡΠ΅Π½ΠΊΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΏΠ°ΠΌΡΡΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°. Rust ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠ΅Π΄ΡΡΠ²Π° Π΄Π»Ρ Π·Π°ΡΠΈΡΡ ΠΎΡ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ
ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ, ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΏΠ΅ΡΠ΅Π΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, Π»ΡΡΡΠ΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠΈ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡΠΈ (immutable) ΡΡΡΠ»ΠΎΠΊ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΡΠΈΠ»ΡΠ½ΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ Π΄Π»Ρ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΎΡΠΈΠ±ΠΎΠΊ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru