Red Hat Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅Ρ‚ Π½ΠΎΠ²ΡƒΡŽ Π€Π‘ NVFS, ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ для NVM-памяти

ΠœΠΈΠΊΡƒΠ»Π°Ρˆ ΠŸΠ°Ρ‚ΠΎΡ‡ΠΊΠ° (Mikuláš Patočka), ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² LVM ΠΈ Π°Π²Ρ‚ΠΎΡ€ ряда ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½ΠΈΠΉ, связанных с ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСм хранСния, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Red Hat, прСдставил Π² спискС рассылки Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ядра Linux Π½ΠΎΠ²ΡƒΡŽ Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму NVFS, Π½Π°Ρ†Π΅Π»Π΅Π½Π½ΡƒΡŽ Π½Π° созданиС ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎΠΉ ΠΈ быстрой Π€Π‘ для Ρ‡ΠΈΠΏΠΎΠ² энСргонСзависимой памяти (NVM, non-volatile memory, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ NVDIMM), ΡΠΎΡ‡Π΅Ρ‚Π°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠžΠ—Π£ с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ постоянного хранСния содСрТимого.

ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ NVFS ΡƒΡ‡Ρ‚Ρ‘Π½ ΠΎΠΏΡ‹Ρ‚ Π€Π‘ NOVA, Π² 2017 Π³ΠΎΠ΄Ρƒ созданной ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для NVM-памяти, Π½ΠΎ Π½Π΅ принятой Π² состав ядра Linux ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ ядСр Linux с 4.13 ΠΏΠΎ 5.1.
ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Π°Ρ Π€Π‘ NVFS Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ NOVA (4972 строк ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΡ‚ΠΈΠ² 21459), прСдоставляСт ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ fsck, ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ высокой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ (xattrs), ΠΌΠ΅Ρ‚ΠΊΠΈ бСзопасности, ACL ΠΈ ΠΊΠ²ΠΎΡ‚Ρ‹, Π½ΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΡΠ½Π°ΠΏΡˆΠΎΡ‚Ρ‹. AΡ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° NVFS Π±Π»ΠΈΠ·ΠΊΠ° ΠΊ
Π€Π‘ Ext4 ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ укладываСтся Π² модСль Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСм Π½Π° основС подсистСмы VFS, Ρ‡Ρ‚ΠΎ позволяСт свСсти ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ число прослоСк ΠΈ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ, Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠΌ внСсСния ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ Π² ядро.

NVFS ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ интСрфСйс ядра DAX для прямого доступа ΠΊ устройствам постоянной памяти Π² ΠΎΠ±Ρ…ΠΎΠ΄ страничного кэша. Для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ NVM, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ примСняСтся байтовая адрСсация, содСрТимоС накопитСля отобраТаСтся Π² Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ адрСсноС пространство ядра Π±Π΅Π· примСнСния Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ уровня Π±Π»ΠΎΡ‡Π½Ρ‹Ρ… устройств ΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ кэша. Для хранСния содСрТимого ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ базисноС Π΄Π΅Ρ€Π΅Π²ΠΎ (radix tree), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ имя Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΎΡ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ…ΡΡˆΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ поискС Π² Π΄Π΅Ρ€Π΅Π²Π΅.

Π¦Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… обСспСчиваСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° «soft updates» (ΠΊΠ°ΠΊ Π² UFS ΠΈΠ· FreeBSD ΠΈ Π² FFS ΠΈΠ· OpenBSD) Π±Π΅Π· примСнСния Турналирования. Для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ поврСТдСния Ρ„Π°ΠΉΠ»ΠΎΠ² Π² NVFS ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ измСнСния Π΄Π°Π½Π½Ρ‹Ρ… Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΡ€Π°Ρ… Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ Π±Π»ΠΎΠΊΠΎΠ² ΠΈΠ»ΠΈ inode, Π° Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ структур восстанавливаСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ fsck. Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° fsck Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΈ обСспСчиваСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° 1.6 ΠΌΠ»Π½ inode Π² сСкунду.

Π’ тСстах ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ NVFS Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ копирования Π΄Π΅Ρ€Π΅Π²Π° с исходными тСкстами ядра Linux Π½Π° NVM-памяти ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π½Π° 10% быстрСС NOVA, Π½Π° 30% быстрСС ext4 ΠΈ Π½Π° 37% быстрСС XFS. Π’ тСстС Π½Π° поиск Π΄Π°Π½Π½Ρ‹Ρ… Π€Π‘ NVFS оказалась быстрСС NOVA Π½Π° 3%, Π° ext4 ΠΈ XFS Π½Π° 15% (Π½ΠΎ ΠΏΡ€ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ дисковом кэшС NOVA оказалась ΠΌΠ΅Π΄Π»Π΅Π½Π΅Π΅ Π½Π° 15%).
Π’ тСстС Π½Π° ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌΠΈ NVFS ΠΎΠΏΠ΅Ρ€Π΅Π΄ΠΈΠ»Π° NOVA Π½Π° 40%, ext4 Π½Π° 22%, Π° XFS Π½Π° 46%. ΠŸΡ€ΠΈ симуляции активности Π‘Π£Π‘Π” файловая систСма NVFS ΠΎΠΏΠ΅Ρ€Π΅Π΄ΠΈΠ»Π° NOVA Π½Π° 20%, ext4 Π² 18 Ρ€Π°Π· ΠΈ XFS Π² 5 Ρ€Π°Π·. Π’ тСстС fs_mark ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ NVFS ΠΈ NOVA оказались ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅, Π° ext4 ΠΈ XFS отстали ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π² 3 Ρ€Π°Π·Π°.

ΠžΡ‚ΡΡ‚Π°Π²Π°Π½ΠΈΠ΅ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Π€Π‘ Π½Π° NVM-памяти обусловлСно Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ рассчитаны Π½Π° Π±Π°ΠΉΡ‚ΠΎΠ²ΡƒΡŽ Π°Π΄Ρ€Π΅ΡΠ°Ρ†ΠΈΡŽ, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡƒΡŽ Π² энСргонСзависимой памяти, которая выглядит ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ ΠžΠ—Π£. Π§Ρ‚Π΅Π½ΠΈΠ΅ с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Π½Π°ΠΊΠΎΠΏΠΈΡ‚Π΅Π»Π΅ΠΉ обСспСчиваСт Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ чтСния/записи сСктора, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ NVM-ΠΏΠ°ΠΌΡΡ‚ΡŒ обСспСчиваСт доступ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… слов. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π€Π‘ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Π½ΡΠΈΠ²Π½ΠΎΡΡ‚ΡŒ обращСния ΠΊ Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŽ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ рассматриваСтся ΠΊΠ°ΠΊ Π·Π°Π²Π΅Π΄ΠΎΠΌΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ, Ρ‡Π΅ΠΌ опСративная ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ для обСспСчСния ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ чтСния ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Тёстких дисков, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ запросов, Π±ΠΎΡ€ΠΎΡ‚ΡŒΡΡ с Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ ΠΈ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Ρ‹ выполнСния Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. Для NVM-памяти ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ услоТнСния излишни, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ обращСния ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ сопоставима с ΠžΠ—Π£, Π° порядок доступа Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru