{"id":475042,"date":"2025-09-16T11:28:59","date_gmt":"2025-09-16T11:28:59","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=475042"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"kak-my-videokartu-amd-na-plis-s-risc-v-i-linux-zapuskali","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=475042","title":{"rendered":"\u041a\u0430\u043a \u043c\u044b \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0443 AMD \u043d\u0430 \u041f\u041b\u0418\u0421 \u0441 RISC-V \u0438 Linux \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0438"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0421\u0435\u0440\u0433\u0435\u0439 \u041c\u0438\u0440\u043e\u0448\u043d\u0438\u0447\u0435\u043d\u043a\u043e. \u042f \u0440\u0443\u043a\u043e\u0432\u043e\u0436\u0443 \u0433\u0440\u0443\u043f\u043f\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f <a href=\"https:\/\/yadro.com\/?utm_source=habr&amp;utm_medium=referral&amp;utm_campaign=amdgpu_riscv_160925\">\u0432 YADRO<\/a>. \u041c\u043e\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u0431\u0443\u0434\u0435\u0442 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c AMD GPU \u043d\u0430 \u041f\u041b\u0418\u0421 \u0441 RISC-V \u0438 Linux.<\/p>\n<p>\u041d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0432\u0441\u0435 \u0441 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 PCIe-\u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0430\u0448\u0435\u0439 \u0421\u043d\u041a. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0432\u0437\u044f\u043b\u0438 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0440\u0430\u0431\u043e\u0447\u0438\u0435 NVMe \u0438 \u0432\u0438\u0434\u0435\u043e\u0443\u0441\u043a\u043e\u0440\u0438\u0442\u0435\u043b\u044c \u0441 \u043f\u043e\u043b\u043d\u044b\u043c \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u043e\u043c \u041f\u041e \u0434\u043b\u044f \u043d\u0438\u0445 (\u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0432 \u0432\u0430\u043d\u0438\u043b\u044c\u043d\u043e\u043c \u044f\u0434\u0440\u0435 Linux, \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a).<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0432\u044b\u0441\u043e\u043a\u043e\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u043d\u043e\u0439 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438, \u0442\u043e, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0440\u0435\u0447\u044c \u0438\u0434\u0435\u0442 \u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445 \u0438 \u041f\u041a, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 x86. \u041d\u043e \u0435\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f (\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f!) \u043e\u0442 \u0442\u0435\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0421\u043d\u041a, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c. \u0412\u0441\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0435 \u0442\u0435\u0437\u0438\u0441\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u044b \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043a RISC-V, \u043d\u043e \u0438 \u043a \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435.<\/p>\n<h2>\u0412\u0441\u0435 \u043f\u043e\u0437\u043d\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438<\/h2>\n<p>\u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0442\u0435\u043e\u0440\u0438\u0438, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u2014\u00a0\u0441 \u043a\u0440\u0430\u0442\u043a\u043e\u0433\u043e \u044d\u043a\u0441\u043a\u0443\u0440\u0441\u0430 \u0432 PCI-Express \u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044b. PCI-Express, \u0438\u043b\u0438 PCIe (Peripheral Component Interconnect Express), \u2014 \u044d\u0442\u043e \u043d\u0435\u043e\u0442\u044a\u0435\u043c\u043b\u0435\u043c\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0432\u0441\u0435\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c. \u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043d\u043e\u0432\u043e\u0439 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439, RISC-V \u043c\u0430\u0448\u0438\u043d\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439, \u0435\u0441\u043b\u0438 \u0432 \u043d\u0435\u0439 \u043d\u0435\u0442 PCIe. \u041f\u043e\u0442\u043e\u043c\u0443 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0443\u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a \u0438 \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 RISC-V \u0432 \u043e\u0431\u0449\u0435\u043c \u0438 \u043d\u0430\u0448\u0438 \u0421\u043d\u041a \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b \u0441 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c\u0438 \u043d\u0430\u043c \u043a\u0430\u0440\u0442\u0430\u043c\u0438 \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 PCIe.<\/p>\n<p>PCIe \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044e, \u0438\u043c\u0435\u044e\u0449\u0443\u044e \u0431\u00f3\u043b\u044c\u0448\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u0447\u0435\u043c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0430 \u043a\u0440\u0438\u0441\u0442\u0430\u043b\u043b\u0435. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u0441\u043e\u043a\u043e\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u043d\u043e\u0439 Ethernet \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 InfiniBand \u0438 RDMA \u0438\u043b\u0438 \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u044c \u0441 \u0431\u043e\u043b\u0435\u0435 \u0448\u0438\u0440\u043e\u043a\u0438\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438, \u0447\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0430\u044f SPI-\u0444\u043b\u0435\u0448\u043a\u0430 \u0441 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u043e\u0439 \u0438\u043b\u0438 \u043c\u043e\u0434\u043d\u0435\u0439\u0448\u0438\u0439 eMMC. \u041d\u0430\u043c \u043c\u043e\u0436\u0435\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043b\u0438\u0431\u043e \u043e\u0431\u044a\u0435\u043c\u043d\u044b\u0439 \u0448\u043f\u0438\u043d\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u0438\u0441\u043a, \u043b\u0438\u0431\u043e NVMe, \u0438 \u0434\u0430\u0436\u0435 \u043d\u0435 \u043e\u0434\u0438\u043d, \u0430 \u0446\u0435\u043b\u0430\u044f \u0438\u0445 \u043a\u043e\u0440\u0437\u0438\u043d\u0430.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0b2\/9ea\/75f\/0b29ea75fb1d60006c3df67f3f2afa2b.png\" alt=\"\u041e\u0434\u0438\u043d \u0438\u0437 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0439 \u043f\u043e\u043b\u043a\u0438 \u0421\u0425\u0414 TATLIN \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f PCIe-\u0441\u0432\u0438\u0442\u0447 \u0438 \u043a\u043e\u0440\u0437\u0438\u043d\u043a\u0443 \u0438\u0437 34 NVMe-\u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u0435\u0439 \u0438 \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0430\u043f\u0442\u0435\u0440 SAS-PCIe (\u0432\u044b\u0434\u0432\u0438\u043d\u0443\u0442), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u0443\u0435\u0442 \u0434\u0438\u0441\u043a\u0438 \u0432 \u0435\u0434\u0438\u043d\u044b\u0439 PCIe link (\u0444\u043e\u0442\u043e \u0441\u043b\u0435\u0432\u0430), \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0441\u0430\u0434\u043e\u0447\u043d\u044b\u0435 \u043c\u0435\u0441\u0442\u0430 \u0434\u043b\u044f 90 SAS-\u0434\u0438\u0441\u043a\u043e\u0432 (\u0444\u043e\u0442\u043e \u0441\u043f\u0440\u0430\u0432\u0430)\" title=\"\u041e\u0434\u0438\u043d \u0438\u0437 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0439 \u043f\u043e\u043b\u043a\u0438 \u0421\u0425\u0414 TATLIN \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f PCIe-\u0441\u0432\u0438\u0442\u0447 \u0438 \u043a\u043e\u0440\u0437\u0438\u043d\u043a\u0443 \u0438\u0437 34 NVMe-\u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u0435\u0439 \u0438 \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0430\u043f\u0442\u0435\u0440 SAS-PCIe (\u0432\u044b\u0434\u0432\u0438\u043d\u0443\u0442), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u0443\u0435\u0442 \u0434\u0438\u0441\u043a\u0438 \u0432 \u0435\u0434\u0438\u043d\u044b\u0439 PCIe link (\u0444\u043e\u0442\u043e \u0441\u043b\u0435\u0432\u0430), \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0441\u0430\u0434\u043e\u0447\u043d\u044b\u0435 \u043c\u0435\u0441\u0442\u0430 \u0434\u043b\u044f 90 SAS-\u0434\u0438\u0441\u043a\u043e\u0432 (\u0444\u043e\u0442\u043e \u0441\u043f\u0440\u0430\u0432\u0430)\" width=\"2639\" height=\"1292\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/0b2\/9ea\/75f\/0b29ea75fb1d60006c3df67f3f2afa2b.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0b2\/9ea\/75f\/0b29ea75fb1d60006c3df67f3f2afa2b.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041e\u0434\u0438\u043d \u0438\u0437 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0439 \u043f\u043e\u043b\u043a\u0438 \u0421\u0425\u0414 TATLIN \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f PCIe-\u0441\u0432\u0438\u0442\u0447 \u0438 \u043a\u043e\u0440\u0437\u0438\u043d\u043a\u0443 \u0438\u0437 34 NVMe-\u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u0435\u0439 \u0438 \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0430\u043f\u0442\u0435\u0440 SAS-PCIe (\u0432\u044b\u0434\u0432\u0438\u043d\u0443\u0442), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u0443\u0435\u0442 \u0434\u0438\u0441\u043a\u0438 \u0432 \u0435\u0434\u0438\u043d\u044b\u0439 PCIe link (\u0444\u043e\u0442\u043e \u0441\u043b\u0435\u0432\u0430), \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0441\u0430\u0434\u043e\u0447\u043d\u044b\u0435 \u043c\u0435\u0441\u0442\u0430 \u0434\u043b\u044f 90 SAS-\u0434\u0438\u0441\u043a\u043e\u0432 (\u0444\u043e\u0442\u043e \u0441\u043f\u0440\u0430\u0432\u0430)<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/420\/167\/1eb\/4201671eba862d330911bfa3af8a7281.png\" alt=\"\u041f\u041b\u0418\u0421 \u0441 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0439 \u043a \u043d\u0435\u043c\u0443 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u043e\u0439. \u0427\u0435\u0440\u0435\u0437 \u0430\u0434\u0430\u043f\u0442\u0435\u0440 \u0432 \u043b\u0435\u0432\u043e\u043c \u043d\u0438\u0436\u043d\u0435\u043c \u0443\u0433\u043b\u0443 \u0434\u0432\u0443\u0445\u044e\u043d\u0438\u0442\u043e\u0432\u043e\u0435 \u0448\u0430\u0441\u0441\u0438 \u0441 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a \u043c\u0430\u0448\u0438\u043d\u0435\" title=\"\u041f\u041b\u0418\u0421 \u0441 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0439 \u043a \u043d\u0435\u043c\u0443 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u043e\u0439. \u0427\u0435\u0440\u0435\u0437 \u0430\u0434\u0430\u043f\u0442\u0435\u0440 \u0432 \u043b\u0435\u0432\u043e\u043c \u043d\u0438\u0436\u043d\u0435\u043c \u0443\u0433\u043b\u0443 \u0434\u0432\u0443\u0445\u044e\u043d\u0438\u0442\u043e\u0432\u043e\u0435 \u0448\u0430\u0441\u0441\u0438 \u0441 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a \u043c\u0430\u0448\u0438\u043d\u0435\" width=\"1796\" height=\"1500\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/420\/167\/1eb\/4201671eba862d330911bfa3af8a7281.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/420\/167\/1eb\/4201671eba862d330911bfa3af8a7281.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u041b\u0418\u0421 \u0441 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0439 \u043a \u043d\u0435\u043c\u0443 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u043e\u0439. \u0427\u0435\u0440\u0435\u0437 \u0430\u0434\u0430\u043f\u0442\u0435\u0440 \u0432 \u043b\u0435\u0432\u043e\u043c \u043d\u0438\u0436\u043d\u0435\u043c \u0443\u0433\u043b\u0443 \u0434\u0432\u0443\u0445\u044e\u043d\u0438\u0442\u043e\u0432\u043e\u0435 \u0448\u0430\u0441\u0441\u0438 \u0441 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a \u043c\u0430\u0448\u0438\u043d\u0435<\/figcaption><\/div>\n<\/figure>\n<p>PCIe \u0437\u0430\u0432\u043e\u0435\u0432\u0430\u043b \u0441\u0435\u0440\u0434\u0446\u0430 \u043b\u044e\u0434\u0435\u0439 \u0437\u0430 \u0441\u0447\u0435\u0442 \u0441\u0432\u043e\u0435\u0439 \u0431\u044b\u0441\u0442\u0440\u043e\u0442\u044b \u0438 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430. \u041f\u043e\u0434 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0435\u0449\u0438: \u0432\u0441\u0435 \u043f\u043e\u0437\u043d\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438.<\/p>\n<p>\u0412\u043e\u0437\u044c\u043c\u0435\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0438 \u043c\u043d\u043e\u0433\u0438\u043c \u0437\u043d\u0430\u043a\u043e\u043c\u0443\u044e \u0448\u0438\u043d\u0443 i2c. \u0412 API \u044f\u0434\u0440\u0430 Linux \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0438\u0437 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u043e i2c \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439: \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 \u043f\u043e \u0435\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0443 \u0441 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435, \u0437\u0430\u0442\u0435\u043c \u0447\u0442\u0435\u043d\u0438\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0432 \u043e\u0442\u0432\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445. \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u044d\u0442\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u0432\u0438\u0434\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u2014 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0437 \u0434\u0432\u0443\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 ([0], [1]) \u2014 \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043c\u044b \u0438\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0441\u0430\u043c\u043e\u0439 \u0448\u0438\u043d\u044b, \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u043d\u0435\u0439, \u0444\u043b\u0430\u0433\u0430\u043c\u0438, \u0430\u0434\u0440\u0435\u0441\u0430\u043c\u0438 \u0438 \u0434\u043b\u0438\u043d\u0430\u043c\u0438 \u0431\u0443\u0444\u0435\u0440\u043e\u0432.<\/p>\n<p>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f \u0443 i2c:<\/p>\n<pre><code class=\"cpp\">\/\/ linux\/drivers\/net\/phy\/sfp.cint sfp_i2c_read(){  msgs[0].addr = bus_addr;  msgs[0].flags = 0;  msgs[0].len = 1;  msgs[0].buf = &amp;dev_addr;  msgs[1].addr = bus_addr;  msgs[1].flags = I2C_M_RD;  msgs[1].len = len;  msgs[1].buf = buf;  i2c_transfer(sfp-&gt;i2c, msgs, ARRAY_SIZE(msgs));}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u043d\u0430 \u0448\u0438\u043d\u0435 i2c \u043c\u044b \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u043c \u043d\u0435 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u0430 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u043d\u0430\u0431\u043e\u0440\u0442\u043d\u043e\u0433\u043e i2c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430: \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0431\u0430\u0439\u0442\u0443 \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0438\u0445 \u0432 FIFO. \u0425\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u043d\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c i2c \u2014 ~100 \u043a\u0431\u0438\u0442\/\u0441. \u041e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0442\u0430\u043a\u0442\u043e\u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u043c\u044b \u0442\u0440\u0430\u0442\u0438\u043c \u043d\u0430 \u043c\u0435\u0445\u0430\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0435\u0439 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0442\u043e\u043c \u0434\u0440\u0430\u0439\u0432\u0435\u0440 i2c-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b \u0438\u0445 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b \u043f\u043e\u0431\u0430\u0439\u0442\u043d\u043e \u0432 \u0448\u0438\u043d\u0443. \u0422\u043e \u0435\u0441\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0445\u043e\u0442\u0438\u043c \u043f\u0440\u043e\u0447\u0435\u0441\u0442\u044c 4 \u0431\u0430\u0439\u0442\u0430, \u043d\u0443\u0436\u043d\u043e \u0434\u0432\u0443\u0445\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0441\u043b\u043e\u0438 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438, \u0437\u0430\u0442\u0440\u0430\u0447\u0438\u0432\u0430\u044f \u043d\u0430 \u044d\u0442\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430.<\/p>\n<p>FIFO i2c \u2014 \u044d\u0442\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0432\u043d\u0443\u0442\u0440\u0438 i2c-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u043f\u0430\u043c\u044f\u0442\u044c. \u041e\u043d \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0430\u0434\u0440\u0435\u0441 \u0432 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043c\u0435\u0440\u0442\u0432\u043e \u043f\u0440\u0438\u0431\u0438\u0442 \u0435\u0449\u0435 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 RTL-\u0434\u0438\u0437\u0430\u0439\u043d\u0430. \u041c\u044b \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u043c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430\u043c Linux \u0435\u0433\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u044b (\u0447\u0435\u0440\u0435\u0437 Device Tree \u0438\u043b\u0438 ACPI).<\/p>\n<p>\u041e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0439 <code>read*()<\/code> \u0438 <code>write*()<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u0443\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u043f\u0430\u043c\u044f\u0442\u0438: \u043b\u0438\u0431\u043e <code>load byte<\/code> \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435, \u043b\u0438\u0431\u043e <code>store byte<\/code> (\u043f\u043b\u044e\u0441 \u0431\u0430\u0440\u044c\u0435\u0440\u044b \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438):<\/p>\n<pre><code class=\"cpp\">\/\/ drivers\/i2c\/busses\/i2c-imx.cimx_i2c_read_reg(i2c_imx, reg){   return readb(i2c_imx-base + (reg &lt;&lt; i2c_imx&gt;regshift));}i2c_imx_read(i2c_imx, msgs){  msgs-&gt;buf[i] = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR);}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h3>\u0427\u0435\u043c \u0436\u0435 \u043b\u0443\u0447\u0448\u0435 \u043d\u0430\u0448 PCIe?<\/h3>\n<p>\u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 i2c \u0443 PCIe \u0435\u0441\u0442\u044c \u0442\u0440\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438.<\/p>\n<p>\u0423 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 (\u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e) \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0449\u0435\u0433\u043e \u0441 i2c: \u043c\u044b \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0440\u0430\u0437\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0432 \u043f\u043e\u0445\u043e\u0436\u0438\u0445 \u043d\u0430 i2c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445.<\/p>\n<p>\u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e PCIe-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0443 \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u043b\u043e\u0442\u0430, \u043a\u0443\u0434\u0430 \u043c\u044b \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u044d\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u0432\u0441\u0435\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432. \u041f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u043e\u043d\u0438 \u0437\u0430\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u0427\u0430\u0441\u0442\u044c \u0438\u0445 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439, \u0438 \u0435\u0449\u0451 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043e \u043f\u043e\u0434 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0443 \u043e\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f. \u0418\u0437 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0435\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u0443\u0441 \u043b\u0438\u043d\u043a\u0430 (\u043f\u043e\u0434\u043d\u044f\u0442\/\u043d\u0435 \u043f\u043e\u0434\u043d\u044f\u0442), \u0435\u0433\u043e \u0448\u0438\u0440\u0438\u043d\u0443 \u0438 \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u0435, \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a, \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0438\u0442\u0430\u043d\u0438\u0435\u043c (\u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e) \u0438 \u043f\u0440\u043e\u0447\u0435\u0435. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b Vendor ID \u0438 Device ID \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0443 \u0441 \u043d\u0443\u0436\u043d\u044b\u043c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u043c.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/883\/419\/767\/8834197677c97fa396e045ecb2817317.png\" alt=\"\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0441\u0442\u044c \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u0441\u043b\u043e\u0442\u0430: \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f PCIe 6.2, Common Configuration Space Header\" title=\"\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0441\u0442\u044c \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u0441\u043b\u043e\u0442\u0430: \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f PCIe 6.2, Common Configuration Space Header\" width=\"898\" height=\"232\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/883\/419\/767\/8834197677c97fa396e045ecb2817317.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/883\/419\/767\/8834197677c97fa396e045ecb2817317.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0441\u0442\u044c \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u0441\u043b\u043e\u0442\u0430: \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f PCIe 6.2, Common Configuration Space Header<\/figcaption><\/div>\n<\/figure>\n<p>\u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0439 \u043d\u043e\u043c\u0435\u0440 \u043d\u0430 \u0448\u0438\u043d\u0435. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 i2c \u043d\u0430 \u043d\u0435\u0439 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f 127 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432. \u0423\u0442\u0438\u043b\u0438\u0442\u0430 <code>i2cdetect<\/code> \u0432 Linux \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u043e \u043a\u0430\u043a\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443 \u0435\u0441\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0436\u0438\u0432\u043e\u0435: \u043e\u043d\u0430 \u043f\u043e\u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0434\u043b\u0438\u043d\u044b \u043d\u0430 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0430\u0434\u0440\u0435\u0441, \u0438, \u0435\u0441\u043b\u0438 \u043d\u0430 \u0442\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0435\u0441\u0442\u044c \u043a\u0442\u043e-\u0442\u043e \u00ab\u0436\u0438\u0432\u043e\u0439\u00bb, \u0432 \u043e\u0442\u0432\u0435\u0442 \u043f\u0440\u0438\u0434\u0435\u0442 acknowledge.<\/p>\n<p>PCIe \u043c\u043e\u0436\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435: \u043f\u0440\u0438 \u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0435 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c 256 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043d\u043e\u043c\u0435\u0440\u043e\u0432 \u043d\u0430 \u0448\u0438\u043d\u0435 \u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0443 \u043d\u0438\u0445 \u0447\u0442\u0435\u043d\u0438\u0435 \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0441 Vendor ID \u0438 Device ID. \u0410 \u0435\u0441\u043b\u0438 \u043f\u0440\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442, \u0442\u043e \u043f\u0440\u0438\u0434\u0443\u0442 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0435 \u0431\u0438\u0442\u044b: \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e \u2014 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d.<\/p>\n<p>\u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f, \u044d\u0442\u043e\u0442 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u0440\u043e\u0441\u0442 \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438, \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 i2c, \u043a\u0440\u0430\u0439\u043d\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043e\u043d\u043b\u0430\u0439\u043d-\u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0438, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0438\u0442\u0430\u043d\u0438\u0435\u043c, \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, lane margining, \u043d\u043e \u043d\u0435 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043e\u0431\u044a\u0451\u043c\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<blockquote>\n<p>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 lane margining \u0438 \u043a\u0430\u043a \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e PCIe-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u044b, \u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0432 <a href=\"https:\/\/habr.com\/ru\/companies\/yadro\/articles\/810075\/\">\u0441\u0442\u0430\u0442\u044c\u0435<\/a>.<\/p>\n<\/blockquote>\n<p>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 NVMe \u0447\u0435\u0440\u0435\u0437 PCIe \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">\/\/ drivers\/nvme\/host\/pci.cnvme_pci_enable(dev){  if (readl(dev-&gt;bar + NVME_REG_CSTS) == -1)  {    result = -ENODEV;    goto disable;  }____pci_read_config_word(dev, PCI_STATUS, &amp;pci_status);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435: \u043e\u043d \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u043f\u0440\u044f\u043c\u043e\u0435 \u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u043d\u0430\u0431\u043e\u0440\u0442\u043d\u043e\u0439 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0435\u0439. \u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (\u0441\u0442\u0430\u0442\u0443\u0441\u043d\u044b\u0439 <code>NVME_REG_CSTS<\/code> \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435) \u043f\u0440\u043e\u0435\u0446\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043c\u0430\u0448\u0438\u043d\u044b. \u0417\u0434\u0435\u0441\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440 NVMe \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0447\u0438\u0442\u0430\u0435\u0442 \u043e\u0434\u0438\u043d \u0438\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 NVMe-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u043b\u0438\u043d\u043a \u0438\u043b\u0438 \u0434\u0438\u0441\u043a \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0438\u0437 \u0441\u0442\u0440\u043e\u044f, \u2014 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 PCIe \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u0441\u0435 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0435 \u0431\u0438\u0442\u044b, <code>0xffffffff<\/code>, \u043e\u0442\u0441\u044e\u0434\u0430 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441 -1.\u00a0<\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>readl()<\/code> \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u043d\u0443\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u043f\u0430\u043c\u044f\u0442\u0438. \u0422\u043e \u0435\u0441\u0442\u044c \u044d\u0442\u043e\u0442 \u0441\u043f\u043e\u0441\u043e\u0431 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f PCIe \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0438 \u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0439\u043d\u044b\u0445 API. \u0415\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0438\u043b\u0438 \u043f\u0430\u043c\u044f\u0442\u044c PCIe-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u043c\u044b \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043a \u043d\u0438\u043c \u0442\u0435\u043c\u0438 \u0436\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438, \u0447\u0442\u043e \u0438 \u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>\u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e PCIe-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e \u0448\u0435\u0441\u0442\u0438 \u0442\u0430\u043a\u0438\u0445 \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432 \u043f\u0430\u043c\u044f\u0442\u0438\/\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432. \u0414\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u0438\u0445 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 BAR \u2014 base address register. \u042d\u0442\u043e\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0430\u0434\u0440\u0435\u0441, \u0440\u0430\u0437\u043c\u0435\u0440 \u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0435 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u0443\u0447\u0430\u0441\u0442\u043a\u0430 \u043f\u0430\u043c\u044f\u0442\u0438. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 \u0421\u043d\u041a, \u0430\u0434\u0440\u0435\u0441\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 PCIe \u0431\u0443\u0434\u0443\u0442 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0438 \u043f\u043e\u044f\u0432\u044f\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0443 \u0438\u043b\u0438 NVMe, \u043e\u043d\u0438 \u043f\u043e\u044f\u0432\u044f\u0442\u0441\u044f \u0432 runtime, \u0438 Linux \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442 \u0438\u0445 BAR\u2019\u0430\u043c \u0430\u0434\u0440\u0435\u0441\u0430 \u00ab\u043d\u0430 \u0445\u043e\u0434\u0443\u00bb.\u00a0<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/435\/a31\/f63\/435a31f63984dde0ab80ad90b6623467.png\" width=\"1507\" height=\"706\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/435\/a31\/f63\/435a31f63984dde0ab80ad90b6623467.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/435\/a31\/f63\/435a31f63984dde0ab80ad90b6623467.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0410\u0434\u0440\u0435\u0441 BAR \u0432 Linux \u2014 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439, \u043a\u0430\u043a \u0438 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u044f\u0434\u0440\u043e\u043c \u041e\u0421 \u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430\u043c\u0438. \u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0439 <abbr class=\"habraabbr\" title=\"Memory management unit\" data-title=\"&lt;p&gt; Memory management unit&lt;\/p&gt;\" data-abbr=\"MMU\">MMU<\/abbr> \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u0443\u0435\u0442 \u0438\u0445 \u0432 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0421\u043d\u041a \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442 \u0432 56-\u0431\u0438\u0442\u043d\u043e\u043c (\u0432 \u0441\u043b\u0443\u0447\u0430\u0435 RISC-V) \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u043e\u043d, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u041e\u0421 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0442\u044c BAR\u2019\u044b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u2014 \u0447\u0430\u0449\u0435 \u0434\u0430\u0436\u0435 \u0434\u0432\u0430 \u0442\u0430\u043a\u0438\u0445 \u0440\u0435\u0433\u0438\u043e\u043d\u0430, \u043d\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u0437\u0436\u0435. \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0441\u0430\u043c\u043e\u0433\u043e PCIe-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 (\u043e\u043d \u0436\u0435 Root Complex) \u0436\u0438\u0432\u0443\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u043e\u0431\u044b\u0447\u043d\u043e \u0440\u044f\u0434\u043e\u043c \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c\u0438 \u0421\u043d\u041a, \u0442\u0430\u043a\u0438\u043c\u0438 \u043a\u0430\u043a USB, SPI, i2c \u0438 \u043f\u0440. \u0418 \u0441 \u0438\u0445 \u043f\u043e\u043c\u043e\u0449\u044c\u044e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u043e\u0435 \u044f\u0434\u0440\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u00ab\u043d\u0430\u0440\u0443\u0436\u0443\u00bb \u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u043a \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 \u0421\u043d\u041a \u0438\u043b\u0438 \u043a BAR\u2019\u0430\u043c \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432, \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0430\u044f \u0448\u0438\u043d\u0430 (Interconnect) \u0441 \u00ab\u0437\u0430\u0448\u0438\u0442\u043e\u0439\u00bb \u0432 \u043d\u0435\u0435 \u043a\u0430\u0440\u0442\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043f\u043e \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443: \u043e\u0442\u043a\u0443\u0434\u0430 \u0432\u0437\u044f\u0442\u044c \u0438 \u043a\u0443\u0434\u0430 \u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b\/\u0434\u0430\u043d\u043d\u044b\u0435. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u0440\u043e\u0432\u043d\u043e \u0442\u0435\u043c\u0438 \u0436\u0435 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u043c\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438 <code>load<\/code> \u0438 <code>store<\/code>, \u043a\u0430\u043a \u0438 \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e, \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u043d\u043e\u043c\u0435\u0440 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u0448\u0438\u043d\u0435 (<abbr class=\"habraabbr\" title=\"Bus, Device, Function\" data-title=\"&lt;p&gt;Bus, Device, Function&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\"BDF\">BDF<\/abbr>) \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b. \u041d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0438\u0447\u0435\u0433\u043e \u043a\u0440\u043e\u043c\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u2014 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 PCIe \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0434\u043e\u0431\u0435\u043d \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438.<\/p>\n<h2>BAR\u2019\u044b Radeon \u0438 \u043f\u0443\u0442\u044c \u043e\u043f\u0440\u043e\u043c\u0435\u0442\u0447\u0438\u0432\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439<\/h2>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, PCIe-\u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u044f\u0434\u0440\u0430 Linux \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0435\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0430 BAR\u2019\u043e\u0432 \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u043c\u0430\u0448\u0438\u043d\u044b \u0438 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u0430\u0434\u0440\u0435\u0441 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e. \u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0437\u043d\u0430\u0435\u0442, \u0433\u0434\u0435 \u043e\u043d\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u0438 \u0433\u0434\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, DDR), \u0447\u0442\u043e\u0431\u044b \u0432 \u043d\u0435\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f.\u00a0<\/p>\n<p>\u0423 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u044b Radeon \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0438\u0434\u043e\u0432 BAR. \u041c\u044b \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u0438 (VRAM). \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c Resizable BARs \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 BAR, \u0438 \u0435\u0441\u043b\u0438 \u043e\u043d \u043d\u0435 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u043e\u043d \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u043c\u0430\u0448\u0438\u043d\u044b \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0435\u0433\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442 VESA \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u0438 256 \u041c\u0438\u0411, \u0438\u043d\u0430\u0447\u0435 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 Linux <code>amdgpu<\/code> \u043e\u0442\u043a\u0430\u0436\u0435\u0442 \u0432 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. <\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u043a PCIe, \u0431\u044b\u043b \u043d\u0435 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u0435\u043b\u044c AMD GPU, \u0430 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435\u043f\u0440\u0438\u0432\u0435\u0440\u0435\u0434\u043b\u0438\u0432\u044b\u0439 \u0438 \u043d\u0435\u043f\u0440\u043e\u0436\u043e\u0440\u043b\u0438\u0432\u044b\u0439 NVMe. \u0415\u043c\u0443 \u0445\u0432\u0430\u0442\u0430\u043b\u043e BAR \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0432 ~16 \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442. \u042d\u0442\u043e\u0442 \u043e\u0431\u044a\u0435\u043c \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043e\u0431\u044a\u0435\u043c\u0430 \u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u044f \u2014 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438 \u0441\u043e\u0442\u043d\u0438 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442, \u0438 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0442\u0435\u0440\u0430\u0431\u0430\u0439\u0442.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/09f\/330\/880\/09f33088017c973bb5ddb6f926c36af8.png\" alt=\"\u041a\u0430\u0440\u0442\u0430 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0438 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432. \u0417\u0434\u0435\u0441\u044c \u0436\u0435 (\/proc\/iomem) \u0432\u0438\u0434\u043d\u043e, \u0433\u0434\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u044b System RAM. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043d\u0430\u0447\u0430\u043b\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435 \u0432\u043b\u0435\u0437\u0430\u0435\u0442 \u0432 32 \u0431\u0438\u0442\u0430, \u0435\u0435 \u043d\u0430\u0447\u0430\u043b\u043e \u043b\u0435\u0436\u0438\u0442 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u043f\u0435\u0440\u0432\u044b\u0445 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442\" title=\"\u041a\u0430\u0440\u0442\u0430 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0438 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432. \u0417\u0434\u0435\u0441\u044c \u0436\u0435 (\/proc\/iomem) \u0432\u0438\u0434\u043d\u043e, \u0433\u0434\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u044b System RAM. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043d\u0430\u0447\u0430\u043b\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435 \u0432\u043b\u0435\u0437\u0430\u0435\u0442 \u0432 32 \u0431\u0438\u0442\u0430, \u0435\u0435 \u043d\u0430\u0447\u0430\u043b\u043e \u043b\u0435\u0436\u0438\u0442 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u043f\u0435\u0440\u0432\u044b\u0445 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442\" width=\"660\" height=\"477\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/09f\/330\/880\/09f33088017c973bb5ddb6f926c36af8.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/09f\/330\/880\/09f33088017c973bb5ddb6f926c36af8.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041a\u0430\u0440\u0442\u0430 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0438 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432. \u0417\u0434\u0435\u0441\u044c \u0436\u0435 (<code>\/proc\/iomem<\/code>) \u0432\u0438\u0434\u043d\u043e, \u0433\u0434\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u044b <code>System RAM<\/code>. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043d\u0430\u0447\u0430\u043b\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435 \u0432\u043b\u0435\u0437\u0430\u0435\u0442 \u0432 32 \u0431\u0438\u0442\u0430, \u0435\u0435 \u043d\u0430\u0447\u0430\u043b\u043e \u043b\u0435\u0436\u0438\u0442 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u043f\u0435\u0440\u0432\u044b\u0445 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e \u043a\u0430\u0440\u0442\u0435 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u044d\u0442\u043e\u0433\u043e \u0441\u0442\u0435\u043d\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u043f\u043e\u0434 BAR PCIe-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043e\u0442\u0432\u0435\u0434\u0435\u043d\u043e 240 \u041c\u0438\u0411, \u0447\u0435\u0433\u043e \u0441 \u0433\u043e\u043b\u043e\u0432\u043e\u0439 \u0445\u0432\u0430\u0442\u0438\u043b\u043e \u0434\u043b\u044f NVMe, \u043d\u043e \u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u043b\u043e \u0434\u043b\u044f AMD GPU \u0441 \u00ab\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438\u00bb 256 \u041c\u0438\u0411. \u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u044d\u0442\u043e\u0442 \u0440\u0435\u0433\u0438\u043e\u043d \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c, \u043d\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f \u043d\u0430\u0441 \u043d\u0435 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b\u0438: \u043d\u0430\u0434\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044c \u0432\u0441\u044e \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044e \u0441\u043f\u0435\u0440\u0435\u0434\u0438 \u0438 \u0441\u0437\u0430\u0434\u0438 \u044d\u0442\u0438\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432. \u0415\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0432\u0434\u0440\u0443\u0433 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0444\u0438\u0447\u0435\u0439 Resizable BARs, \u0442\u043e \u043d\u0430\u0434\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u043f\u0440\u043e\u0435\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 4 \u0413\u0438\u0411 (\u0430 \u0438\u043d\u043e\u0433\u0434\u0430 \u0438 24\u0413\u0438\u0411!) \u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u044b.<\/p>\n<p>\u041c\u044b \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u043b\u0438 RTL-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0430 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0432\u0441\u0435 BAR\u2019\u044b \u0432 64-\u0431\u0438\u0442\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e, \u0433\u0434\u0435 \u0431\u044b\u043b\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u0442 \u043e\u0431\u044a\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d. VRAM \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u044b \u0442\u0443\u0434\u0430 \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u0432\u043b\u0435\u0437\u043b\u0430, \u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043d\u043e\u0432\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c.\u00a0<\/p>\n<p>\u0422\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u043a\u0435\u0448\u0438\u0440\u0443\u0435\u043c\u044b\u0439 (prefetchable) \u0442\u0438\u043f BAR, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u043f\u0430\u043c\u044f\u0442\u044c. \u0412\u0442\u043e\u0440\u043e\u0439 \u0442\u0438\u043f BAR, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0435\u0441\u0442\u044c \u0443 AMD GPU, \u2014 \u044d\u0442\u043e \u043d\u0435\u043a\u0435\u0448\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0442\u0438\u043f (non-prefetchable). \u0417\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u0442\u0430\u043a\u043e\u0439 \u0442\u0438\u043f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f mmio, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b. \u0412\u0437\u044f\u0442\u044c, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0442\u0430\u043a\u043e\u0439 \u0432\u0438\u0434 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043a\u0430\u043a FIFO \u2014 \u043a\u0430\u0436\u0434\u043e\u0435 \u0447\u0442\u0435\u043d\u0438\u0435\/\u0437\u0430\u043f\u0438\u0441\u044c \u0438\u0437 \u043d\u0435\u0433\u043e \u0438\u043c\u0435\u0435\u0442 \u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b: \u044d\u0442\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043f\u0438\u0440\u0443\u044e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u044d\u0442\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b, \u043d\u043e \u0438 \u043c\u0435\u043d\u044f\u044e\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u0421 \u0442\u0430\u043a\u0438\u043c\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043a\u0435\u0448\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0442\u0435\u0445\u043d\u0438\u043a\u0438 \u0438 \u043f\u0440\u043e\u0447\u0438\u0439 read-ahead.\u00a0<\/p>\n<p>\u0415\u0449\u0435 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0438\u043a\u0430 PCIe, PCI, \u0440\u0435\u0448\u0438\u043b\u0438, \u0447\u0442\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0435\u043a\u0435\u0448\u0438\u0440\u0443\u0435\u043c\u044b\u0445 BAR\u2019\u043e\u0432 \u0431\u0443\u0434\u0443\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b 32 \u0431\u0438\u0442\u0430\u043c\u0438. \u0410 \u0432\u0435\u0434\u044c \u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u043b\u0438 \u0432\u0435\u0441\u044c \u0440\u0435\u0433\u0438\u043e\u043d \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u043f\u0435\u0440\u0432\u044b\u0445 4 \u0413\u0438\u0411 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432, \u0438 \u0442\u0430\u043a\u0438\u0435 BAR\u2019\u044b \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0442\u0443\u0434\u0430 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c.<\/p>\n<p>\u0414\u043b\u044f \u043e\u0431\u0445\u043e\u0434\u0430 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b RTL-\u0438\u043d\u0436\u0435\u043d\u0435\u0440 <em>\u00ab\u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0432\u0442\u043e\u0440\u043e\u0439 AXI Slave\u00bb<\/em>, \u0432\u0435\u0440\u043d\u0443\u043b \u043d\u0430\u043c \u043c\u0435\u0441\u0442\u043e \u0434\u043b\u044f 32-\u0431\u0438\u0442\u043d\u044b\u0445 BAR\u2019\u043e\u0432 \u0432 \u043f\u0435\u0440\u0432\u044b\u0445 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442\u0430\u0445 \u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u0434\u043b\u044f \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0445 64-\u0431\u0438\u0442\u043d\u044b\u0445 BAR\u2019\u043e\u0432. \u0412\u0441\u0435 \u0442\u0440\u0438 \u0442\u0438\u043f\u0430 BAR\u2019\u043e\u0432 (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 Doorbell, \u0440\u0435\u0447\u044c \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u0439\u0434\u0435\u0442 \u043f\u043e\u0437\u0436\u0435) \u0443 \u043d\u0430\u0441 \u0432\u043b\u0435\u0437\u043b\u0438!<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/05f\/202\/fd0\/05f202fd0e6c0d9473551446ab0eeda1.png\" alt=\"\u0412\u0441\u0435 \u0442\u0438\u043f\u044b BAR\u043e\u0432, \u0438 \u0433\u0434\u0435 \u043e\u043d\u0438 \u043e\u0431\u0438\u0442\u0430\u044e\u0442: \u043f\u0435\u0440\u0432\u044b\u0439 BAR, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0430\u043f\u0440\u0438\u043e\u0440\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u043b 256 \u041c\u0438\u0411, \u0432\u044b\u0440\u043e\u0441 \u0434\u043e \u0441\u0432\u043e\u0438\u0445 \u0440\u043e\u0434\u043d\u044b\u0445 4 \u0413\u0438\u0411\" title=\"\u0412\u0441\u0435 \u0442\u0438\u043f\u044b BAR\u043e\u0432, \u0438 \u0433\u0434\u0435 \u043e\u043d\u0438 \u043e\u0431\u0438\u0442\u0430\u044e\u0442: \u043f\u0435\u0440\u0432\u044b\u0439 BAR, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0430\u043f\u0440\u0438\u043e\u0440\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u043b 256 \u041c\u0438\u0411, \u0432\u044b\u0440\u043e\u0441 \u0434\u043e \u0441\u0432\u043e\u0438\u0445 \u0440\u043e\u0434\u043d\u044b\u0445 4 \u0413\u0438\u0411\" width=\"919\" height=\"192\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/05f\/202\/fd0\/05f202fd0e6c0d9473551446ab0eeda1.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/05f\/202\/fd0\/05f202fd0e6c0d9473551446ab0eeda1.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0412\u0441\u0435 \u0442\u0438\u043f\u044b BAR\u043e\u0432, \u0438 \u0433\u0434\u0435 \u043e\u043d\u0438 \u043e\u0431\u0438\u0442\u0430\u044e\u0442: \u043f\u0435\u0440\u0432\u044b\u0439 BAR, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0430\u043f\u0440\u0438\u043e\u0440\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u043b 256 \u041c\u0438\u0411, \u0432\u044b\u0440\u043e\u0441 \u0434\u043e \u0441\u0432\u043e\u0438\u0445 \u0440\u043e\u0434\u043d\u044b\u0445 4 \u0413\u0438\u0411<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ef2\/029\/09e\/ef202909e10fc1e70065428f447cad67.png\" alt=\"\u041c\u0430\u0440\u0448\u0440\u0443\u0442 TLP: \u0447\u0442\u0435\u043d\u0438\u0435 \u0438\u0437 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\" title=\"\u041c\u0430\u0440\u0448\u0440\u0443\u0442 TLP: \u0447\u0442\u0435\u043d\u0438\u0435 \u0438\u0437 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\" width=\"1685\" height=\"717\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/ef2\/029\/09e\/ef202909e10fc1e70065428f447cad67.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ef2\/029\/09e\/ef202909e10fc1e70065428f447cad67.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041c\u0430\u0440\u0448\u0440\u0443\u0442 TLP: \u0447\u0442\u0435\u043d\u0438\u0435 \u0438\u0437 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u0432 \u044f\u0434\u0440\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430, \u0432 <abbr class=\"habraabbr\" title=\"HARdware Thread\" data-title=\"&lt;p&gt; HARdware Thread&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\"hart\">hart<\/abbr>\u2019\u0435 \u0435\u0441\u043b\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0438 RISC-V, \u043c\u044b \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0432 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u044d\u0442\u0443 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0443\u044e \u0448\u0438\u043d\u0443, \u0433\u0434\u0435 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u044b \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0421\u043d\u041a. \u0418\u043c\u0435\u043d\u043d\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0430\u044f \u0448\u0438\u043d\u0430 \u0440\u0435\u0448\u0430\u0435\u0442 \u0434\u043b\u044f \u043a\u043e\u0433\u043e \u0431\u044b\u043b\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f: \u0434\u043b\u044f PCIe, \u0434\u043b\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u043b\u0438 \u0434\u043b\u044f i2c-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430. \u042d\u0442\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043e\u0431\u0440\u0430\u0442\u0438\u043b\u0441\u044f \u0434\u0440\u0430\u0439\u0432\u0435\u0440, \u2014 \u043e\u043d \u0438 \u0435\u0441\u0442\u044c \u0442\u043e\u0447\u043a\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0448\u0438\u043d\u0430 \u0432\u0438\u0434\u0438\u0442, \u0447\u0442\u043e \u044d\u0442\u043e \u0430\u0434\u0440\u0435\u0441 BAR, \u0437\u043d\u0430\u0447\u0438\u0442 \u0435\u0433\u043e \u043d\u0430\u0434\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432 PCIe-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u043e\u043d \u0436\u0435 Root Complex, \u0430 \u0434\u0430\u043b\u044c\u0448\u0435 \u043e\u043d \u0441\u0430\u043c \u043a\u0430\u043a-\u043d\u0438\u0431\u0443\u0434\u044c \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u0442\u0441\u044f.\u00a0<\/p>\n<p>\u0418\u0437 Root Complex \u043c\u044b \u0432\u044b\u0445\u043e\u0434\u0438\u043c \u0432 \u0444\u0438\u0437\u0438\u043a\u0443, \u0432 \u0441\u0442\u0440\u0430\u043d\u0443 lane\u2019\u043e\u0432, \u0434\u0438\u0444\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u0440 \u0438 \u043a\u043e\u043c\u043c\u0443\u0442\u0430\u0442\u043e\u0440\u043e\u0432. \u041e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0444\u0438\u0437\u0438\u043a\u043e\u0439 (PCIe fabric) \u043f\u0430\u043a\u0435\u0442\u043d\u043e\u0435 \u2014 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c TLP (transactional layer packet), \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 Ethernet \u0438\u043b\u0438 Wi-Fi. \u0424\u0438\u0437\u0438\u043a\u0430 PCIe \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442, \u0434\u043b\u044f \u043a\u043e\u0433\u043e \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f, \u0432\u0441\u0435 \u043f\u043e \u0442\u043e\u043c\u0443 \u0436\u0435 \u0430\u0434\u0440\u0435\u0441\u0443, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u043c\u0443 \u0438\u0437 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430.<\/p>\n<blockquote>\n<p>\u0412\u0430\u0436\u043d\u043e\u0435 \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u0435: \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u0442 \u0431\u043b\u043e\u043a\u0430 <abbr class=\"habraabbr\" title=\"Input\/Output Memory Management Unit\" data-title=\"&lt;p&gt;Input\/Output Memory Management Unit&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\"IOMMU\">IOMMU<\/abbr>, \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u2014 \u0438\u0441\u043f\u043e\u0440\u0442\u0438\u0442\u044c \u0432\u0435\u0441\u044c \u0432\u044b\u0448\u0435\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441: \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u043d\u0443 \u043f\u0440\u043e\u0441\u043b\u043e\u0439\u043a\u0443 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432, \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u044b \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c.<\/p>\n<\/blockquote>\n<p>\u0421\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 TLP \u0437\u0434\u0435\u0441\u044c \u2014 \u0447\u0442\u0435\u043d\u0438\u0435 \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438, \u0438\u043b\u0438 memory read (MRd). \u0417\u0430\u043f\u0440\u043e\u0441 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0438\u0437 Root Complex \u0438 \u0434\u043e\u0445\u043e\u0434\u0438\u0442 \u0434\u043e \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0433\u043e NVMe \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043d\u0438\u0436\u0435. <\/p>\n<p>\u0412 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u0436\u0435 TLP, \u043d\u043e \u0443\u0436\u0435 \u043d\u043e\u0432\u044b\u0439, \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0442\u0438\u043f\u0430: completion with data (CplD) \u0438\u043b\u0438 \u043e\u0442\u0432\u0435\u0442 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u0432\u0435\u0442 \u043f\u043e \u0442\u043e\u043c\u0443 \u0436\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0443, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0448\u0435\u043b \u0437\u0430\u043f\u0440\u043e\u0441. \u041a\u043e\u0433\u0434\u0430 \u043e\u0442\u0432\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d \u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u043d \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 (\u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 load), \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f.\u00a0<\/p>\n<p>\u041f\u043e\u043c\u043d\u0438\u0442\u0435, \u0447\u0442\u043e \u0443 PCIe \u0442\u0440\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438? \u0412\u043e\u0442 \u0438 \u0442\u0440\u0435\u0442\u0438\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u2014 \u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043c\u044b \u0445\u043e\u0434\u0438\u043c \u0432 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043a\u0430\u043a \u0432 \u043f\u0430\u043c\u044f\u0442\u044c, \u0430 \u0441\u0430\u043c\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0445\u043e\u0434\u0438\u0442 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u044b (DMA \u2014 direct memory access)!<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/37e\/e6d\/10c\/37ee6d10c26562afb03147cafae7908b.png\" alt=\"\u041c\u0430\u0440\u0448\u0440\u0443\u0442 TLP: \u0447\u0442\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438 \u043c\u0430\u0448\u0438\u043d\u044b\" title=\"\u041c\u0430\u0440\u0448\u0440\u0443\u0442 TLP: \u0447\u0442\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438 \u043c\u0430\u0448\u0438\u043d\u044b\" width=\"1529\" height=\"618\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/37e\/e6d\/10c\/37ee6d10c26562afb03147cafae7908b.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/37e\/e6d\/10c\/37ee6d10c26562afb03147cafae7908b.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041c\u0430\u0440\u0448\u0440\u0443\u0442 TLP: \u0447\u0442\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438 \u043c\u0430\u0448\u0438\u043d\u044b<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u0441\u0435 \u043a\u0430\u043a \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u043a\u043e\u0433\u0434\u0430 \u044f\u0434\u0440\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u043e\u0431\u0440\u0430\u0449\u0430\u043b\u043e\u0441\u044c \u043a \u0430\u0434\u0440\u0435\u0441\u0443 NVMe \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u043b\u043e \u043e\u0442\u0432\u0435\u0442 \u043e\u0442 \u043d\u0435\u0433\u043e. TLP \u0442\u0438\u043f\u0430 memory read (MRd) \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u044c, \u0430 \u0432 \u00ab\u0436\u0435\u043b\u0435\u0437\u043a\u0443\u00bb \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043e\u0442\u0432\u0435\u0442 c \u0434\u0430\u043d\u043d\u044b\u043c\u0438: \u0442\u0438\u043f TLP \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0432 completion with data (CplD).<\/p>\n<h2>\u041f\u0440\u0438\u0440\u0443\u0447\u0430\u0435\u043c \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u044b\u0435 \u0431\u0443\u0444\u0435\u0440\u044b \u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043a\u043e\u043c\u0430\u043d\u0434<\/h2>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u044b\u0435 \u0431\u0443\u0444\u0435\u0440\u044b, \u0447\u0442\u043e\u0431\u044b \u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c. \u0412 \u043d\u0438\u0445 \u043c\u0430\u0448\u0438\u043d\u0430 \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u0441\u0432\u043e\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0432\u0441\u0435\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u0442\u0443\u0434\u0430 \u0441\u0442\u0430\u0442\u0443\u0441\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u043e\u0448\u043b\u0430 \u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u043e, \u0430 \u0435\u0441\u043b\u0438 \u043d\u0435\u0442, \u0442\u043e \u043f\u043e\u0447\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e: \u043d\u0435\u0432\u0435\u0440\u043d\u043e \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f, \u043d\u0435\u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u044b \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u044b.<\/p>\n<p>\u041e \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0435\u0449\u0435 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u0441\u044f, \u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u00ab\u0434\u043e\u0433\u043e\u0432\u043e\u0440\u00bb. \u0423 NVMe \u0435\u0441\u0442\u044c <a href=\"https:\/\/nvmexpress.org\/specification\/nvm-express-base-specification\/\">\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f<\/a>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043e, \u043a\u0430\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0438 CPU, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043f\u043e \u0431\u0430\u0439\u0442\u0430\u043c: \u043a\u0430\u043a \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043a\u043e\u043c\u0430\u043d\u0434, \u043a\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0431\u043b\u043e\u043a\u0430, \u0430 \u043a\u0430\u043a\u043e\u0439 \u0437\u0430 \u0447\u0442\u0435\u043d\u0438\u0435, \u043a\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0443\u0441 \u0438 \u0447\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0438\u0441\u043b\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0430. \u041f\u043e\u0434 \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u044b\u0435 \u0431\u0443\u0444\u0435\u0440\u044b \u043c\u044b \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u043c\u0435\u0441\u0442\u043e \u0432 DDR. \u041f\u043e\u0441\u043b\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u043c\u044b \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 \u043d\u0443\u0436\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u044d\u0442\u0438\u0445 \u0431\u0443\u0444\u0435\u0440\u043e\u0432 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0440.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f01\/d99\/d03\/f01d99d03c9dc81efe0ab6ef42a21575.png\" width=\"1551\" height=\"630\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/f01\/d99\/d03\/f01d99d03c9dc81efe0ab6ef42a21575.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f01\/d99\/d03\/f01d99d03c9dc81efe0ab6ef42a21575.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u0432\u0438\u0434\u0435\u043e- \u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u043e\u0439. \u00ab\u0416\u0435\u043b\u0435\u0437\u043a\u0438\u00bb \u0437\u043d\u0430\u044e\u0442, \u043a\u0443\u0434\u0430 \u0438\u043c \u0445\u043e\u0434\u0438\u0442\u044c \u0437\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438.<\/p>\n<p>\u041c\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 dd \u0434\u043b\u044f \u00ab\u0441\u044b\u0440\u043e\u0439\u00bb \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u044c, \u044f\u0434\u0440\u043e Linux \u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 NVMe \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u044e\u0442 \u043f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043f\u043e\u0440\u0446\u0438\u0438, \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u043e\u0440\u0446\u0438\u0438 \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0432 \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u043e\u0439 \u0431\u0443\u0444\u0435\u0440, \u0430 \u043a\u043e\u0433\u0434\u0430 \u0432 \u044d\u0442\u043e\u0442 \u0431\u0443\u0444\u0435\u0440 \u043e\u0442 \u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u044f \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u043e\u0442\u0432\u0435\u0442\u044b \u0441\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0430\u043c\u0438, \u0442\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e.<\/p>\n<p>\u0422\u0443\u0442 \u043c\u044b \u0432\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u043f\u0440\u043e BAR Doorbell. \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u043b\u0438 \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u044b\u0435 \u0431\u0443\u0444\u0435\u0440\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438 \u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043c\u044b \u043f\u0440\u043e\u0441\u0438\u043c PCIe-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0440\u0438\u0439\u0442\u0438, \u043a\u0430\u043a \u0431\u044b \u00ab\u0437\u0432\u043e\u043d\u0438\u043c \u0435\u043c\u0443 \u0432 \u0434\u0432\u0435\u0440\u044c\u00bb \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u0432 \u044d\u0442\u043e\u0442 BAR. \u041f\u043e\u0441\u043b\u0435 Doorbell-\u0437\u0432\u043e\u043d\u043a\u0430, \u00ab\u0436\u0435\u043b\u0435\u0437\u043a\u0430\u00bb \u0438\u0434\u0435\u0442 \u043f\u043e DMA \u0432 \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u043e\u0439 \u0431\u0443\u0444\u0435\u0440, \u043c\u0438\u043d\u0443\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440. \u041e\u043d\u0430 \u0447\u0438\u0442\u0430\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 input\/output, \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0441\u0442\u0430\u0442\u0443\u0441\u044b. \u0417\u0430\u0442\u0435\u043c \u043d\u0430\u0434\u043e \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c CPU \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0443\u0441\u044b \u0438 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0431\u044b\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/357\/849\/6a7\/3578496a761213f978e7fd0abefd8504.png\" width=\"1668\" height=\"661\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/357\/849\/6a7\/3578496a761213f978e7fd0abefd8504.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/357\/849\/6a7\/3578496a761213f978e7fd0abefd8504.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>Doorbell \u043d\u0443\u0436\u0435\u043d, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043a\u0430\u0440\u0442\u0435 \u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0447\u0438\u0442\u0430\u0442\u044c \u0431\u0443\u0444\u0435\u0440 \u043a\u043e\u043c\u0430\u043d\u0434, \u043d\u043e \u0435\u0441\u0442\u044c \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u2014 MSI (Message Signaled Interrupts), \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u0435, \u0447\u0442\u043e \u043f\u043e\u0440\u0430 \u043f\u0435\u0440\u0435\u0447\u0438\u0442\u0430\u0442\u044c \u0431\u0443\u0444\u0435\u0440 \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u0432. \u00ab\u0416\u0435\u043b\u0435\u0437\u043a\u0430\u00bb \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 TLP MemWr \u0441 \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u0432 Root Complex \u043f\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443, \u0430 \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043c\u0430\u0448\u0438\u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a\u043e\u043c\u0443 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0443 \u043d\u0430 \u043a\u0430\u043a\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u043e\u043c \u044f\u0434\u0440\u0435 \u044d\u0442\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043e (\u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0442\u043e\u043c\u0443 \u0436\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0443).<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7ae\/772\/2a8\/7ae7722a8f1725178a294f5d9fb1e142.png\" width=\"1643\" height=\"713\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/7ae\/772\/2a8\/7ae7722a8f1725178a294f5d9fb1e142.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7ae\/772\/2a8\/7ae7722a8f1725178a294f5d9fb1e142.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b \u043f\u0440\u043e\u0441\u0442\u043e\u0439 PCIe-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0441 \u0433\u043e\u0442\u043e\u0432\u044b\u043c \u00ab\u0432\u0430\u043d\u0438\u043b\u044c\u043d\u044b\u043c\u00bb \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u043c \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f Linux. \u041c\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0438 NVMe, Linux \u0435\u0433\u043e \u0443\u0432\u0438\u0434\u0435\u043b, \u0438 \u0432\u0441\u0435 \u0431\u044b\u043b\u043e \u0445\u043e\u0440\u043e\u0448\u043e, \u043f\u043e\u043a\u0430 \u043c\u044b \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 <code>fio<\/code>. NVMe \u0442\u0443\u0442 \u0436\u0435 \u043e\u0442\u0432\u0430\u043b\u0438\u043b\u0441\u044f \u0441 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430\u043c\u0438.<\/p>\n<p>\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e? \u0423\u0442\u0438\u043b\u0438\u0442\u0430 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u043f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445, \u0430 Linux \u0441 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430\u043c\u0438 \u043d\u0430\u0440\u0435\u0437\u0430\u043b\u0438 \u044d\u0442\u043e\u0442 \u043f\u043e\u0442\u043e\u043a \u043d\u0430 \u043a\u0443\u0441\u043a\u0438 \u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u0443\u0441\u043a\u0430 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u043b\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b\u0438 \u0438\u0445 NVMe, \u043f\u043e\u0437\u0432\u043e\u043d\u0438\u0432 \u0432 Doorbell. \u041e\u043d \u0432\u0441\u0435 \u043f\u0440\u0438\u043d\u044f\u043b, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b \u0432\u0441\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0430 \u043f\u043e\u0442\u043e\u043c \u043d\u0430\u0447\u0430\u043b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u0439. \u0423 \u043d\u0430\u0448\u0435\u0433\u043e PCIe-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 FIFO \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0431\u044b\u043b\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043e 8 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 (MSI), \u043f\u043e\u0442\u043e\u043c\u0443 \u0432 \u043e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u043d \u043f\u043e\u0440\u0432\u0430\u043b\u0441\u044f.\u00a0<\/p>\n<p>\u0417\u0430 \u0441\u0447\u0435\u0442 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043a\u043e\u043c\u0430\u043d\u0434 PCIe \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043c\u0430\u043d\u0434 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u044b\u0445 \u044f\u0434\u0435\u0440 \u043c\u043e\u0433\u0443\u0442 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 \u0441\u0432\u043e\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0442\u043e \u0435\u0441\u0442\u044c \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u0432 \u0431\u0443\u0444\u0435\u0440. \u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0435\u0441\u0442\u044c \u0433\u043b\u0443\u0431\u0438\u043d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u2014 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043e\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c. \u042d\u0442\u0443 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043c\u044b \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u043b\u0438 \u0441 1024 \u0434\u043e 8, \u0434\u0430\u0431\u044b \u043d\u0430\u0448 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0442\u0430\u043a \u043d\u0435 \u043d\u0430\u0434\u0440\u044b\u0432\u0430\u043b\u0441\u044f.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u044d\u0442\u043e\u0442 PCIe-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043d\u0435 \u0443\u043c\u0435\u043b \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438 \u0431\u0435\u0437 \u0441\u0431\u0440\u043e\u0441\u0430. \u0418 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 Linux-\u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u043d\u0435 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043b \u0438 \u043d\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b \u043e\u0448\u0438\u0431\u043a\u0438: \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u043e\u0439 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u0438\u0441\u044c \u0431\u0438\u0442\u044b \u043e\u0448\u0438\u0431\u043e\u043a, \u043d\u043e \u0438\u0445 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0447\u0438\u0442\u0430\u043b.<\/p>\n<p>\u0410 \u0435\u0449\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u0432 \u044d\u0442\u043e\u043c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0435 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u043b \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0438\u0437 FIFO \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443, \u0442\u043e \u0435\u0441\u0442\u044c \u0440\u0435\u0430\u043a\u0446\u0438\u044f \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 MSI \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0430\u0441\u044c \u0441 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e <code>trap_handler()<\/code>, \u0447\u0442\u043e \u0435\u0449\u0435 \u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u043b\u043e \u0432\u0432\u043e\u0434\/\u0432\u044b\u0432\u043e\u0434 \u0438 \u0431\u0435\u0437 \u0442\u043e\u0433\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u041f\u041b\u0418\u0421.<\/p>\n<h2>\u041d\u0435\u0442 \u043a\u0435\u0448\u0430 \u2014 \u043d\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c<\/h2>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 Linux PCIe \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043b\u0430 \u043a\u0430\u0440\u0442\u0443 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0433\u043e\u0442\u043e\u0432\u043e\u0439 \u043a \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0443 <code>amdgpu<\/code>, \u043c\u044b \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u0441 \u043c\u0435\u043d\u0435\u0435 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438, \u0438\u0445 \u0443\u0436\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0435\u0440\u044c\u0451\u0437.<\/p>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0440\u0430\u0437. \u0423 \u043d\u0430\u0441 \u0431\u044b\u043b\u0430 \u043f\u0430\u043c\u044f\u0442\u044c DDR, \u0432 \u043d\u0435\u0439 \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0432\u0437\u044f\u0442\u044c \u0431\u0443\u0444\u0435\u0440, \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u0438 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0437\u0430 \u043d\u0438\u043c \u043f\u0440\u0438\u0439\u0442\u0438. \u042d\u0442\u043e\u0442 \u0431\u0443\u0444\u0435\u0440 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0432 \u0434\u0432\u0443\u0445 \u043a\u043e\u043f\u0438\u044f\u0445: \u043f\u043e\u043c\u0438\u043c\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u043d \u0435\u0449\u0435 \u043b\u0435\u0436\u0430\u043b \u0432 \u043a\u0435\u0448\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430, \u0443\u0436\u0435 \u0432 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435 (\u043f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438, \u0430 \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u2014 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442). <u>\u0417\u0430\u0434\u0430\u0447\u0430 \u2014 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u044d\u0442\u0438\u0445 \u0434\u0432\u0443\u0445 \u043a\u043e\u043f\u0438\u0439: \u0447\u0442\u043e\u0431\u044b \u0442\u043e, \u0447\u0442\u043e \u043b\u0435\u0436\u0430\u043b\u043e \u0432 \u043a\u0435\u0448\u0435, \u0432\u043e\u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0442\u0443\u0434\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u00ab\u0436\u0435\u043b\u0435\u0437\u043a\u0430\u00bb.\u00a0<\/u><\/p>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0434\u0432\u0430. \u041f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u043c\u043e\u0433 \u0432\u044b\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u0432 \u043a\u0435\u0448 <strong>\u0434\u043e<\/strong> \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0432 \u044d\u0442\u0443 \u043f\u0430\u043c\u044f\u0442\u044c \u0437\u0430\u043f\u0438\u0448\u0435\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e. \u0422\u043e \u0435\u0441\u0442\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u043f\u0440\u0435\u0431\u044b\u0432\u0430\u043b \u0432 \u0446\u0438\u043a\u043b\u0435 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u043e\u0442\u0432\u0435\u0442\u0430, \u0430 \u0432 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u043c\u043e\u0433 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u0441\u043f\u0435\u043a\u0443\u043b\u044f\u0442\u0438\u0432\u043d\u044b\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0435\u0445\u043d\u0438\u043a\u0443 read-ahead, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u043b, \u0447\u0442\u043e \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0434\u0430\u043b\u044c\u0448\u0435 \u0447\u0438\u0442\u0430\u0435\u0442 \u043f\u0430\u043c\u044f\u0442\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 CPU \u0443\u0441\u043b\u0443\u0436\u043b\u0438\u0432\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u043b \u044d\u0442\u0443 \u043f\u0430\u043c\u044f\u0442\u044c \u0432 \u043a\u0435\u0448 \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u044d\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0430 \u0432 DDR \u00ab\u0436\u0435\u043b\u0435\u0437\u043a\u0430\u00bb.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a8d\/04b\/729\/a8d04b72944bd1c6ab449a90e0a3a982.png\" alt=\"\u041a\u0430\u043a \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u0438\u0437 \u00ab\u0436\u0435\u043b\u0435\u0437\u043a\u0438\u00bb \u0438 \u043a\u0435\u0448\u0430 \u0432 DDR\" title=\"\u041a\u0430\u043a \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u0438\u0437 \u00ab\u0436\u0435\u043b\u0435\u0437\u043a\u0438\u00bb \u0438 \u043a\u0435\u0448\u0430 \u0432 DDR\" width=\"337\" height=\"615\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/a8d\/04b\/729\/a8d04b72944bd1c6ab449a90e0a3a982.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a8d\/04b\/729\/a8d04b72944bd1c6ab449a90e0a3a982.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041a\u0430\u043a \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u0438\u0437 \u00ab\u0436\u0435\u043b\u0435\u0437\u043a\u0438\u00bb \u0438 \u043a\u0435\u0448\u0430 \u0432 DDR<\/figcaption><\/div>\n<\/figure>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0439 \u0431\u044b\u043b\u043e \u0442\u043e\u0436\u0435 \u0434\u0432\u0430.\u00a0<\/p>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435 \u2014 \u043d\u0430 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u00ab\u043a\u043e\u0433\u0435\u0440\u0435\u043d\u0442\u043d\u044b\u0439 \u043f\u043e\u0440\u0442\u00bb. \u041e\u043d \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043b \u043d\u0435\u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0438 \u043a\u0435\u0448\u0435\u043c, \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u0435\u0437 \u044f\u0432\u043d\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u043c\/\u044f\u0434\u0440\u043e\u043c \u041e\u0421 \u044d\u0442\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u043b \u2014 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u043b \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.\u00a0<\/p>\n<p>\u0412\u0442\u043e\u0440\u043e\u0435: \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0437\u0430\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u043e\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 \u0432 Linux DMA API \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438. \u0422\u043e \u0435\u0441\u0442\u044c \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c cache flush \u043f\u0435\u0440\u0435\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u043b\u044e\u0431\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0438 cache invalidate \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u044f \u043b\u044e\u0431\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u041f\u0440\u0438 \u0434\u043e\u043b\u0436\u043d\u043e\u0439 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u0432 \u043e\u0431\u043e\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e cache flush, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043b\u044f \u0447\u0438\u0441\u0442\u043e\u0439 \u043b\u0438\u043d\u0438\u0438 \u043a\u0435\u0448\u0430 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u0435\u043d \u0438\u043d\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438. \u0410 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043c\u0430\u0448\u0438\u043d\u043e\u0439, \u0438 \u043a\u0430\u0440\u0442\u043e\u0439 \u2014 \u044d\u0442\u043e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430.<\/p>\n<pre><code class=\"cpp\">\/\/ https:\/\/lkml.org\/lkml\/2018\/5\/18\/979dma_map_single(, dir)dma_sync_single_for_cpu(, dir)dma_sync_single_for_device(, dir)dma_unmap_single(, dir)\/* *           map           for_cpu       for_device    unmap * TO_DEV    writeback     none          writeback     none * TO_CPU    invalidate    invalidate*   invalidate    invalidate* * BIDIR     writeback     invalidate    writeback     invalidate *\/<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0434\u0440\u0430\u0439\u0432\u0435\u0440<strong> <\/strong>\u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043e\u0431\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430. \u0414\u0440\u0430\u0439\u0432\u0435\u0440 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 Linux API <code>dma_alloc_attrs()<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u0430\u043c \u043a\u043e\u0433\u0435\u0440\u0435\u043d\u0442\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c \u2014 \u0442\u0430\u043a\u0443\u044e, \u0433\u0434\u0435 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u00ab\u0436\u0435\u043b\u0435\u0437\u043a\u043e\u0439\u00bb, DDR \u0438 \u043a\u0435\u0448\u0435\u043c \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043b\u0438\u0431\u043e \u043a\u043e\u0433\u0435\u0440\u0435\u043d\u0442\u043d\u044b\u043c \u043f\u043e\u0440\u0442\u043e\u043c, \u043b\u0438\u0431\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u0430 \u043f\u043e \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c.<\/p>\n<pre><code class=\"cpp\">\/\/ linux\/drivers\/gpu\/drm\/ttm\/ttm_pool.cstatic struct page *ttm_pool_alloc_page(..., unsigned int order){  vaddr = dma_alloc_attrs((1ULL &lt;&lt; order) * PAGE_SIZE,                          &amp;dma-&gt;addr, gfp_flags, attr);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u043d\u0435\u0442 \u043a\u043e\u0433\u0435\u0440\u0435\u043d\u0442\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0442\u0430, \u043c\u044b \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d\u044b \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043e\u0442 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0430\u043a\u0438\u0445 \u0431\u0443\u0444\u0435\u0440\u043e\u0432. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0432\u0443\u043c\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438:<\/p>\n<ul>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0430\u0448 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u043c\u043e\u0436\u0435\u0442 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043c\u0435\u043d\u044f\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b, \u043c\u044b \u0432\u044b\u0434\u0435\u043b\u0438\u043c \u043d\u0443\u0436\u043d\u044b\u0439 \u043d\u0430\u043c \u0431\u0443\u0444\u0435\u0440 \u043f\u0430\u043c\u044f\u0442\u0438, \u0430 \u0437\u0430\u0442\u0435\u043c \u0441\u043d\u0438\u043c\u0435\u043c \u0441 \u043d\u0435\u0433\u043e \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u043a\u0435\u0448\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u0438.\u00a0<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043c\u044b \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u043c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043a\u0443\u0441\u043e\u043a \u043f\u0430\u043c\u044f\u0442\u0438 \u043a\u0430\u043a \u043d\u0435\u043a\u0435\u0448\u0438\u0440\u0443\u0435\u043c\u044b\u0439.\u00a0<\/p>\n<\/li>\n<\/ul>\n<p>\u041c\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u043f\u0440\u043e\u0449\u0435 \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b\u0441\u044f \u043d\u0430\u0448\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0443 Linux \u043f\u043e\u0434 \u044d\u0442\u043e \u0435\u0441\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u0430\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 <code>shared-dma-pool<\/code>, \u043a\u0443\u0434\u0430 \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0432\u0441\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0432 Device Tree \u0447\u0435\u0440\u0435\u0437 OpenSBI, \u0433\u0434\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 physical memory protection. \u0418 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 <code>mmio<\/code> \u043c\u044b \u0434\u0430\u0435\u043c \u0437\u043d\u0430\u043a \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c \u043a\u0443\u0441\u043a\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u043a\u0435\u0448\u0435\u0439 \u0431\u044b\u0442\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e.\u00a0<\/p>\n<pre><code class=\"javascript\">\/\/ Device Treereserved-memory {   linux,dma@0 {    compatible = \"shared-dma-pool\";    reg = &lt;UPPER32(BASE) LOWER32(BASE)           UPPER32(SIZE) LOWER32(SIZE)&gt;;    linux,dma-default;    no-map;  }}opensbi-domains {   compatible = \"opensbi,domain,config\";  dma_mem: dma_mem {    compatible = \"opensbi,domain,memregion\";    base = &lt;UPPER32(BASE) LOWER32(BASE)&gt;;    order = &lt;LOG2_DMA_SIZE&gt;;    mmio;  };<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u043b\u044f NVMe \u044d\u0442\u043e\u0433\u043e \u0431\u044b\u043b\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0441 \u0435\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043a PCIe \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u043e. \u041d\u043e AMD GPU \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u0435\u0439\u2026<\/p>\n<h3>\u041d\u0435\u0433\u043e\u0434\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430<\/h3>\n<p>\u041f\u043e\u0441\u043b\u0435 <code>dma_alloc_attrs()<\/code> \u0438\u0434\u0435\u0442 \u043a\u0440\u0430\u0439\u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439:\u00a0<\/p>\n<pre><code class=\"cpp\">\/\/ linux\/drivers\/gpu\/drm\/ttm\/ttm_pool.cstatic struct page *ttm_pool_alloc_page(..., unsigned int order){  vaddr = dma_alloc_attrs((1ULL &lt;&lt; order) * PAGE_SIZE,                          &amp;dma-&gt;addr, gfp_flags, attr);    \/* TODO: This is an illegal abuse of the DMA API, but we need to rework\u00a0\u00a0\u00a0* TTM page fault handling and extend the DMA API to clean this up.\u00a0\u00a0\u00a0*\/   struct page *p;   if (is_vmalloc_addr(vaddr))     p = vmalloc_to_page(vaddr);   else     p = virt_to_page(vaddr);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0431\u044b\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0432 2021 \u0433\u043e\u0434\u0443 \u0438 \u0430\u043a\u0442\u0443\u0430\u043b\u0435\u043d \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440. \u0417\u0430 \u043f\u0430\u0440\u0443 \u043b\u0435\u0442 \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0442\u0430\u043a\u0443\u044e \u0436\u0435 \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u043c\u0435\u0439\u043d\u0442\u0435\u0439\u043d\u0435\u0440 DMA \u043e\u0442\u043c\u0435\u0442\u0438\u043b \u043a\u0430\u043a broken, \u0438 \u043e\u043d \u0431\u044b\u043b \u00ab\u043f\u0440\u043e\u043a\u043b\u044f\u0442\u00bb \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u0447\u0438\u043d\u0438\u043b\u0438. \u0422\u0430\u043a\u0436\u0435 \u0435\u0433\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432 \u043c\u0435\u043d\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 Linux:<\/p>\n<blockquote>\n<p><a href=\"https:\/\/lore.kernel.org\/linux-mm\/20190614134726.3827-13-hch@lst.de\/\ufffc\">https:\/\/lore.kernel.org\/linux-mm\/20190614134726.3827-13-hch@lst.de\/<br \/><\/a>Subject: [PATCH 12\/16] staging\/comedi: mark as broken<\/p>\n<p>comedi_buf.c abuse the DMA API in gravely broken ways, as it assumes it<br \/>can call virt_to_page on the result, and the just remap it as uncached<br \/>using vmap.  Disable the driver until this API abuse has been fixed.<\/p>\n<p>Signed-off-by: Christoph Hellwig<\/p>\n<\/blockquote>\n<p>\u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c \u043f\u0443\u0442\u0435\u043c \u043e\u0431\u0445\u043e\u0434\u0430 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u043e\u0447\u0438\u043d\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0442\u0435\u043a, \u043d\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u0435\u043d \u0431\u044b\u043b \u043b\u0438\u043d\u0443\u043a\u0441\u043e\u0438\u0434-\u00ab\u0433\u0440\u0430\u0444\u0438\u0441\u0442\u00bb \u0438 \u0432\u0440\u0435\u043c\u044f. \u0423 \u043d\u0430\u0441 \u043d\u0435 \u0431\u044b\u043b\u043e \u043d\u0438 \u0442\u043e\u0433\u043e, \u043d\u0438 \u0434\u0440\u0443\u0433\u043e\u0433\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043d\u0430\u0447\u0430\u043b\u0438 \u0438\u0441\u043a\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435. <span class=\"habrahidden\">\u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u00ab\u043a\u043e\u0441\u0442\u044b\u043b\u044c\u00bb \u043d\u0430\u0441 \u0431\u044b \u0443\u0441\u0442\u0440\u043e\u0438\u043b\u043e \u0434\u043b\u044f \u0446\u0435\u043b\u0435\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430\u0448\u0435\u0439 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u044b.<\/span><\/p>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u044b\u0439 \u043a\u043e\u0434 \u0436\u0435\u043b\u0430\u043b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 <code>struct page<\/code> (64-\u0431\u0430\u0439\u0442\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 4\u041a\u0438\u0411 \u0438\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435) \u0434\u043b\u044f \u0430\u0434\u0440\u0435\u0441\u0430, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u0437 Linux DMA API. \u042d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 x86, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0442\u0430\u043c \u0432\u0441\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u043a\u043e\u0433\u0435\u0440\u0435\u043d\u0442\u043d\u0430\u044f, \u0438 DMA API \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0430\u0434\u0440\u0435\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0433 \u0431\u044b \u043f\u0440\u0438\u0439\u0442\u0438 \u0438\u0437 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440\u0430.<\/p>\n<p>\u0410 \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0439 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043d\u0435\u0442 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <code>shared-dma-pool<\/code>, \u0442\u043e \u0430\u0434\u0440\u0435\u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 <code>ioremap()<\/code>. \u041e\u043d \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439, \u043d\u043e \u0431\u0435\u0437 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 <code>struct page<\/code>. \u0418 <code>virt_to_page()<\/code> \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441, \u0435\u0441\u043b\u0438 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u0432\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u0442\u044c\u0441\u044f. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u043d \u0432\u0435\u0434\u0435\u0442 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0442\u0443\u0434\u0430, \u043a\u0443\u0434\u0430 \u043d\u0430\u0434\u043e. \u041d\u0430\u043c \u043f\u043e\u0432\u0435\u0437\u043b\u043e \u044d\u0442\u043e \u0432\u043e\u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0430\u0434\u0440\u0435\u0441 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u044f\u0434\u0435\u0440\u043d\u044b\u0445 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u043e\u0432 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u043b\u0430\u0441\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043e \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u043c \u0430\u0434\u0440\u0435\u0441\u0435.<\/p>\n<p>\u041b\u0435\u0447\u0438\u043b\u0438 \u043c\u044b \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0440\u0430\u0437\u043d\u043e\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u044c\u044e <code>shared-dma-pool<\/code> \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u2014 CMA (Continuous Memory Allocation). \u041e\u043d \u0442\u043e\u0436\u0435 \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043b \u0432 \u043d\u0430\u0448\u0435\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u043c\u0435\u0441\u0442\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0442\u0432\u0435\u0434\u0435\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434 DMA, \u0438 \u043c\u044b \u0432\u0441\u0435 \u0442\u0430\u043a \u0436\u0435 \u043f\u0440\u043e\u0441\u0438\u043b\u0438 OpenSBI \u0441\u043d\u044f\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u043a\u0435\u0448\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u0438 \u0441 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u043e\u043d\u0430, \u043d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0438\u043c\u0435\u043b\u0438 <code>struct page<\/code>.<\/p>\n<pre><code class=\"javascript\">\/\/ Device Treereserved-memory {   linux,dma@0 {    compatible = \"shared-dma-pool\";    reg = &lt;UPPER32(BASE) LOWER32(BASE)           UPPER32(SIZE) LOWER32(SIZE)&gt;;    linux,cma-default;    reusable;  };}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0413\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 Linux (GPU\/DRM) \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u043b\u0430 \u0443 \u041f\u041b\u0418\u0421 \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u043a\u043e\u0433\u0435\u0440\u0435\u043d\u0442\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 4 \u041a\u0438\u0411. \u0412 \u0432\u0430\u043d\u0438\u043b\u044c\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 CMA \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0441\u044f \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c. \u00ab\u041d\u0435 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044f \u0431\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u043d\u00bb, \u2014 \u0433\u043e\u0432\u043e\u0440\u0438\u043b CMA, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d \u0431\u044b\u043b \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d \u043d\u0430 \u0431\u043e\u0301\u043b\u044c\u0448\u0438\u0435 \u043a\u0443\u0441\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438. \u041d\u0430\u043c \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043d\u0435\u043c\u043d\u043e\u0436\u043a\u043e \u043d\u0430\u043f\u0430\u0440\u0438\u0442\u044c Linux. \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u043f\u043e\u043c\u043e\u0433\u043b\u043e \u043d\u0430\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0430\u0448\u0443 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0443 \u0438 \u0434\u0435\u043c\u043e OpenGL \u043d\u0430 \u043d\u0435\u0439, \u043d\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0438\u0436\u0435.<\/p>\n<pre><code class=\"diff\">diff --git a\/kernel\/dma\/contiguous.c b\/kernel\/dma\/contiguous.cindex 055da410ac71..4d1f636d165a 100644--- a\/kernel\/dma\/contiguous.c+++ b\/kernel\/dma\/contiguous.c@@ -360,7 +360,7 @@ struct page *dma_alloc_contiguous(dev, size, gfp)  if (dev-&gt;cma_area)      return cma_alloc_aligned(dev-&gt;cma_area, size, gfp);  if (size &lt;= PAGE_SIZE)-     return NULL;+     size = PAGE_SIZE;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<blockquote>\n<p>\u041f\u043e\u043a\u0430 \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0443 CMA, \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f, \u043f\u0440\u0438\u0447\u0435\u043c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e. \u042d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u044f\u0434\u0440\u043e \u043f\u043e\u043d\u043e\u0432\u0435\u0435. \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043b\u0438 \u043a \u0440\u0430\u0431\u043e\u0442\u0435, \u043c\u044b \u0432\u0437\u044f\u043b\u0438 \u043d\u0435 \u0441\u0430\u043c\u043e\u0435 \u0441\u0432\u0435\u0436\u0435\u0435 \u044f\u0434\u0440\u043e, \u043d\u043e \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u043d\u0430\u043c \u043a\u043e\u0434\u0430\u043c\u0438 \u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430\u043c\u0438.\u00a0<\/p>\n<p>\u0415\u0441\u0442\u044c \u043b\u044e\u0434\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u0438\u0437\u0431\u0435\u0433\u0430\u044e\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u044f\u0434\u0440\u0430, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u043d\u043e\u0432\u044b\u043c\u0438 \u0431\u0430\u0433\u0430\u043c\u0438, \u043d\u043e \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043e\u043d\u0438 \u0443\u043f\u0443\u0441\u043a\u0430\u044e\u0442 \u0440\u0435\u043b\u0438\u0437\u044b \u0441 \u0444\u0438\u043a\u0441\u0430\u043c\u0438 \u0438 \u0442\u0440\u0430\u0442\u044f\u0442 \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u043e\u0442\u043b\u0430\u0434\u043a\u0443 \u0443\u0436\u0435 \u0440\u0435\u0448\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c.\u00a0<\/p>\n<p>\u041c\u044b \u0443\u044f\u0441\u043d\u0438\u043b\u0438: \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439 \u043b\u0443\u0447\u0448\u0435 \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0440\u0441\u0438\u0439 \u044f\u0434\u0440\u0430 Linux. \u041d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439 \u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u0441\u0442\u0430\u0440\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0442\u044f\u043d\u0443\u0442\u044c \u0441\u0432\u043e\u0439 \u043a\u043e\u0434 \u043d\u0430 \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u2014 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0432\u0435\u0437\u0442\u0438 \u0438 \u0442\u0430\u043c \u0443\u0436\u0435 \u0432\u0441\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e.\u00a0<\/p>\n<\/blockquote>\n<p>\u0418 \u0432\u043e\u0442 \u0435\u0449\u0435 \u043e\u0434\u043d\u043e \u0440\u0443\u0436\u044c\u0435 \u0432\u044b\u0441\u0442\u0440\u0435\u043b\u0438\u043b\u043e: \u0432\u044b \u043f\u043e\u043c\u043d\u0438\u0442\u0435, \u0447\u0442\u043e \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u0442\u0435\u043d\u0434\u0435 \u043d\u0435 \u0432\u043b\u0435\u0437\u0430\u0435\u0442 \u0432 32 \u0431\u0438\u0442\u0430 \u0438 \u0435\u0435 \u043d\u0430\u0447\u0430\u043b\u043e \u043b\u0435\u0436\u0438\u0442 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u043f\u0435\u0440\u0432\u044b\u0445 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442? \u0410 \u0432\u0435\u0434\u044c \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043c\u0435\u0441\u0442\u0430 \u0432 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430\u0445, \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u043b\u0430\u0433\u0430 <code>GFP_DMA32<\/code> \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u043f\u0435\u0440\u0432\u044b\u0445 4\u0413\u0438\u0411. \u0415\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0438 \u0432 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0435 <code>amdgpu<\/code> \u2014 \u043e \u043d\u0435\u043c <a href=\"https:\/\/habr.com\/ru\/companies\/yadro\/articles\/851068\/\">\u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b<\/a> \u043d\u0430\u0448 \u043a\u043e\u043b\u043b\u0435\u0433\u0430 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440 \u0420\u0430\u0437\u0438\u043d\u043a\u043e\u0432 \u0432 \u0441\u0432\u043e\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u043e \u043f\u043e\u0445\u043e\u0436\u0443\u044e \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0443 \u043d\u0430 \u043f\u043e\u0445\u043e\u0436\u0435\u0439 \u041f\u041b\u0418\u0421. \u041d\u043e \u043d\u0430\u043c \u043f\u043e\u0432\u0435\u0437\u043b\u043e: \u043d\u0430\u0448\u0430 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b\u0430 40-\u0431\u0438\u0442\u043d\u044b\u0435 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0444\u043b\u0430\u0433 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u0435\u0437\u0431\u043e\u043b\u0435\u0437\u043d\u0435\u043d\u043d\u043e \u0443\u0431\u0440\u0430\u0442\u044c:<\/p>\n<pre><code class=\"diff\">--- a\/drivers\/gpu\/drm\/ttm\/ttm_device.c+++ b\/drivers\/gpu\/drm\/ttm\/ttm_device.c@@ -96,7 +96,7 @@ static int ttm_global_init(void)        ttm_pool_mgr_init(num_pages);        ttm_tt_mgr_init(num_pages, num_dma32);-       glob-&gt;dummy_read_page = alloc_page(__GFP_ZERO | GFP_DMA32 |+       glob-&gt;dummy_read_page = alloc_page(__GFP_ZERO |                                           __GFP_NOWARN);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u043f\u0438\u0448\u0443\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0434\u043b\u044f x86, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0432 \u043d\u0438\u0445 \u043c\u043e\u0433\u0443\u0442 \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u043e, \u0430 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u0441\u043e\u0432\u0441\u0435\u043c \u0434\u0440\u0443\u0433\u043e\u0435. \u041d\u0430\u0448 AMD \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>ttm_device_init()<\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0437\u0430\u0434\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u0434\u0432\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u0430:\u00a0<\/p>\n<ol>\n<li>\n<p>\u0412\u0430\u043c DMA-\u043a\u043e\u0433\u0435\u0440\u0435\u043d\u0442\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u043b\u0438 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e <code>alloc()<\/code> \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e?\u00a0<\/p>\n<\/li>\n<li>\n<p>\u041d\u0443\u0436\u043d\u044b \u043b\u0438 \u0432\u0430\u043c 32-\u0431\u0438\u0442\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0438\u043b\u0438 \u043f\u043e\u0434\u043e\u0439\u0434\u0443\u0442 \u043b\u044e\u0431\u044b\u0435?<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"cpp\">\/\/ linux\/drivers\/gpu\/drm\/ttm\/ttm_device.c * @use_dma_alloc: If coherent DMA allocation API should be used. * @use_dma32: If we should use GFP_DMA32 for device memory allocations.int ttm_device_init(..., bool use_dma_alloc, bool use_dma32)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u043e\u0442\u0432\u0435\u0447\u0430\u043b \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441: \u00ab\u041d\u0443\u0436\u0435\u043d \u043b\u0438 \u0432\u0430\u043c SWIOTLB \u2014 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440 \u0432 \u043f\u0435\u0440\u0432\u044b\u0445 4\u0413\u0438\u0411 \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0430 \u0442\u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0432\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443?\u00bb \u0422\u0430\u043a\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0442\u0438, \u0435\u0441\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u044b \u0432\u044b\u043f\u043e\u043b\u0437\u0430\u0435\u0442 \u0437\u0430 \u0440\u0430\u043c\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 40 \u0431\u0438\u0442. \u0415\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 userspace \u0432\u044b\u0434\u0435\u043b\u0438\u0442 \u0431\u0443\u0444\u0435\u0440 \u0432 \u00ab\u0434\u0430\u043b\u044c\u043d\u0435\u0439\u00bb, \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0435 \u0447\u0430\u0441\u0442\u0438 \u043f\u0430\u043c\u044f\u0442\u0438, \u0442\u043e \u043a\u0430\u0440\u0442\u0430 \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0442\u0443\u0434\u0430 \u0434\u043e\u0441\u0442\u0443\u0447\u0430\u0442\u044c\u0441\u044f. \u041d\u0430\u0448\u0435\u0439 \u043a\u0430\u0440\u0442\u0435 \u0442\u0430\u043a\u043e\u0439 \u0431\u0443\u0444\u0435\u0440 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u00ab\u043d\u0435\u0442\u00bb.<\/p>\n<p>\u041d\u043e \u0432\u043e\u043f\u0440\u043e\u0441 \u0431\u044b\u043b \u0441\u043e\u0432\u0441\u0435\u043c \u043e \u0434\u0440\u0443\u0433\u043e\u043c\u2026 \u0410\u0434\u0440\u0435\u0441 \u0432 \u0438\u0442\u043e\u0433\u0435 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u043c <code>alloc()<\/code>, \u0438 \u0443 \u043d\u0430\u0441 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0430\u043c\u044f\u0442\u044c \u043d\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0430 \u0441 \u043a\u0435\u0448\u0435\u043c. \u041d\u0430\u0448\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u044e\u0442 \u0432 \u043f\u043e\u043b\u043d\u043e\u0439 \u043c\u0435\u0440\u0435 \u0434\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u0434\u043e \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u044b.<\/p>\n<p>\u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0435 <code>ttm_device_init()<\/code> \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442, \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e 32-\u0431\u0438\u0442\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0434\u043b\u044f DMA, \u0430 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 <code>amdgpu<\/code> \u0441\u043d\u043e\u0432\u0430 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0432\u043e\u043f\u0440\u043e\u0441, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u043c \u0434\u043b\u044f \u043d\u0430\u0441 \u0432 \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435 \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430\u0448 PCIe-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u0442\u043e \u043f\u043e\u0438\u0441\u043a \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043c\u044b \u043e\u0442\u043b\u043e\u0436\u0438\u043b\u0438 \u043d\u0430 \u043f\u043e\u043f\u043e\u0437\u0436\u0435, \u0438 \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0431\u043e\u0448\u043b\u0438\u0441\u044c \u043a\u043e\u0441\u0442\u044b\u043b\u0435\u043c:<\/p>\n<pre><code class=\"diff\">@@ -1829,8 +1829,8 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)        r = ttm_device_init(-                              adev-&gt;need_swiotlb,-                              dma_addressing_limited(adev-&gt;dev));+                              true,+                              false);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043a \u043d\u0430\u0441\u0443\u0449\u043d\u044b\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c: \u043a\u0442\u043e-\u0442\u043e \u0432 \u0437\u0434\u0440\u0430\u0432\u043e\u043c \u0443\u043c\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c AMD GPU \u043d\u0430 \u041f\u041b\u0418\u0421? \u0412\u0440\u044f\u0434 \u043b\u0438 \u043a\u0442\u043e \u0431\u0443\u0434\u0435\u0442, \u043d\u043e \u043c\u044b \u043f\u043e\u043d\u044f\u043b\u0438, \u0447\u0442\u043e \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u0430. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u0440\u0443\u043a\u0438 \u0438 \u0432\u0440\u0435\u043c\u044f, \u0432\u0430\u0448\u0443 \u043d\u043e\u0432\u0443\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u043d\u0430\u0434\u043e \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u0430\u043c\u044b\u0445 \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u0445. \u041d\u0430\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u043c\u0438\u043a\u0440\u043e\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0439 \u0431\u0430\u0433, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u043b\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u0432\u043f\u043e\u043b\u043d\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0445 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432.\u00a0<\/p>\n<p>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0439\u0442\u0435 \u043a \u0432\u0430\u0448\u0435\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 \u0441\u0430\u043c\u043e\u0435 \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0435 \u0438 \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0435 \u0441 \u043d\u0435\u0439 \u0436\u0435\u043b\u0435\u0437\u043e \u2014 \u044d\u0442\u043e \u043f\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0439!<\/p>\n<details class=\"spoiler\">\n<summary>\u0418\u0442\u043e\u0433\u0438 \u0440\u0430\u0431\u043e\u0442\u044b<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5bc\/5b0\/49c\/5bc5b049cdaac4f29401c358a5e7275f.png\" alt=\"\u041c\u044b \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u0434\u0435\u043c\u043a\u0443 glmark2-es2-drm: \u043a\u043e\u0442\u0438\u043a \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u043b\u0441\u044f \u0441\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e 41 \u043a\u0430\u0434\u0440 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443\" title=\"\u041c\u044b \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u0434\u0435\u043c\u043a\u0443 glmark2-es2-drm: \u043a\u043e\u0442\u0438\u043a \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u043b\u0441\u044f \u0441\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e 41 \u043a\u0430\u0434\u0440 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443\" width=\"1999\" height=\"1999\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/5bc\/5b0\/49c\/5bc5b049cdaac4f29401c358a5e7275f.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5bc\/5b0\/49c\/5bc5b049cdaac4f29401c358a5e7275f.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041c\u044b \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u0434\u0435\u043c\u043a\u0443 glmark2-es2-drm: \u043a\u043e\u0442\u0438\u043a \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u043b\u0441\u044f \u0441\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e 41 \u043a\u0430\u0434\u0440 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443<\/figcaption><\/div>\n<\/figure>\n<\/div>\n<\/details>\n<blockquote>\n<p>\u0421\u0442\u0430\u0442\u044c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043f\u043e \u043c\u043e\u0442\u0438\u0432\u0430\u043c \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0441 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 FPGA System. \u0415\u0433\u043e \u0437\u0430\u043f\u0438\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 <a href=\"https:\/\/rutube.ru\/video\/46574bc0203afb887ff256731a206301\">Rutube<\/a> \u0438 <a href=\"https:\/\/youtu.be\/fbjjwkb_dfY?si=V7klMZfNIMGFFTeh\">YouTube<\/a>.  <\/p>\n<\/blockquote>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/946950\/\">https:\/\/habr.com\/ru\/articles\/946950\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0421\u0435\u0440\u0433\u0435\u0439 \u041c\u0438\u0440\u043e\u0448\u043d\u0438\u0447\u0435\u043d\u043a\u043e. \u042f \u0440\u0443\u043a\u043e\u0432\u043e\u0436\u0443 \u0433\u0440\u0443\u043f\u043f\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 YADRO. \u041c\u043e\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u0431\u0443\u0434\u0435\u0442 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c AMD GPU \u043d\u0430 \u041f\u041b\u0418\u0421 \u0441 RISC-V \u0438 Linux.\u041d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0432\u0441\u0435 \u0441 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 PCIe-\u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0430\u0448\u0435\u0439 \u0421\u043d\u041a. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0432\u0437\u044f\u043b\u0438 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0440\u0430\u0431\u043e\u0447\u0438\u0435 NVMe \u0438 \u0432\u0438\u0434\u0435\u043e\u0443\u0441\u043a\u043e\u0440\u0438\u0442\u0435\u043b\u044c \u0441 \u043f\u043e\u043b\u043d\u044b\u043c \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u043e\u043c \u041f\u041e \u0434\u043b\u044f \u043d\u0438\u0445 (\u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0432 \u0432\u0430\u043d\u0438\u043b\u044c\u043d\u043e\u043c \u044f\u0434\u0440\u0435 Linux, \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a).\u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0432\u044b\u0441\u043e\u043a\u043e\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u043d\u043e\u0439 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438, \u0442\u043e, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0440\u0435\u0447\u044c \u0438\u0434\u0435\u0442 \u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445 \u0438 \u041f\u041a, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 x86. \u041d\u043e \u0435\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f (\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f!) \u043e\u0442 \u0442\u0435\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0421\u043d\u041a, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c. \u0412\u0441\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0435 \u0442\u0435\u0437\u0438\u0441\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u044b \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043a RISC-V, \u043d\u043e \u0438 \u043a \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435.\u0412\u0441\u0435 \u043f\u043e\u0437\u043d\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438\u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0442\u0435\u043e\u0440\u0438\u0438, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u2014\u00a0\u0441 \u043a\u0440\u0430\u0442\u043a\u043e\u0433\u043e \u044d\u043a\u0441\u043a\u0443\u0440\u0441\u0430 \u0432 PCI-Express \u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044b. PCI-Express, \u0438\u043b\u0438 PCIe (Peripheral Component Interconnect Express), \u2014 \u044d\u0442\u043e \u043d\u0435\u043e\u0442\u044a\u0435\u043c\u043b\u0435\u043c\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0432\u0441\u0435\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c. \u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043d\u043e\u0432\u043e\u0439 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439, RISC-V \u043c\u0430\u0448\u0438\u043d\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439, \u0435\u0441\u043b\u0438 \u0432 \u043d\u0435\u0439 \u043d\u0435\u0442 PCIe. \u041f\u043e\u0442\u043e\u043c\u0443 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0443\u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a \u0438 \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 RISC-V \u0432 \u043e\u0431\u0449\u0435\u043c \u0438 \u043d\u0430\u0448\u0438 \u0421\u043d\u041a \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b \u0441 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c\u0438 \u043d\u0430\u043c \u043a\u0430\u0440\u0442\u0430\u043c\u0438 \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 PCIe.PCIe \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044e, \u0438\u043c\u0435\u044e\u0449\u0443\u044e \u0431\u00f3\u043b\u044c\u0448\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u0447\u0435\u043c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0430 \u043a\u0440\u0438\u0441\u0442\u0430\u043b\u043b\u0435. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u0441\u043e\u043a\u043e\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u043d\u043e\u0439 Ethernet \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 InfiniBand \u0438 RDMA \u0438\u043b\u0438 \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u044c \u0441 \u0431\u043e\u043b\u0435\u0435 \u0448\u0438\u0440\u043e\u043a\u0438\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438, \u0447\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0430\u044f SPI-\u0444\u043b\u0435\u0448\u043a\u0430 \u0441 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u043e\u0439 \u0438\u043b\u0438 \u043c\u043e\u0434\u043d\u0435\u0439\u0448\u0438\u0439 eMMC. \u041d\u0430\u043c \u043c\u043e\u0436\u0435\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043b\u0438\u0431\u043e \u043e\u0431\u044a\u0435\u043c\u043d\u044b\u0439 \u0448\u043f\u0438\u043d\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u0438\u0441\u043a, \u043b\u0438\u0431\u043e NVMe, \u0438 \u0434\u0430\u0436\u0435 \u043d\u0435 \u043e\u0434\u0438\u043d, \u0430 \u0446\u0435\u043b\u0430\u044f \u0438\u0445 \u043a\u043e\u0440\u0437\u0438\u043d\u0430.\u041e\u0434\u0438\u043d \u0438\u0437 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0439 \u043f\u043e\u043b\u043a\u0438 \u0421\u0425\u0414 TATLIN \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f PCIe-\u0441\u0432\u0438\u0442\u0447 \u0438 \u043a\u043e\u0440\u0437\u0438\u043d\u043a\u0443 \u0438\u0437 34 NVMe-\u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u0435\u0439 \u0438 \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0430\u043f\u0442\u0435\u0440 SAS-PCIe (\u0432\u044b\u0434\u0432\u0438\u043d\u0443\u0442), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u0443\u0435\u0442 \u0434\u0438\u0441\u043a\u0438 \u0432 \u0435\u0434\u0438\u043d\u044b\u0439 PCIe link (\u0444\u043e\u0442\u043e \u0441\u043b\u0435\u0432\u0430), \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0441\u0430\u0434\u043e\u0447\u043d\u044b\u0435 \u043c\u0435\u0441\u0442\u0430 \u0434\u043b\u044f 90 SAS-\u0434\u0438\u0441\u043a\u043e\u0432 (\u0444\u043e\u0442\u043e \u0441\u043f\u0440\u0430\u0432\u0430)\u041f\u041b\u0418\u0421 \u0441 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0439 \u043a \u043d\u0435\u043c\u0443 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u043e\u0439. \u0427\u0435\u0440\u0435\u0437 \u0430\u0434\u0430\u043f\u0442\u0435\u0440 \u0432 \u043b\u0435\u0432\u043e\u043c \u043d\u0438\u0436\u043d\u0435\u043c \u0443\u0433\u043b\u0443 \u0434\u0432\u0443\u0445\u044e\u043d\u0438\u0442\u043e\u0432\u043e\u0435 \u0448\u0430\u0441\u0441\u0438 \u0441 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a \u043c\u0430\u0448\u0438\u043d\u0435PCIe \u0437\u0430\u0432\u043e\u0435\u0432\u0430\u043b \u0441\u0435\u0440\u0434\u0446\u0430 \u043b\u044e\u0434\u0435\u0439 \u0437\u0430 \u0441\u0447\u0435\u0442 \u0441\u0432\u043e\u0435\u0439 \u0431\u044b\u0441\u0442\u0440\u043e\u0442\u044b \u0438 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430. \u041f\u043e\u0434 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0435\u0449\u0438: \u0432\u0441\u0435 \u043f\u043e\u0437\u043d\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438.\u0412\u043e\u0437\u044c\u043c\u0435\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0438 \u043c\u043d\u043e\u0433\u0438\u043c \u0437\u043d\u0430\u043a\u043e\u043c\u0443\u044e \u0448\u0438\u043d\u0443 i2c. \u0412 API \u044f\u0434\u0440\u0430 Linux \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0438\u0437 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u043e i2c \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439: \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 \u043f\u043e \u0435\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0443 \u0441 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435, \u0437\u0430\u0442\u0435\u043c \u0447\u0442\u0435\u043d\u0438\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0432 \u043e\u0442\u0432\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445. \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u044d\u0442\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u0432\u0438\u0434\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u2014 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0437 \u0434\u0432\u0443\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 ([0], [1]) \u2014 \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043c\u044b \u0438\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0441\u0430\u043c\u043e\u0439 \u0448\u0438\u043d\u044b, \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u043d\u0435\u0439, \u0444\u043b\u0430\u0433\u0430\u043c\u0438, \u0430\u0434\u0440\u0435\u0441\u0430\u043c\u0438 \u0438 \u0434\u043b\u0438\u043d\u0430\u043c\u0438 \u0431\u0443\u0444\u0435\u0440\u043e\u0432.\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f \u0443 i2c:\/\/ linux\/drivers\/net\/phy\/sfp.cint sfp_i2c_read(){  msgs[0].addr = bus_addr;  msgs[0].flags = 0;  msgs[0].len = 1;  msgs[0].buf = &amp;dev_addr;  msgs[1].addr = bus_addr;  msgs[1].flags = I2C_M_RD;  msgs[1].len = len;  msgs[1].buf = buf;  i2c_transfer(sfp-&gt;i2c, msgs, ARRAY_SIZE(msgs));}\u0421 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u043d\u0430 \u0448\u0438\u043d\u0435 i2c \u043c\u044b \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u043c \u043d\u0435 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u0430 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u043d\u0430\u0431\u043e\u0440\u0442\u043d\u043e\u0433\u043e i2c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430: \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0431\u0430\u0439\u0442\u0443 \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0438\u0445 \u0432 FIFO. \u0425\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u043d\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c i2c \u2014 ~100 \u043a\u0431\u0438\u0442\/\u0441. \u041e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0442\u0430\u043a\u0442\u043e\u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u043c\u044b \u0442\u0440\u0430\u0442\u0438\u043c \u043d\u0430 \u043c\u0435\u0445\u0430\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0435\u0439 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0442\u043e\u043c \u0434\u0440\u0430\u0439\u0432\u0435\u0440 i2c-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b \u0438\u0445 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b \u043f\u043e\u0431\u0430\u0439\u0442\u043d\u043e \u0432 \u0448\u0438\u043d\u0443. \u0422\u043e \u0435\u0441\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0445\u043e\u0442\u0438\u043c \u043f\u0440\u043e\u0447\u0435\u0441\u0442\u044c 4 \u0431\u0430\u0439\u0442\u0430, \u043d\u0443\u0436\u043d\u043e \u0434\u0432\u0443\u0445\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0441\u043b\u043e\u0438 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438, \u0437\u0430\u0442\u0440\u0430\u0447\u0438\u0432\u0430\u044f \u043d\u0430 \u044d\u0442\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430.FIFO i2c \u2014 \u044d\u0442\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0432\u043d\u0443\u0442\u0440\u0438 i2c-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u043f\u0430\u043c\u044f\u0442\u044c. \u041e\u043d \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0430\u0434\u0440\u0435\u0441 \u0432 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043c\u0435\u0440\u0442\u0432\u043e \u043f\u0440\u0438\u0431\u0438\u0442 \u0435\u0449\u0435 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 RTL-\u0434\u0438\u0437\u0430\u0439\u043d\u0430. \u041c\u044b \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u043c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430\u043c Linux \u0435\u0433\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u044b (\u0447\u0435\u0440\u0435\u0437 Device Tree \u0438\u043b\u0438 ACPI).\u041e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0439 read*() \u0438 write*(), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u0443\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u043f\u0430\u043c\u044f\u0442\u0438: \u043b\u0438\u0431\u043e load byte \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435, \u043b\u0438\u0431\u043e store byte (\u043f\u043b\u044e\u0441 \u0431\u0430\u0440\u044c\u0435\u0440\u044b \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438):\/\/ drivers\/i2c\/busses\/i2c-imx.cimx_i2c_read_reg(i2c_imx, reg){   return readb(i2c_imx-base + (reg &lt;&lt; i2c_imx&gt;regshift));}i2c_imx_read(i2c_imx, msgs){  msgs-&gt;buf[i] = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR);}\u0427\u0435\u043c \u0436\u0435 \u043b\u0443\u0447\u0448\u0435 \u043d\u0430\u0448 PCIe?\u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 i2c \u0443 PCIe \u0435\u0441\u0442\u044c \u0442\u0440\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438.\u0423 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 (\u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e) \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0449\u0435\u0433\u043e \u0441 i2c: \u043c\u044b \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0440\u0430\u0437\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0432 \u043f\u043e\u0445\u043e\u0436\u0438\u0445 \u043d\u0430 i2c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445.\u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e PCIe-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0443 \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u043b\u043e\u0442\u0430, \u043a\u0443\u0434\u0430 \u043c\u044b \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u044d\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u0432\u0441\u0435\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432. \u041f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u043e\u043d\u0438 \u0437\u0430\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u0427\u0430\u0441\u0442\u044c \u0438\u0445 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439, \u0438 \u0435\u0449\u0451 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043e \u043f\u043e\u0434 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0443 \u043e\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f. \u0418\u0437 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0435\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u0443\u0441 \u043b\u0438\u043d\u043a\u0430 (\u043f\u043e\u0434\u043d\u044f\u0442\/\u043d\u0435 \u043f\u043e\u0434\u043d\u044f\u0442), \u0435\u0433\u043e \u0448\u0438\u0440\u0438\u043d\u0443 \u0438 \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u0435, \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a, \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0438\u0442\u0430\u043d\u0438\u0435\u043c (\u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e) \u0438 \u043f\u0440\u043e\u0447\u0435\u0435. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b Vendor ID \u0438 Device ID \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0443 \u0441 \u043d\u0443\u0436\u043d\u044b\u043c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u043c.\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0441\u0442\u044c \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u0441\u043b\u043e\u0442\u0430: \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f PCIe 6.2, Common Configuration Space Header\u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0439 \u043d\u043e\u043c\u0435\u0440 \u043d\u0430 \u0448\u0438\u043d\u0435. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 i2c \u043d\u0430 \u043d\u0435\u0439 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f 127 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432. \u0423\u0442\u0438\u043b\u0438\u0442\u0430 i2cdetect \u0432 Linux \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u043e \u043a\u0430\u043a\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443 \u0435\u0441\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0436\u0438\u0432\u043e\u0435: \u043e\u043d\u0430 \u043f\u043e\u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0434\u043b\u0438\u043d\u044b \u043d\u0430 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0430\u0434\u0440\u0435\u0441, \u0438, \u0435\u0441\u043b\u0438 \u043d\u0430 \u0442\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0435\u0441\u0442\u044c \u043a\u0442\u043e-\u0442\u043e \u00ab\u0436\u0438\u0432\u043e\u0439\u00bb, \u0432 \u043e\u0442\u0432\u0435\u0442 \u043f\u0440\u0438\u0434\u0435\u0442 acknowledge.PCIe \u043c\u043e\u0436\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435: \u043f\u0440\u0438 \u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0435 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c 256 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043d\u043e\u043c\u0435\u0440\u043e\u0432 \u043d\u0430 \u0448\u0438\u043d\u0435 \u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0443 \u043d\u0438\u0445 \u0447\u0442\u0435\u043d\u0438\u0435 \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0441 Vendor ID \u0438 Device ID. \u0410 \u0435\u0441\u043b\u0438 \u043f\u0440\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442, \u0442\u043e \u043f\u0440\u0438\u0434\u0443\u0442 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0435 \u0431\u0438\u0442\u044b: \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e \u2014 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d.\u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f, \u044d\u0442\u043e\u0442 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u0440\u043e\u0441\u0442 \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438, \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 i2c, \u043a\u0440\u0430\u0439\u043d\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043e\u043d\u043b\u0430\u0439\u043d-\u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0438, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0438\u0442\u0430\u043d\u0438\u0435\u043c, \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, lane margining, \u043d\u043e \u043d\u0435 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043e\u0431\u044a\u0451\u043c\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445.\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 lane margining \u0438 \u043a\u0430\u043a \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e PCIe-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u044b, \u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435.\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 NVMe \u0447\u0435\u0440\u0435\u0437 PCIe \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:\/\/ drivers\/nvme\/host\/pci.cnvme_pci_enable(dev){  if (readl(dev-&gt;bar + NVME_REG_CSTS) == -1)  {    result = -ENODEV;    goto disable;  }____pci_read_config_word(dev, PCI_STATUS, &amp;pci_status);\u0412\u0442\u043e\u0440\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435: \u043e\u043d \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u043f\u0440\u044f\u043c\u043e\u0435 \u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u043d\u0430\u0431\u043e\u0440\u0442\u043d\u043e\u0439 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0435\u0439. \u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (\u0441\u0442\u0430\u0442\u0443\u0441\u043d\u044b\u0439 NVME_REG_CSTS \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435) \u043f\u0440\u043e\u0435\u0446\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043c\u0430\u0448\u0438\u043d\u044b. \u0417\u0434\u0435\u0441\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440 NVMe \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0447\u0438\u0442\u0430\u0435\u0442 \u043e\u0434\u0438\u043d \u0438\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 NVMe-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u043b\u0438\u043d\u043a \u0438\u043b\u0438 \u0434\u0438\u0441\u043a \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0438\u0437 \u0441\u0442\u0440\u043e\u044f, \u2014 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 PCIe \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u0441\u0435 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0435 \u0431\u0438\u0442\u044b, 0xffffffff, \u043e\u0442\u0441\u044e\u0434\u0430 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441 -1.\u00a0\u0424\u0443\u043d\u043a\u0446\u0438\u044f readl() \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u043d\u0443\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u043f\u0430\u043c\u044f\u0442\u0438. \u0422\u043e \u0435\u0441\u0442\u044c \u044d\u0442\u043e\u0442 \u0441\u043f\u043e\u0441\u043e\u0431 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f PCIe \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0438 \u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0439\u043d\u044b\u0445 API. \u0415\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0438\u043b\u0438 \u043f\u0430\u043c\u044f\u0442\u044c PCIe-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u043c\u044b \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043a \u043d\u0438\u043c \u0442\u0435\u043c\u0438 \u0436\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438, \u0447\u0442\u043e \u0438 \u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438.\u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e PCIe-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e \u0448\u0435\u0441\u0442\u0438 \u0442\u0430\u043a\u0438\u0445 \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432 \u043f\u0430\u043c\u044f\u0442\u0438\/\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432. \u0414\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u0438\u0445 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 BAR \u2014 base address register. \u042d\u0442\u043e\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0430\u0434\u0440\u0435\u0441, \u0440\u0430\u0437\u043c\u0435\u0440 \u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0435 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u0443\u0447\u0430\u0441\u0442\u043a\u0430 \u043f\u0430\u043c\u044f\u0442\u0438. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 \u0421\u043d\u041a, \u0430\u0434\u0440\u0435\u0441\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 PCIe \u0431\u0443\u0434\u0443\u0442 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0438 \u043f\u043e\u044f\u0432\u044f\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0443 \u0438\u043b\u0438 NVMe, \u043e\u043d\u0438 \u043f\u043e\u044f\u0432\u044f\u0442\u0441\u044f \u0432 runtime, \u0438 Linux \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442 \u0438\u0445 BAR\u2019\u0430\u043c \u0430\u0434\u0440\u0435\u0441\u0430 \u00ab\u043d\u0430 \u0445\u043e\u0434\u0443\u00bb.\u00a0\u0410\u0434\u0440\u0435\u0441 BAR \u0432 Linux \u2014 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439, \u043a\u0430\u043a \u0438 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u044f\u0434\u0440\u043e\u043c \u041e\u0421 \u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430\u043c\u0438. \u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0439 MMU \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u0443\u0435\u0442 \u0438\u0445 \u0432 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0421\u043d\u041a \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442 \u0432 56-\u0431\u0438\u0442\u043d\u043e\u043c (\u0432 \u0441\u043b\u0443\u0447\u0430\u0435 RISC-V) \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u043e\u043d, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u041e\u0421 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0442\u044c BAR\u2019\u044b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u2014 \u0447\u0430\u0449\u0435 \u0434\u0430\u0436\u0435 \u0434\u0432\u0430 \u0442\u0430\u043a\u0438\u0445 \u0440\u0435\u0433\u0438\u043e\u043d\u0430, \u043d\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u0437\u0436\u0435. \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0441\u0430\u043c\u043e\u0433\u043e PCIe-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 (\u043e\u043d \u0436\u0435 Root Complex) \u0436\u0438\u0432\u0443\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u043e\u0431\u044b\u0447\u043d\u043e \u0440\u044f\u0434\u043e\u043c \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c\u0438 \u0421\u043d\u041a, \u0442\u0430\u043a\u0438\u043c\u0438 \u043a\u0430\u043a USB, SPI, i2c \u0438 \u043f\u0440. \u0418 \u0441 \u0438\u0445 \u043f\u043e\u043c\u043e\u0449\u044c\u044e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.\u041a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u043e\u0435 \u044f\u0434\u0440\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u00ab\u043d\u0430\u0440\u0443\u0436\u0443\u00bb \u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u043a \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 \u0421\u043d\u041a \u0438\u043b\u0438 \u043a BAR\u2019\u0430\u043c \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432, \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0430\u044f \u0448\u0438\u043d\u0430 (Interconnect) \u0441 \u00ab\u0437\u0430\u0448\u0438\u0442\u043e\u0439\u00bb \u0432 \u043d\u0435\u0435 \u043a\u0430\u0440\u0442\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043f\u043e \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443: \u043e\u0442\u043a\u0443\u0434\u0430 \u0432\u0437\u044f\u0442\u044c \u0438 \u043a\u0443\u0434\u0430 \u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b\/\u0434\u0430\u043d\u043d\u044b\u0435. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u0440\u043e\u0432\u043d\u043e \u0442\u0435\u043c\u0438 \u0436\u0435 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u043c\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438 load \u0438 store, \u043a\u0430\u043a \u0438 \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e, \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u043d\u043e\u043c\u0435\u0440 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u0448\u0438\u043d\u0435 (BDF) \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b. \u041d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0438\u0447\u0435\u0433\u043e \u043a\u0440\u043e\u043c\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u2014 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 PCIe \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0434\u043e\u0431\u0435\u043d \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438.BAR\u2019\u044b Radeon \u0438 \u043f\u0443\u0442\u044c \u043e\u043f\u0440\u043e\u043c\u0435\u0442\u0447\u0438\u0432\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439\u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, PCIe-\u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u044f\u0434\u0440\u0430 Linux \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0435\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0430 BAR\u2019\u043e\u0432 \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u043c\u0430\u0448\u0438\u043d\u044b \u0438 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u0430\u0434\u0440\u0435\u0441 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e. \u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0437\u043d\u0430\u0435\u0442, \u0433\u0434\u0435 \u043e\u043d\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u0438 \u0433\u0434\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, DDR), \u0447\u0442\u043e\u0431\u044b \u0432 \u043d\u0435\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f.\u00a0\u0423 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u044b Radeon \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0438\u0434\u043e\u0432 BAR. \u041c\u044b \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u0438 (VRAM). \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c Resizable BARs \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 BAR, \u0438 \u0435\u0441\u043b\u0438 \u043e\u043d \u043d\u0435 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u043e\u043d \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u043c\u0430\u0448\u0438\u043d\u044b \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0435\u0433\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442 VESA \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u0438 256 \u041c\u0438\u0411, \u0438\u043d\u0430\u0447\u0435 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 Linux amdgpu \u043e\u0442\u043a\u0430\u0436\u0435\u0442 \u0432 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u041f\u0435\u0440\u0432\u044b\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u043a PCIe, \u0431\u044b\u043b \u043d\u0435 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u0435\u043b\u044c AMD GPU, \u0430 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435\u043f\u0440\u0438\u0432\u0435\u0440\u0435\u0434\u043b\u0438\u0432\u044b\u0439 \u0438 \u043d\u0435\u043f\u0440\u043e\u0436\u043e\u0440\u043b\u0438\u0432\u044b\u0439 NVMe. \u0415\u043c\u0443 \u0445\u0432\u0430\u0442\u0430\u043b\u043e BAR \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0432 ~16 \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442. \u042d\u0442\u043e\u0442 \u043e\u0431\u044a\u0435\u043c \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043e\u0431\u044a\u0435\u043c\u0430 \u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u044f \u2014 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438 \u0441\u043e\u0442\u043d\u0438 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442, \u0438 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0442\u0435\u0440\u0430\u0431\u0430\u0439\u0442.\u041a\u0430\u0440\u0442\u0430 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0438&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-475042","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/475042","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=475042"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/475042\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=475042"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=475042"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=475042"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}