使用umr读取AMDGPU VRAM

2023-11-06

造case

$ gdb --args ./kfdtest 
GNU gdb (Ubuntu 9.2-0ubuntu1~20.04.1) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./kfdtest...
(gdb) b KFDLocalMemoryTest.cpp:128
Breakpoint 1 at 0x4bc4e0: file /home/gl/code/ROCm5.2/ROCT-Thunk-Interface/tests/kfdtest/src/KFDLocalMemoryTest.cpp, line 128.
(gdb) r --gtest_filter=KFDLocalMemoryTest.BasicTest
Starting program: /home/gl/code/ROCm5.2/ROCT-Thunk-Interface/tests/kfdtest/build/kfdtest --gtest_filter=KFDLocalMemoryTest.BasicTest
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[          ] Profile: Full Test
[          ] HW capabilities: 0x9
Note: Google Test filter = KFDLocalMemoryTest.BasicTest
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from KFDLocalMemoryTest
[ RUN      ] KFDLocalMemoryTest.BasicTest
leiDebug: args.doorbell_offset: 0xd134c00000000000 
leiDebug: doorbell_mmap_offset: 0xd134c00000000000 
leiDebug: doorbell_offset: 0x0 

Breakpoint 1, KFDLocalMemoryTest_BasicTest_Test::TestBody (this=0x555556314b20) at /home/gl/code/ROCm5.2/ROCT-Thunk-Interface/tests/kfdtest/src/KFDLocalMemoryTest.cpp:128
128	    dispatch.Sync(g_TestTimeOut);
(gdb) 
(gdb) p srcLocalBuffer
$1 = {static Null = {static Null = <same as static member of an already seen type>, m_Flags = {{ui32 = {NonPaged = 0, CachePolicy = 0, ReadOnly = 0, PageSize = 0, HostAccess = 0, NoSubstitute = 0, 
          GDSMemory = 0, Scratch = 0, AtomicAccessFull = 0, AtomicAccessPartial = 0, ExecuteAccess = 0, CoarseGrain = 0, AQLQueueMemory = 0, FixedAddress = 0, NoNUMABind = 0, Uncached = 0, 
          Reserved = 0}, Value = 0}}, m_Size = 0, m_pUser = 0x0, m_pBuf = 0x0, m_Local = false, m_Node = 0, m_MappedNodes = 0}, m_Flags = {{ui32 = {NonPaged = 1, CachePolicy = 0, ReadOnly = 0, 
        PageSize = 0, HostAccess = 0, NoSubstitute = 0, GDSMemory = 0, Scratch = 0, AtomicAccessFull = 0, AtomicAccessPartial = 0, ExecuteAccess = 0, CoarseGrain = 1, AQLQueueMemory = 0, 
        FixedAddress = 0, NoNUMABind = 0, Uncached = 0, Reserved = 0}, Value = 8193}}, m_Size = 4096, m_pUser = 0x0, m_pBuf = 0x7ffff7fbf000, m_Local = true, m_Node = 1, m_MappedNodes = 2}
(gdb) p 0x7ffff7fbf000
$2 = 140737353871360
(gdb) x/x 0x7ffff7fbf000
0x7ffff7fbf000:	0x01010101
(gdb) 

使用UMR读取内存

gl@pc:~$ umr -i 1 -vm 0x8@0x7ffff7fbf000 1 -O verbose


=== VM Decoding of address 8@0x7ffff7fbf000 ===
mmVM_CONTEXT8_PAGE_TABLE_START_ADDR_LO32=0x0
mmVM_CONTEXT8_PAGE_TABLE_START_ADDR_HI32=0x0
mmVM_CONTEXT8_PAGE_TABLE_END_ADDR_LO32=0xffffffff
mmVM_CONTEXT8_PAGE_TABLE_END_ADDR_HI32=0xf
mmVM_CONTEXT8_PAGE_TABLE_BASE_ADDR_LO32=0xfebfa001
mmVM_CONTEXT8_PAGE_TABLE_BASE_ADDR_HI32=0x3
mmVM_CONTEXT8_CNTL=0x7ffe07
VMID8.page_table_block_size=0
VMID8.page_table_depth=3
mmVGA_MEMORY_BASE_ADDRESS=0x0
mmVGA_MEMORY_BASE_ADDRESS_HIGH=0x0
mmMC_VM_FB_OFFSET=0x0
mmMC_VM_MX_L1_TLB_CNTL=0x0
mmMC_VM_SYSTEM_APERTURE_LOW_ADDR=0x0
mmMC_VM_SYSTEM_APERTURE_HIGH_ADDR=0x0
mmMC_VM_FB_LOCATION_BASE=0x8000
mmMC_VM_FB_LOCATION_TOP=0x83ff
mmMC_VM_AGP_BASE=0x0
mmMC_VM_AGP_BOT=0x0
mmMC_VM_AGP_TOP=0x0
BASE=0x00000003febfa001, VA=0x7f8000000000, PBA==0x0003febfa000, V=1, S=0, C=0, P=0, FS=0
   \-> PDE2@{0x3febfa7f8/ff}=0x00000003fea63001, VA=0x7f8000000000, PBA==0x0003fea63000, V=1, S=0, C=0, P=0, FS=0
      \-> PDE1@{0x3fea63ff8/1ff}=0x00000003fea64001, VA=0x007fc0000000, PBA==0x0003fea64000, V=1, S=0, C=0, P=0, FS=0
         \-> PDE0@{0x3fea64df8/1bf}=0x00000003fea65001, VA=0x000037e00000, PBA==0x0003fea65000, V=1, S=0, C=0, P=0, FS=0
            \-> PTE@{0x3fea65df8/0x1bf}=0x00000003febf8071, VA=0x0000001bf000, PBA==0x0003febf8000, V=1, S=0, C=0, Z=0, X=1, R=1, W=1, FS=0, T=0, MTYPE=NC
               \-> Computed address we will read from: vram:3febf8000 (MCA:3febf8000), (reading: 4096 bytes)

=== Completed VM Decoding ===

从上面可以看出,从虚拟地址0x7ffff7fbf000中,前面四级页表的mask分别是,0x7F8、0x7FC、0x37E,0x1BF,最后12bit是页表内offset。借用一张网图:

在这里插入图片描述

使用devmem2验证读取

[sudo] password for gl: 
00000000-00000fff : Reserved
00001000-00057fff : System RAM
00058000-00058fff : Reserved
00059000-0009efff : System RAM
0009f000-000fffff : Reserved
  000a0000-000bffff : PCI Bus 0000:00
  000c0000-000cffff : Video ROM
  000f0000-000fffff : System ROM
00100000-a2868017 : System RAM
a2868018-a2878e57 : System RAM
a2878e58-a2879017 : System RAM
a2879018-a2889057 : System RAM
a2889058-a288a017 : System RAM
a288a018-a2898657 : System RAM
a2898658-a2cb8fff : System RAM
a2cb9000-a2cf2fff : ACPI Tables
a2cf3000-a3095fff : System RAM
a3096000-a3096fff : ACPI Non-volatile Storage
a3097000-a3097fff : Reserved
a3098000-ac50afff : System RAM
ac50b000-ac50bfff : Reserved
ac50c000-acbc8fff : System RAM
acbc9000-acc0efff : Reserved
acc0f000-adf29fff : System RAM
adf2a000-adf2afff : Reserved
adf2b000-afe07fff : System RAM
afe08000-b16ebfff : Reserved
b16ec000-b1700fff : ACPI Tables
b1701000-b17fefff : System RAM
b17ff000-b1b26fff : ACPI Non-volatile Storage
b1b27000-b2ffefff : Reserved
b2fff000-b2ffffff : System RAM
b3000000-b7ffffff : Reserved
  b4000000-b7ffffff : Graphics Stolen Memory
b8000000-f7ffffff : PCI Bus 0000:00
  b8000000-b81fffff : PCI Bus 0000:08
  d0000000-dfffffff : 0000:00:02.0
  f7b00000-f7cfffff : PCI Bus 0000:01
    f7b00000-f7bfffff : PCI Bus 0000:02
      f7b00000-f7bfffff : PCI Bus 0000:03
        f7b00000-f7b7ffff : 0000:03:00.0
        f7b80000-f7b9ffff : 0000:03:00.0
        f7ba0000-f7ba3fff : 0000:03:00.1
          f7ba0000-f7ba3fff : ICH HD audio
    f7c00000-f7c03fff : 0000:01:00.0
  f7d00000-f7dfffff : PCI Bus 0000:07
    f7d00000-f7d03fff : 0000:07:00.0
      f7d00000-f7d03fff : iwlwifi
  f7e00000-f7efffff : PCI Bus 0000:06
    f7e00000-f7e07fff : 0000:06:00.0
      f7e00000-f7e07fff : xhci-hcd
  f7f00000-f7f1ffff : 0000:00:1f.6
    f7f00000-f7f1ffff : e1000e
  f7f20000-f7f23fff : 0000:00:1f.2
  f7f24000-f7f25fff : 0000:00:17.0
    f7f24000-f7f25fff : ahci
  f7f26000-f7f267ff : 0000:00:17.0
    f7f26000-f7f267ff : ahci
  f7f27000-f7f270ff : 0000:00:17.0
    f7f27000-f7f270ff : ahci
  f7fe0000-f7ffffff : pnp 00:05
f8000000-fbffffff : PCI MMCONFIG 0000 [bus 00-3f]
  f8000000-fbffffff : Reserved
    f8000000-fbffffff : pnp 00:05
fd000000-fe7fffff : PCI Bus 0000:00
  fd000000-fdabffff : pnp 00:06
  fdac0000-fdacffff : pnp 00:06
    fdac0000-fdacffff : pnp 00:08
  fdad0000-fdadffff : pnp 00:06
  fdae0000-fdaeffff : pnp 00:06
    fdae0000-fdaeffff : pnp 00:08
  fdaf0000-fdafffff : pnp 00:06
    fdaf0000-fdafffff : pnp 00:08
  fdb00000-fdffffff : pnp 00:06
    fdc6000c-fdc6000f : iTCO_wdt
  fe000000-fe010fff : Reserved
  fe036000-fe03bfff : pnp 00:06
  fe03d000-fe3fffff : pnp 00:06
  fe410000-fe7fffff : pnp 00:06
fec00000-fec00fff : Reserved
  fec00000-fec003ff : IOAPIC 0
fed00000-fed00fff : Reserved
  fed00000-fed003ff : HPET 0
    fed00000-fed003ff : PNP0103:00
fed10000-fed17fff : pnp 00:05
fed18000-fed18fff : pnp 00:05
fed19000-fed19fff : pnp 00:05
fed20000-fed3ffff : pnp 00:05
fed45000-fed8ffff : pnp 00:05
fed90000-fed90fff : dmar0
fed91000-fed91fff : dmar1
fee00000-fee00fff : Local APIC
  fee00000-fee00fff : Reserved
ff000000-ffffffff : Reserved
  ff000000-ffffffff : INT0800:00
    ff000000-ffffffff : pnp 00:05
100000000-1046ffffff : System RAM
  122000000-123002686 : Kernel code
  123200000-123c3efff : Kernel rodata
  123e00000-12416e13f : Kernel data
  124469000-1249fffff : Kernel bss
1047000000-1047ffffff : RAM buffer
2000000000-2fffffffff : PCI Bus 0000:00
  2000000000-20001fffff : PCI Bus 0000:08
  2200000000-27ffffffff : PCI Bus 0000:01
    2200000000-27ffffffff : PCI Bus 0000:02
      2200000000-27ffffffff : PCI Bus 0000:03
        2200000000-22001fffff : 0000:03:00.0
        2400000000-27ffffffff : 0000:03:00.0
  2ffe000000-2ffeffffff : 0000:00:02.0
  2fff000000-2fff00ffff : 0000:00:1f.3
    2fff000000-2fff00ffff : ICH HD audio
  2fff010000-2fff01ffff : 0000:00:14.0
    2fff010000-2fff01ffff : xhci-hcd
  2fff020000-2fff023fff : 0000:00:1f.3
    2fff020000-2fff023fff : ICH HD audio
  2fff024000-2fff0240ff : 0000:00:1f.4
  2fff025000-2fff025fff : 0000:00:16.0
    2fff025000-2fff025fff : mei_me
7c00000000-7fffffffff : 0000:03:00.0
gl@pc:~$ 
gl@pc:~$ sudo devmem2 0x27febf8000
/dev/mem opened.
Memory mapped at address 0x7f88bb971000.
Value at address 0xFEBF8000 (0x7f88bb971000): 0x1010101

huge page

gl@pc:~$ umr -i 1 -vm 0x8@0x7ffff5e00000 1 -O verbose


=== VM Decoding of address 8@0x7ffff5e00000 ===
mmVM_CONTEXT8_PAGE_TABLE_START_ADDR_LO32=0x0
mmVM_CONTEXT8_PAGE_TABLE_START_ADDR_HI32=0x0
mmVM_CONTEXT8_PAGE_TABLE_END_ADDR_LO32=0xffffffff
mmVM_CONTEXT8_PAGE_TABLE_END_ADDR_HI32=0xf
mmVM_CONTEXT8_PAGE_TABLE_BASE_ADDR_LO32=0xfebfa001
mmVM_CONTEXT8_PAGE_TABLE_BASE_ADDR_HI32=0x3
mmVM_CONTEXT8_CNTL=0x7ffe07
VMID8.page_table_block_size=0
VMID8.page_table_depth=3
mmVGA_MEMORY_BASE_ADDRESS=0x0
mmVGA_MEMORY_BASE_ADDRESS_HIGH=0x0
mmMC_VM_FB_OFFSET=0x0
mmMC_VM_MX_L1_TLB_CNTL=0x0
mmMC_VM_SYSTEM_APERTURE_LOW_ADDR=0x0
mmMC_VM_SYSTEM_APERTURE_HIGH_ADDR=0x0
mmMC_VM_FB_LOCATION_BASE=0x8000
mmMC_VM_FB_LOCATION_TOP=0x83ff
mmMC_VM_AGP_BASE=0x0
mmMC_VM_AGP_BOT=0x0
mmMC_VM_AGP_TOP=0x0
BASE=0x00000003febfa001, VA=0x7f8000000000, PBA==0x0003febfa000, V=1, S=0, C=0, P=0, FS=0
   \-> PDE2@{0x3febfa7f8/ff}=0x00000003fea63001, VA=0x7f8000000000, PBA==0x0003fea63000, V=1, S=0, C=0, P=0, FS=0
      \-> PDE1@{0x3fea63ff8/1ff}=0x00000003fea64001, VA=0x007fc0000000, PBA==0x0003fea64000, V=1, S=0, C=0, P=0, FS=0
         \-> PDE0-as-PTE@{0x3fea64d78/0x0}=0x00400003fe2004f1, VA=0x000035e00000, PBA==0x0003fe200000, V=1, S=0, C=0, Z=0, X=1, R=1, W=1, FS=9, T=0, MTYPE=NC
            \-> Computed address we will read from: vram:3fe200000 (MCA:3fe200000), (reading: 4096 bytes)

=== Completed VM Decoding ===

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用umr读取AMDGPU VRAM 的相关文章

  • 如何使用终端打开“-”虚线文件名?

    我尝试了 gedit nano vi leafpad 和其他文本编辑器 它无法打开 我尝试了 cat 和其他文件查找命令 我向你保证这是一个文件而不是目录 这种方法有很多误解 因为使用 作为参数指的是标准输入 标准输出 i e 开发 标准输
  • “原子”系统调用是什么意思?

    我知道atomic通常在以下上 下文中使用竞争条件意思是类似一致性 and 根据多线程 多处理环境确定结果 没关系 但最近我读到了Linux中的原子系统调用 但不明白什么是atomic实际上这里的意思是 即how this 原子性 is 实
  • 如果等于特定值则替换列

    我希望替换 CSV 中的第四列 如果它等于 N A 我正在尝试将其更改为 1 我似乎无法让它发挥作用 awk F if 4 N A 4 1 test csv 您可以使用以下内容awk awk F 4 4 N A 1 4 1 OFS test
  • 通过systemd服务启动烧瓶

    有一个systemd服务文件 etc systemd system flask app service Unit Description flask app After network target Service User root Wo
  • 字符串常量之前的预期标识符

    有一个这样的程序 include
  • gai_cancel() 需要很长时间才能成功

    我正在尝试在 C 中异步查找域 原因是我希望能够有效地添加超时期限 以防系统无法查找域 我遇到了 getaddrinfo a 命令 所以我决定尝试一下 然而 在我的机器上取消任何不会成功的 dns 查找 例如没有互联网连接时 永远不会花费少
  • Linux 上共享内存的生命周期是多长

    我正在使用 ftok shmget shmat shmdt 函数在 Linux 上创建 写入和读取共享段 如果我写入一个程序中的段 然后退出 然后稍后从另一个程序中读取该段 我会惊讶地发现数据仍然存在 我预计当共享一个段的最后一个进程执行
  • 如何在 Ubuntu 16.04 上设置 Docker + PhpStorm + xdebug

    我的问题是当我开始监听端口时 xdebug 不起作用 我认为 PhpStorm 无法与 xdebug 链接 我刚刚得到调试器面板变量不可用 看来 xdebug 没有正确设置 使用的软件及版本 Ubuntu 16 04 LTS Docker
  • 我应该如何从非 root Debian Linux 守护进程登录?

    我正在编写一个新的守护进程 它将托管在 Debian Linux 上 我发现 var log 具有仅 root 写入权限 因此我的守护进程无法在那里写入日志文件 但是 如果它写入那里 它似乎将获得自动日志轮转 并且也按照用户期望的方式工作
  • 如何在每个 xargs 命令之间休眠 1 秒?

    例如 如果我执行 ps aux awk print 1 xargs I echo 我想让 shell 在每次之间休眠 1 秒echo 如何更改我的 shell 命令 您可以使用以下语法 ps aux awk print 1 xargs I
  • 如何配置和采样英特尔进程内性能计数器

    简而言之 我试图在用户级基准测试进程中实现以下目标 伪代码 假设 x86 64 和 UNIX 系统 results for iteration 0 iteration lt num iterations iteration pctr sta
  • SDL/C++ OpenGL 程序,如何阻止 SDL 捕获 SIGINT

    我在用SDL http www libsdl org 用于在 Linux 上运行的 OpenGL 应用程序 我的问题是 SDL 正在捕获 SIGINT 并忽略它 这是一个痛苦 因为我正在通过屏幕会话进行开发 并且我无法使用 CTRL C 终
  • 如何设置appache2的WSGI与python 3.7一起使用?

    我使用的是 ubuntu 16 04 并安装了 python 3 7 并使用以下说明将其设置为默认值 无法在 ubuntu 中将默认 python 版本设置为 python3 https stackoverflow com question
  • 强制 shell 在 SunGrid 引擎中使用 conda 变量中的 python [重复]

    这个问题在这里已经有答案了 我正在尝试在 SunGrid 引擎中执行 python 文件 并且从 anaconda3 环境变量中执行它 我的代码很简单 from future import print function import url
  • 无法声明接口:资源繁忙

    我正在使用 USB4Java 低级版本 并且基本上是根据这段代码工作的here http www mets blog com java usb communication usb4java 我在 Ubuntu 中工作 遇到了有关权限的问题
  • 在Linux服务器中安装ZLIB

    我要安装ZLIB http www techsww com tutorials libraries zlib installation installing zlib on ubuntu linux php在Linux服务器中 我的服务器帐
  • 如何在 Ubuntu 中使用 gems?

    我最近升级到 Ubuntu 9 04 但在使用 gems 时遇到问题 我使用 apt get 安装了 Ruby Rubygems 和 Rails 这rails命令确实有效 然后我安装了 capistrano 和其他 gem 例如 herok
  • 检测目录中是否有某些内容被修改,如果是,则备份 - 否则不执行任何操作

    我有一个 数据 目录 我通过 shell 脚本定期同步到远程 NAS 但是 我想让这变得更有效率 我想在运行 rsync 之前检测 数据 中是否发生了变化 这样我就不会不必要地唤醒 NAS 上的驱动器 我正在考虑修改 shell 脚本以获取
  • 如何安装 Node 和 NPM 以便不必使用 sudo?

    我正在尝试在 Ubuntu 14 04 计算机上设置 Node js 和 NPM 但遇到了一些问题 在我的第一次尝试中 我不断得到EACCES尝试安装软件包时出错 有时甚至使用sudo 所以我彻底卸载了node和npm 现在我正在尝试找出如
  • Python:帮助(numpy)在退出时导致段错误

    我遇到了一个奇怪的现象 在 python 解释器中 我执行以下操作 gt gt gt import numpy gt gt gt help numpy 帮助显示正确 但一旦我按 q 返回解释器 Segmentation fault core

随机推荐

  • T - 小孩报数问题(python)

    题目 有N个小孩围成一圈 给他们从1开始依次编号 现指定从第W个开始报数 报到第S个时 该小孩出列 然后从下一个小孩开始报数 仍是报到S个出列 如此重复下去 直到所有的小孩都出列 总人数不足S个时将循环报数 求小孩出列的顺序 Input 第
  • linux学习4练习题及答案

    lt lt lt 第四单元练习 gt gt gt 1 在student用户下执行find etc name passwd 命令 并管理其输出要求如下 显示所有正确输出 屏蔽错误输出 保存正确数出到 tmp find out 错误数出到 tm
  • Chrome谷歌浏览器如何截取整个网页长图?

    PC截取局部或整个网页长图 操作步骤 1 浏览器打开需要截图的网页 2 进入调试模式 Windows系统 按F12 苹果IOS系统 按Command Option I 3 打开命令窗口 windows系统 按ctrl shift p 苹果I
  • 云服务器是干什么的

    云服务器的用途 1 放网站 云服务器和vps 独立服务器等一样 是网站空间的一种 因此 云服务器可以分割出虚拟主机 放置和运行网站 并且云服务器由于是建立在云计算基础上 比传统虚拟主机运行更为稳定 速度更快 性价比也更高 2 放应用 不管是
  • javascript 继承(extend)

  • 无法连接服务器ORacle数据库(可以Ping通)

    今天遇到一个怪事 我本机当服务器 开启了oracle的服务 发现其他人无法连接我的数据库 但是能ping通 1 检查端口是否能连接上 测试机 cmd gt telnet 10 0 0 163 1521 提示没有telnet这个命令 解决方法
  • 折半查找(二分查找)

    1 int Binary Search SeqList L int key 在有序表L中查找关键字为key的元素 若存在则返回其位置 不存在则返回 1 int low 0 high L Tablelen 1 mid while low lt
  • postgresql常用命令

    连接数据库 默认的用户和数据库是postgres psql U user d dbname 切换数据库 相当于mysql的use dbname c dbname 列举数据库 相当于mysql的show databases l 列举表 相当于
  • 三、PowerShell-使用帮助系统

    三 PowerShell 使用帮助系统 文章目录 三 PowerShell 使用帮助系统 1 帮助系统使用场景 2 更新帮助系统 3 查看帮助 4 使用帮助系统查找命令 5 帮助详解 1 参数集和通用参数 2 可选和必选参数 3 位置参数
  • springboot集成logback配置文件,配置日志

    目录 logback简介 为什么使用logback 开始使用 1 导入依赖 2 在项目的resources目录下新建一个logback xml文件 3 填入配置 4 项目启动 logback简介 Logback是由log4j创始人设计的又一
  • 人生中第一次向开源项目提交PR记录

    git了解很久了 但是就是没有向大一点的项目提交过pr 都是自己瞎折腾 记录一下开源项目提交PR过程 省略的过程可以参考 https www runoob com git git tutorial html 这个里面包括安装 使用 介绍基本
  • Java常见面试题

    Java面试题 java基础 spring springMVC mybatis mybatisplus springboot springcloudAlibaba redis mongodb mysql rabbitmq kafka doc
  • Java循环依赖使用@Lazy(懒惰的)注解解决

    Lazy Autowired private TaskService taskService Lazy 懒加载注解的概念 SpringIoC容器会在启动的时候实例化所有单实例 bean 如果我们想要实现 Spring 在启动的时候延迟加载
  • vue2转vue3笔记

    定义 vue3中不再使用data函数 而是采用ref reactive来定义响应式的数据 ref用来存放基本数据 reactive用来存放复杂的数据 注意这两种参数的值都不能直接使用 而是使用xxx value才能对其进行复制 而且reac
  • yaml配置对象map

    yaml配置如下 objectConfig object map 1 name 对象一 desc 这是第一个对象 url https abc abc abc 2 name 对象二 desc 这是第二个对象 url https abc abc
  • 基于沙猫群优化算法的函数寻优算法

    文章目录 一 理论基础 1 沙猫群优化算法 1 初始化种群 2 搜索猎物 探索 3 攻击猎物 开发 4 探索和开发 2 SCSO算法伪代码 二 仿真实验与结果分析 三 参考文献 一 理论基础 1 沙猫群优化算法 文献 1 提出了一种新的元启
  • 【Apifox】国产测试工具雄起

    在开发过程中 我们总是避免不了进行接口的测试 而相比手动敲测试代码 使用测试工具进行测试更为便捷 高效 今天发现了一个非常好用的接口测试工具Apifox 相比于Postman 他还拥有一个非常nb的功能 在接口的测试完成后 它可以一键生成接
  • Scripting.FileSystemObject控件的用法

    文件系统对象FSO的英文全称是File System Object 这种对象模型提出了有别于传统的文件操作语句处理文件和文件夹的方法 通过采用object method这种在面向对象编程中广泛使用的语法 将一系列操作文件和文件夹的动作通过调
  • Cadence orcad 原理图导出带书签目录的办法

    Cadence orcad 导出pdf 方便软件工程师或者其他人员查看 但是Cadence自带的导出pdf的办法不能同时导出书签目录 不利于查看 这片文章就是介绍怎么使用Cadence orcad 原理图导出带书签目录的pdf 这里以cad
  • 使用umr读取AMDGPU VRAM

    使用umr读取AMDGPU VRAM 造case 使用UMR读取内存 使用devmem2验证读取 huge page 造case gdb args kfdtest GNU gdb Ubuntu 9 2 0ubuntu1 20 04 1 9