{"id":299,"date":"2019-02-16T11:57:42","date_gmt":"2019-02-16T11:57:42","guid":{"rendered":"http:\/\/www.luo666.com\/?p=299"},"modified":"2023-08-27T09:19:36","modified_gmt":"2023-08-27T09:19:36","slug":"vfio-%e7%9b%b4%e9%80%9a%e8%ae%be%e5%a4%87%e7%9a%84-memory-region-%e5%88%9d%e5%a7%8b%e5%8c%96","status":"publish","type":"post","link":"http:\/\/www.luo666.com\/?p=299","title":{"rendered":"vfio \u76f4\u901a\u8bbe\u5907\u7684 memory region \u521d\u59cb\u5316"},"content":{"rendered":"<div>vfio\u7279\u522b\u7528\u4e00\u4e2a\u6570\u636e\u7ed3\u6784\u6765\u7ba1\u7406\u8bbe\u5907\u7684memory region<\/div>\n<div>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"minimal\">typedef struct VFIORegion {\n\u00a0\u00a0\u00a0\u00a0struct VFIODevice *vbasedev;\n\u00a0\u00a0\u00a0\u00a0off_t fd_offset; \/* offset of region within device fd *\/\n\u00a0\u00a0\u00a0\u00a0MemoryRegion *mem; \/* slow, read\/write access *\/\n\u00a0\u00a0\u00a0\u00a0size_t size;\n\u00a0\u00a0\u00a0\u00a0uint32_t flags; \/* VFIO region flags (rd\/wr\/mmap) *\/\n\u00a0\u00a0\u00a0\u00a0uint32_t nr_mmaps;\n\u00a0\u00a0\u00a0\u00a0VFIOMmap *mmaps;\n\u00a0\u00a0\u00a0\u00a0uint8_t nr; \/* cache the region number for debug *\/\n} VFIORegion;<\/pre>\n<p>&nbsp;<\/p>\n<\/div>\n<div>\u6ce8\u610f\u5230\u5b83\u8fd8\u6709\u4e2a\u57df\u662fVFIOMmap\u7ed3\u6784\u7684\u6307\u9488\uff1a<\/div>\n<div>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"minimal\">typedef struct VFIOMmap {\n\u00a0\u00a0\u00a0\u00a0MemoryRegion mem;\n\u00a0\u00a0\u00a0\u00a0void *mmap;\n\u00a0\u00a0\u00a0\u00a0off_t offset;\n\u00a0\u00a0\u00a0\u00a0size_t size;\n} VFIOMmap;<\/pre>\n<p>&nbsp;<\/p>\n<\/div>\n<div>\u611f\u89c9\u662f\u4e0d\u662f\u6709\u5197\u4f59\uff0c\u90a3\u4e48\u5916\u5c42\u7ed3\u6784\u91cc\u9762\u7684mem\u662f\u4e0d\u662f\u6307\u5411\u5185\u5c42\u4e2d\u7684mem\u5462\uff1f<\/div>\n<div>\u4e0a\u9762\u7684mem\u8fd8\u6709\u4e2a\u5947\u602a\u7684\u6ce8\u91ca\uff1aslow\uff0c\u96be\u9053\u8fd8\u6709\u4e00\u79cd\u5feb\u4e00\u70b9\u7684MR\uff1f\u90a3\u662f\u4e0d\u662f\u6307\u8fd9\u91cc\u662fIO\u7684MR\uff0c\u53e6\u5916\u8fd8\u6709\u4e2aRAM\u7684mr\uff1f<\/div>\n<div><\/div>\n<div><\/div>\n<p><!--more--><\/p>\n<div>\n<hr \/>\n<\/div>\n<div>\u56de\u5230\u4ee3\u7801\uff1a<\/div>\n<div>vfio_region_setup =&gt; memory_region_init_io<\/div>\n<div>\u8fd9\u91cc\u63d0\u4f9b\u4e86ops\uff0c\u8d70\u9000\u51fa\u5230qemu\u7684\u4f20\u7edfIO\u8def\u5f84\uff0c\u786e\u5b9e\u5f88\u6162\u3002\u3002<\/div>\n<div><\/div>\n<div>\u800c\u53e6\u5916\u5728vfio_map_bar\u91cc\u9762\u5374\u53c8\u505a\u4e86\u4e00\u4e2aRAM\u7684MR\uff1a<\/div>\n<div>vfio_region_mmap =&gt; memory_region_init_ram_ptr<\/div>\n<div><\/div>\n<div>\u6240\u4ee5\u8fd9\u91cc\u5b9e\u73b0\u4e86\u4e24\u79cdregion\uff0c\u4e00\u4e2aio\u4e00\u4e2aram\uff0c\u540e\u8005\u662f\u4e00\u79cd\u52a0\u901f\u4f18\u5316\uff0c\u5373\u76f4\u63a5\u628avfio\u6620\u5c04\u5230\u7528\u6237\u6001\u7684\u8bbe\u5907mmio bar\u4f5c\u4e3aMR\u900f\u7ed9VM<\/div>\n<div>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"minimal\">region-&gt;mmaps[i].mmap = mmap(NULL, region-&gt;mmaps[i].size, prot,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0MAP_SHARED, region-&gt;vbasedev-&gt;fd,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0region-&gt;fd_offset +\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0region-&gt;mmaps[i].offset);<\/pre>\n<p>&nbsp;<\/p>\n<\/div>\n<div>mmap\u53c2\u6570\u91cc\u9700\u8981\u7684\u4fe1\u606f\u524d\u9762vfio_region_setup\u91cc\u9762\u90fd\u5df2\u7ecf\u83b7\u53d6\u5230\u4e86\uff0c\u53ea\u6709\u5f53\u6b64\u5904mmap\u5931\u8d25\uff0c\u4e0d\u5f97\u5df2\u624d\u4f1a\u8d70IO MR\u7684slow\u8def\u5f84<\/div>\n<p><audio style=\"display: none;\" controls=\"controls\"><\/audio><\/p>\n<p><audio style=\"display: none;\" controls=\"controls\"><\/audio><\/p>\n<p><audio style=\"display: none;\" controls=\"controls\"><\/audio><\/p>\n<p><audio style=\"display: none;\" controls=\"controls\"><\/audio><\/p>\n","protected":false},"excerpt":{"rendered":"<p>vfio\u7279\u522b\u7528\u4e00\u4e2a\u6570\u636e\u7ed3\u6784\u6765\u7ba1\u7406\u8bbe\u5907\u7684memory region typedef struct VFIORegion { \u00a0\u00a0\u00a0\u00a0struct VFIODevice *vbasedev; \u00a0\u00a0\u00a0\u00a0off_t fd_offset; \/* offset of region within device fd *\/ \u00a0\u00a0\u00a0\u00a0MemoryRegion *mem; \/* slow, read\/write access *\/ \u00a0\u00a0\u00a0\u00a0size_t size; \u00a0\u00a0\u00a0\u00a0uint32_t flags; \/* VFIO region flags (rd\/wr\/mmap) *\/ \u00a0\u00a0\u00a0\u00a0uint32_t nr_mmaps; \u00a0\u00a0\u00a0\u00a0VFIOMmap *mmaps; \u00a0\u00a0\u00a0\u00a0uint8_t nr; \/* cache the region number for debug *\/ } VFIORegion; &nbsp; \u6ce8\u610f\u5230\u5b83\u8fd8\u6709\u4e2a\u57df\u662fVFIOMmap\u7ed3\u6784\u7684\u6307\u9488\uff1a typedef &hellip; <a href=\"http:\/\/www.luo666.com\/?p=299\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;vfio \u76f4\u901a\u8bbe\u5907\u7684 memory region \u521d\u59cb\u5316&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"footnotes":"","_jetpack_memberships_contains_paid_content":false,"jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false}}},"categories":[3],"tags":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p7Dhki-4P","jetpack-related-posts":[],"_links":{"self":[{"href":"http:\/\/www.luo666.com\/index.php?rest_route=\/wp\/v2\/posts\/299"}],"collection":[{"href":"http:\/\/www.luo666.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.luo666.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.luo666.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.luo666.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=299"}],"version-history":[{"count":11,"href":"http:\/\/www.luo666.com\/index.php?rest_route=\/wp\/v2\/posts\/299\/revisions"}],"predecessor-version":[{"id":398,"href":"http:\/\/www.luo666.com\/index.php?rest_route=\/wp\/v2\/posts\/299\/revisions\/398"}],"wp:attachment":[{"href":"http:\/\/www.luo666.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=299"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.luo666.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=299"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.luo666.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=299"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}