Апублікаваны NBD-VRAM

Апублікаваны адкрыты праект NBD-VRAM, які дазваляе задзейнічаць частку відэапамяці NVIDIA GPU як swap-прастору ў Linux. Праект арыентаваны першым чынам на наўтбукі з разлітаванай аператыўнай памяццю, дзе RAM нельга пашырыць, але пры гэтым у сістэме ёсць дыскрэтная відэакарта NVIDIA RTX/GTX з невыкарыстоўванай VRAM. Код напісаны на C і shell, распаўсюджваецца пад ліцэнзіяй Масачусецкі тэхналагічны інстытут.

Ідэя NBD-VRAM простая: калі сістэма ўжо пачынае сыходзіць у swap на SSD, можна паставіць перад SSD яшчэ адзін прамежкавы пласт - відэапамяць. Аўтар прыводзіць прыклад з наўтбукам на Ноўтбук з RTX 3070: з 8 ГБ VRAM было выдзелена 7 ГБ пад swap, а сумарна з RAM, zram і SSD swap сістэма атрымала каля 46 ГБ адрасаванай памяці. Меркаваны парадак перапаўнення такі: спачатку выкарыстоўваецца RAM, затым VRAM як хуткі swap, затым zram, і толькі пасля гэтага SSD.

Тэхнічна NBD-VRAM не дадае новы драйвер ядра. Невялікі дэман вылучае памяць відэакарткі праз CUDA Driver API, затым аддае яе ядру Linux як блокавая прылада праз НБД - Network Block Device - па-над Unix-сокета. Пасля падлучэння стандартным nbd-client у сістэме з'яўляецца /dev/nbdX, якое можна размеціць як звычайны swap праз mkswap і ўлучыць праз swapon.

Аўтар асобна падкрэслівае, што такі падыход абраны з-за абмежаванняў спажывецкіх відэакартай NVIDIA. Больш за прамы шлях праз NVIDIA P2P API на GeForce, па ім словам, упіраецца ў EINVAL, бо якія адпавядаюць магчымасці фактычна даступныя толькі для прафесійных і серверных мадэляў. Варыянт з прамым зваротам да BAR1 таксама не спрацаваў: даступнай аказваецца толькі невялікая адлюстраваная вобласць, а чытанне з астатняй часткі вяртае нулі. NBD-падыход абыходзіць гэтае абмежаванне, бо выкарыстоўвае звычайныя CUDA-капіраванні cuMemcpyHtoD і cuMemcpyDtoH.

Магчымасці

  • Выкарыстанне VRAM як звычайнага Linux своп. Пасля запуску дэман падае відэапамяць як /dev/nbd0 ці іншая NBD-прылада, якое для ядра выглядае як стандартная блокавая прылада.

  • Праца без уласнага модуля ядра. Праект не патрабуе пісаць, збіраць і суправаджаць асобны kernel module, не выкарыстоўвае ўнутраныя знакі NVIDIA-драйвера і павінен перажываць абнаўленні ядра і драйвера без перазборкі.

  • Арыентацыя на спажывецкія NVIDIA GPU. У патрабаваннях указаны NVIDIA GPU з падтрымкай CUDA, уключаючы спажывецкія RTX/GTX-карты, афіцыйны NVIDIA-драйвер з libcuda.so.1, модуль nbd у ядры Linux, nbd-client, gcc і make. CUDA Toolkit пры гэтым не патрэбен.

  • systemd-інтэграцыя. Устаноўка праз install.sh дадае сэрвіс vram-swap-nbd, які можна запускаць праз systemctl; пасля ўстаноўкі сэрвіс уключаецца для аўтаматычнага старту пры загрузцы.

  • Настройка памеру і прыярытэту swap. У systemd-unit можна задаць VRAM_SETUP_SIZE_MB, гэта значыць верхняя мяжа вылучаемай VRAM, і VRAM_SWAP_PRIORITY, гэта значыць прыярытэт swap-прылады. Чым вышэй прыярытэт, тым раней Linux будзе выкарыстоўваць гэты swap-пласт.

  • Аўтаматычнае памяншэнне запытанага памеру. Калі патрабаваны аб'ём VRAM недаступны, дэман спрабуе памяншаць памер блокамі па 512 МіБ, каб усё роўна вылучыць даступны аб'ём, напрыклад калі частка памяці ўжо занятая кампазітарам ці графічнай сесіяй.

  • Праверачныя сцэнары. У рэпазітары ёсць test-nbd.sh для смок-тэста з запісам/чытаннем 1 МіБ і test-fill.sh для стрэс-праверкі ўсяго VRAM-падзелу.

  • Заяўленая прадукцыйнасць каля 1,3 ГБ/С. На RTX 3070 Laptop аўтар вымераў паслядоўны запіс 7 ГБ блокамі па 4 МБ прыкладна на ўзроўні 1,3 ГБ/з.

Скрыпты

Наўтбукі з разлітаванай RAM. Галоўны сцэнар - сучасныя наўтбукі, дзе 16 або 32 ГБ аператыўнай памяці ўжо не хапае, але пашырыць яе немагчыма. Калі ў такой машыне ёсць дыскрэтная RTX-карта, частка VRAM можна выкарыстоўваць як дадатковы swap-пласт. Гэта не ператварае VRAM у паўнавартасную RAM, але можа выратаваць сістэму ад рэзкага сыходу ў павольны SSD swap ці ад OOM-killer пры пікавых нагрузках.

Цяжкія працоўныя асяроддзі распрацоўшчыка. IDE, браўзэр з дзясяткамі ўкладак, Docker-кантэйнеры, лакальныя базы дадзеных, зборкі вялікіх праектаў і тэставыя асяроддзі лёгка ствараюць кароткачасовыя пікі спажывання памяці. У такім сцэнары NBD-VRAM можа працаваць як буфер: не паскараць звычайную працу, а змякчаць момант, калі RAM скончылася.

Зніжэнне нагрузкі на SSD swap. Калі swap на SSD выкарыстоўваецца часта, гэта не толькі павольней, але і стварае лішні запіс на назапашвальнік. VRAM-swap можна паставіць з больш высокім прыярытэтам, каб пры перапаўненні RAM сістэма спачатку выцясняла старонкі ў відэапамяць, а ўжо потым звярталася да SSD. Асабліва гэта актуальна для наўтбукаў, дзе SSD таксама часта няздымны ці дарагі ў замене.

Камбінацыя з zram. Аўтар прама апісвае схему, дзе VRAM swap атрымлівае больш высокі прыярытэт і прымае першы разліў памяці, zram выкарыстоўваецца наступным узроўнем, а SSD застаецца апошняй лініяй абароны. Такая схема можа быць карысная для працоўных станцый і наўтбукаў, дзе важней захаваць спагадлівасць сістэмы пры недахопе памяці, чым атрымаць максімальную прадказальнасць затрымак.

Лакальныя AI/LLM-задачы вакол GPU, але не замест VRAM для мадэлі. NBD-VRAM не павялічвае відэапамяць, даступную CUDA-дадатку як VRAM для мадэлі. Гэта зваротны сцэнар: не RAM выкарыстоўваецца як VRAM, а VRAM выкарыстоўваецца як swap для звычайнай памяці Linux. Таму праект не дазволіць наўпрост загрузіць у GPU мадэль большага памеру. Але ён можа быць карысны на машыне, дзе побач з LLM-інферэнсам працуюць браўзэр, IDE, індэксатары, Python-акружэнні і кантэйнеры, а сістэмная RAM пачынае сканчацца.

Хатнія і эксперыментальныя працоўныя станцыі. Праект цікавы для карыстальнікаў, у якіх відэакарта часта прастойвае па-за гульнямі, рэндэрамі або ML-задачамі. Напрыклад, 8-12 ГБ VRAM на дэсктопнай GeForce можна часова ператварыць у дадатковы пласт swap для цяжкіх задач кампіляцыі, апрацоўкі дадзеных або запуску віртуальных машын.

Абмежаванні

NBD-VRAM не з`яўляецца заменай аператыўнай памяці. Доступ да такога swap ідзе па ланцужку kernel swap → /dev/nbdX → nbd-драйвер → Unix-сокет → дэман → CUDA-капіраванне → VRAM, таму затрымкі і паводзіны будуць адрознівацца ад сапраўднай RAM. Гэта хутчэй аварыйны ці прамежкавы пласт паміж RAM і SSD, чым спосаб "дадаць памяці" без наступстваў.

Таксама праект завязаны на афіцыйны стэк NVIDIA з CUDA. Nouveau/Nova для гэтага не падыходзяць, бо патрабуецца libcuda.so.1. Phoronix таксама адзначае, Што NBD-VRAM створаны менавіта для спажывецкіх NVIDIA GPU, дзе альтэрнатыўныя падыходы праз NVIDIA P2P API не працуюць.

У сухой рэштцы, NBD-VRAM – невялікі, але цікаўны сістэмны хак для Linux: ён не робіць цудаў і не замяняе апгрэйд RAM, але дазваляе выкарыстоўваць прастойваюць відэапамяць як дадатковую прыступку swap перад SSD. Для наўтбукаў з разлітаванай памяццю і дыскрэтнай RTX-картай гэта можа апынуцца практычным спосабам перажываць пікавыя нагрузкі без неадкладнага падзення прыкладанняў ці хваравітага сыходу ў павольны назапашвальнік.

Крыніца: linux.org.ru

Купіць надзейны хостынг для сайтаў з абаронай ад DDoS, VPS VDS серверы 🔥 Купіць надзейны хостынг для сайтаў з абаронай ад DDoS, VPS VDS серверы | ProHoster