€•j;Œsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ(/translations/zh_CN/gpu/amdgpu/debugging”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/zh_TW/gpu/amdgpu/debugging”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/it_IT/gpu/amdgpu/debugging”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/ja_JP/gpu/amdgpu/debugging”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/ko_KR/gpu/amdgpu/debugging”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/sp_SP/gpu/amdgpu/debugging”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒ GPU Debugging”h]”hŒ GPU Debugging”…””}”(hh¨hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hh£hžhhŸŒB/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/debugging.rst”h Kubh¢)”}”(hhh]”(h§)”}”(hŒGeneral Debugging Options”h]”hŒGeneral Debugging Options”…””}”(hhºhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hh·hžhhŸh¶h KubhŒ paragraph”“”)”}”(hŒcThe DebugFS section provides documentation on a number files to aid in debugging issues on the GPU.”h]”hŒcThe DebugFS section provides documentation on a number files to aid in debugging issues on the GPU.”…””}”(hhÊhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h Khh·hžhubeh}”(h]”Œgeneral-debugging-options”ah ]”h"]”Œgeneral debugging options”ah$]”h&]”uh1h¡hh£hžhhŸh¶h Kubh¢)”}”(hhh]”(h§)”}”(hŒGPUVM Debugging”h]”hŒGPUVM Debugging”…””}”(hhãhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hhàhžhhŸh¶h K ubhÉ)”}”(hŒsTo aid in debugging GPU virtual memory related problems, the driver supports a number of options module parameters:”h]”hŒsTo aid in debugging GPU virtual memory related problems, the driver supports a number of options module parameters:”…””}”(hhñhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KhhàhžhubhÉ)”}”(hŒO`vm_fault_stop` - If non-0, halt the GPU memory controller on a GPU page fault.”h]”(hŒtitle_reference”“”)”}”(hŒ`vm_fault_stop`”h]”hŒ vm_fault_stop”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhÿubhŒ@ - If non-0, halt the GPU memory controller on a GPU page fault.”…””}”(hhÿhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KhhàhžhubhÉ)”}”(hŒW`vm_update_mode` - If non-0, use the CPU to update GPU page tables rather than the GPU.”h]”(j)”}”(hŒ`vm_update_mode`”h]”hŒvm_update_mode”…””}”(hj!hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒG - If non-0, use the CPU to update GPU page tables rather than the GPU.”…””}”(hjhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h Khhàhžhubeh}”(h]”Œgpuvm-debugging”ah ]”h"]”Œgpuvm debugging”ah$]”h&]”uh1h¡hh£hžhhŸh¶h K ubh¢)”}”(hhh]”(h§)”}”(hŒDecoding a GPUVM Page Fault”h]”hŒDecoding a GPUVM Page Fault”…””}”(hjDhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hjAhžhhŸh¶h KubhÉ)”}”(hŒ¶If you see a GPU page fault in the kernel log, you can decode it to figure out what is going wrong in your application. A page fault in your kernel log may look something like this:”h]”hŒ¶If you see a GPU page fault in the kernel log, you can decode it to figure out what is going wrong in your application. A page fault in your kernel log may look something like this:”…””}”(hjRhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KhjAhžhubhŒ literal_block”“”)”}”(hX”[gfxhub0] no-retry page fault (src_id:0 ring:24 vmid:3 pasid:32777, for process glxinfo pid 2424 thread glxinfo:cs0 pid 2425) in page starting at address 0x0000800102800000 from IH client 0x1b (UTCL2) VM_L2_PROTECTION_FAULT_STATUS:0x00301030 Faulty UTCL2 client ID: TCP (0x8) MORE_FAULTS: 0x0 WALKER_ERROR: 0x0 PERMISSION_FAULTS: 0x3 MAPPING_ERROR: 0x0 RW: 0x0”h]”hX”[gfxhub0] no-retry page fault (src_id:0 ring:24 vmid:3 pasid:32777, for process glxinfo pid 2424 thread glxinfo:cs0 pid 2425) in page starting at address 0x0000800102800000 from IH client 0x1b (UTCL2) VM_L2_PROTECTION_FAULT_STATUS:0x00301030 Faulty UTCL2 client ID: TCP (0x8) MORE_FAULTS: 0x0 WALKER_ERROR: 0x0 PERMISSION_FAULTS: 0x3 MAPPING_ERROR: 0x0 RW: 0x0”…””}”hjbsbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1j`hŸh¶h K!hjAhžhubhÉ)”}”(hŒÄFirst you have the memory hub, gfxhub and mmhub. gfxhub is the memory hub used for graphics, compute, and sdma on some chips. mmhub is the memory hub used for multi-media and sdma on some chips.”h]”hŒÄFirst you have the memory hub, gfxhub and mmhub. gfxhub is the memory hub used for graphics, compute, and sdma on some chips. mmhub is the memory hub used for multi-media and sdma on some chips.”…””}”(hjrhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h K+hjAhžhubhÉ)”}”(hXNNext you have the vmid and pasid. If the vmid is 0, this fault was likely caused by the kernel driver or firmware. If the vmid is non-0, it is generally a fault in a user application. The pasid is used to link a vmid to a system process id. If the process is active when the fault happens, the process information will be printed.”h]”hXNNext you have the vmid and pasid. If the vmid is 0, this fault was likely caused by the kernel driver or firmware. If the vmid is non-0, it is generally a fault in a user application. The pasid is used to link a vmid to a system process id. If the process is active when the fault happens, the process information will be printed.”…””}”(hj€hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h K/hjAhžhubhÉ)”}”(hŒ9The GPU virtual address that caused the fault comes next.”h]”hŒ9The GPU virtual address that caused the fault comes next.”…””}”(hjŽhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h K5hjAhžhubhÉ)”}”(hŒTThe client ID indicates the GPU block that caused the fault. Some common client IDs:”h]”hŒTThe client ID indicates the GPU block that caused the fault. Some common client IDs:”…””}”(hjœhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h K7hjAhžhubhŒ bullet_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒ3CB/DB: The color/depth backend of the graphics pipe”h]”hÉ)”}”(hj³h]”hŒ3CB/DB: The color/depth backend of the graphics pipe”…””}”(hjµhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h K:hj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hj¬hžhhŸh¶h Nubj°)”}”(hŒCPF: Command Processor Frontend”h]”hÉ)”}”(hjÊh]”hŒCPF: Command Processor Frontend”…””}”(hjÌhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h K;hjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hj¬hžhhŸh¶h Nubj°)”}”(hŒCPC: Command Processor Compute”h]”hÉ)”}”(hjáh]”hŒCPC: Command Processor Compute”…””}”(hjãhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h Khj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hj¬hžhhŸh¶h Nubj°)”}”(hŒSDMA: SDMA engines”h]”hÉ)”}”(hj&h]”hŒSDMA: SDMA engines”…””}”(hj(hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h K?hj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hj¬hžhhŸh¶h Nubj°)”}”(hŒ VCN: Video encode/decode engines”h]”hÉ)”}”(hj=h]”hŒ VCN: Video encode/decode engines”…””}”(hj?hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h K@hj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hj¬hžhhŸh¶h Nubj°)”}”(hŒJPEG: JPEG engines ”h]”hÉ)”}”(hŒJPEG: JPEG engines”h]”hŒJPEG: JPEG engines”…””}”(hjVhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KAhjRubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hj¬hžhhŸh¶h Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1jªhŸh¶h K:hjAhžhubhÉ)”}”(hŒ8PERMISSION_FAULTS describe what faults were encountered:”h]”hŒ8PERMISSION_FAULTS describe what faults were encountered:”…””}”(hjrhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KChjAhžhubj«)”}”(hhh]”(j°)”}”(hŒbit 0: the PTE was not valid”h]”hÉ)”}”(hj…h]”hŒbit 0: the PTE was not valid”…””}”(hj‡hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KEhjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hj€hžhhŸh¶h Nubj°)”}”(hŒ#bit 1: the PTE read bit was not set”h]”hÉ)”}”(hjœh]”hŒ#bit 1: the PTE read bit was not set”…””}”(hjžhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KFhjšubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hj€hžhhŸh¶h Nubj°)”}”(hŒ$bit 2: the PTE write bit was not set”h]”hÉ)”}”(hj³h]”hŒ$bit 2: the PTE write bit was not set”…””}”(hjµhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KGhj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hj€hžhhŸh¶h Nubj°)”}”(hŒ'bit 3: the PTE execute bit was not set ”h]”hÉ)”}”(hŒ&bit 3: the PTE execute bit was not set”h]”hŒ&bit 3: the PTE execute bit was not set”…””}”(hjÌhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KHhjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hj€hžhhŸh¶h Nubeh}”(h]”h ]”h"]”h$]”h&]”jpjquh1jªhŸh¶h KEhjAhžhubhÉ)”}”(hŒHFinally, RW, indicates whether the access was a read (0) or a write (1).”h]”hŒHFinally, RW, indicates whether the access was a read (0) or a write (1).”…””}”(hjæhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KJhjAhžhubhÉ)”}”(hXIn the example above, a shader (cliend id = TCP) generated a read (RW = 0x0) to an invalid page (PERMISSION_FAULTS = 0x3) at GPU virtual address 0x0000800102800000. The user can then inspect their shader code and resource descriptor state to determine what caused the GPU page fault.”h]”hXIn the example above, a shader (cliend id = TCP) generated a read (RW = 0x0) to an invalid page (PERMISSION_FAULTS = 0x3) at GPU virtual address 0x0000800102800000. The user can then inspect their shader code and resource descriptor state to determine what caused the GPU page fault.”…””}”(hjôhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KLhjAhžhubeh}”(h]”Œdecoding-a-gpuvm-page-fault”ah ]”h"]”Œdecoding a gpuvm page fault”ah$]”h&]”uh1h¡hh£hžhhŸh¶h Kubh¢)”}”(hhh]”(h§)”}”(hŒUMR”h]”hŒUMR”…””}”(hj hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hj hžhhŸh¶h KRubhÉ)”}”(hŒç`umr `_ is a general purpose GPU debugging and diagnostics tool. Please see the umr `documentation `_ for more information about its capabilities.”h]”(hŒ reference”“”)”}”(hŒ6`umr `_”h]”hŒumr”…””}”(hj!hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œumr”Œrefuri”Œ-https://gitlab.freedesktop.org/tomstdenis/umr”uh1jhjubhŒtarget”“”)”}”(hŒ0 ”h]”h}”(h]”Œid1”ah ]”h"]”Œumr”ah$]”h&]”Œrefuri”j2uh1j3Œ referenced”KhjubhŒN is a general purpose GPU debugging and diagnostics tool. Please see the umr ”…””}”(hjhžhhŸNh Nubj )”}”(hŒ6`documentation `_”h]”hŒ documentation”…””}”(hjGhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ documentation”j1Œ#https://umr.readthedocs.io/en/main/”uh1jhjubj4)”}”(hŒ& ”h]”h}”(h]”Œ documentation”ah ]”h"]”Œ documentation”ah$]”h&]”Œrefuri”jWuh1j3jBKhjubhŒ- for more information about its capabilities.”…””}”(hjhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KThj hžhubeh}”(h]”Œumr”ah ]”h"]”h$]”j>ah&]”uh1h¡hh£hžhhŸh¶h KRjBKubeh}”(h]”Œ gpu-debugging”ah ]”h"]”Œ gpu debugging”ah$]”h&]”uh1h¡hhhžhhŸh¶h Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”h¶uh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(h¦NŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j¡Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”h¶Œ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(j{jxhÝhÚj>j;jjŒumr”j;jaj^uŒ nametypes”}”(j{‰h݉j>‰j‰jåˆjaˆuh}”(jxh£hÚh·j;hàjjAjqj j;j5j^jXuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”j¯Ks…”R”Œparse_messages”]”hŒsystem_message”“”)”}”(hhh]”hÉ)”}”(hŒ&Duplicate implicit target name: "umr".”h]”hŒ*Duplicate implicit target name: “umrâ€.”…””}”(hj hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhjubah}”(h]”h ]”h"]”h$]”h&]”j;aŒlevel”KŒtype”ŒINFO”Œsource”h¶Œline”Kuh1jhj hžhhŸh¶h KWubaŒtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nhžhub.