- 博客(26)
- 资源 (8)
- 收藏
- 关注
原创 qemu trace event
实例diff --git a/hw/virtio/trace-events b/hw/virtio/trace-eventsindex 650e521e3..7c254468d 100644--- a/hw/virtio/trace-events+++ b/hw/virtio/trace-events@@ -63,6 +63,10 @@ virtio_queue_notify(void *vdev, int n, void *vq) "vdev %p n %d vq %p" virtio_n
2022-04-27 19:26:02
651
原创 virtio设备状态
spec描述驱动初始化探测的大致过程:例如virtio_net驱动中用于初始化queue,创建网络设备并初始化一些必要的数据结构当后端模拟出virtio_net设备后,驱动扫描到virtio设备,然后调用virtio_pci_driver中virtio_pci_probe函数完成pci设备的启动。注册一条virtio_bus,同时在virtio总线进行注册设备。当virtio总线进行注册设备register_virtio_device,将调用virtio总线的probe函数:v.
2022-04-19 20:17:55
1203
原创 linux 根分区扩容(非LVM)
[root@test_img ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsr0 11:0 1 1024M 0 romvda 253:0 0 20G 0 disk├─vda1 253:1 0 1G 0 part /boot└─vda2 253:2 0 7G 0 part / 这个是我们要扩容的根分区vdb 253:16 0 30G 0 disk[root@.
2022-04-14 19:35:02
1948
2
原创 crash and systemtap
crashdis查看函数源码及所在文件1) dis -s devmem_is_allowed2)查看反汇编指令dis devmem_is_allowed3) 反汇编并输出所在源码行号dis -l devmem_is_allowed汇编指令查询:汇编跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等 - 云+社区 - 腾讯云xor 异或exclusive ORsystemtap想要通过crash修改虚拟地址值时..
2022-03-31 16:39:27
284
原创 mmio理解
EPT页表是通过EPT violation建立起来的。EPT misconfig是用来标志MMIO访问异常。entry中的保留位(reserved bit set)被设置了就会触发EPT misconfig。即为110b时会被trigger, 可写可执行不可访问,MMIO是通过设置spte的保留位来标志的.写这种内存页会触发EPT misconfig,比如virtio-pci的notify配置空间地址。对于violation,它主要就是缺页故障,当内存读写都不被允许时就会触发hardware_s
2022-03-25 10:02:54
1298
原创 kmemleak
开启方法kernel hacking -> Memory Debugging -> Kernel memory leak detector修改后的.config 文件如下:重新编译内核,并替换vmlnuz# cp arch/x86/boot/bzImage /boot/vmlinuz-5.4.32/sys/kernel/debug/kmemleak 存在表示开启memleak 监视内核内存泄漏成功,开启后会有一个内核线程kmemleak# echo cl.
2022-03-24 19:31:29
603
原创 arm SMMU
相当于x86下面的IOMMU,是不同架构的不同实现。统一在linux中的IOMMU框架内部,都由结构体 iommu_device 管理。SMMU的作用是将设备的DMA请求地址翻译成可用的物理地址,当不开启SMMU时也可以直接使用DMA来搬运内存。SMMU是为了安全考虑中间加了一道。结构体关系如下图,smmu domian和 iommu的domain的关系,以及iommu group的作用x86下通过intel_iommu=on 来开启ref:ARM SMMU的原理与IOMMU
2022-03-11 09:32:20
2044
原创 lspci
1) 以树的形式打印pci设备# lspci -t -v2) -n 显示vendor 和 device id , -m 向后兼容显示pci 设备的数据# lspci -v -m -n -s 00:04.03)通过hexdump 查看pci设备的配置空间# hexdump /sys/devices/pci0000\:00/0000\:00\:05.0/config4) -x显示设备内存空间(开始的128位)-xxx显示全部的配置空间# lspci -s 00:05.0.
2022-03-09 11:07:02
1995
原创 gro_flush_timeout and napi_defer_hard_irqs
One concrete usage can be : echo 20000 >/sys/class/net/eth1/gro_flush_timeout echo 10 >/sys/class/net/eth1/napi_defer_hard_irqs If at least one packet is retired, then we will reset napi counter to 10 (napi_defer_hard_irqs), ensurin...
2022-03-09 10:31:40
624
原创 strace praticle
Q1: strace: attach: ptrace(PTRACE_SEIZE, 11329): Operation not permittedA1: 遇到过一次# sudo strace -p 11329出现如上问题,11329为虚拟机主进程,原因是因为gdb在跟这个进程,所以出现该问题
2022-03-07 19:29:17
606
原创 /dev/mem
x86平台下只允许访问起始的1MB内存# dd if=/dev/mem of=/dev/nulldd: error reading '/dev/mem': Operation not permitted1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.187975 s, 5.6 MB/sworkaround it by follows:(1) Rebuild your kernel without the CONFIG_STRICT_DEVMEM ...
2022-03-04 17:15:37
949
原创 qemu 编译及使用
1. 安装及编译1. 编译qemu```https://www.qemu.org/download/#sourceTo download and build QEMU 6.2.0:wget https://download.qemu.org/qemu-6.2.0.tar.xztar xvJf qemu-6.2.0.tar.xzcd qemu-6.2.0qemu 编译打开trace./configure --enable-trace-backends=log --enable-k...
2022-02-22 19:51:56
4923
原创 io 单队列和多队列理解
传统单队列框架适应的是老式机械盘。而多队列则适应追求更高iops的SSD等新设备Software Queues 主要负责io调度和优化,可以配置一个 CPU core 一个队列,或者一个 CPU socket 一个队列。这将消除或大大减少锁争用。I/O 调度和优化只会在 Software Queues 中完成,并且不会发生跨队列的 I/O 合并和排序。harware queues负责将从 Software Queues 过来的 I/O 请求发送给底层硬件,其数量和硬件相关。目前普通硬件一般...
2022-02-18 15:23:52
1311
原创 io inflight理解
inlight所在接口位置 /sys/block/sda/inflight表示io request 已经到了driver层但是还没有完成。描述的只是一个状态。如果想知道在driver层hang住的request可以考虑引入阿里的特性。https://gitee.com/anolis/cloud-kernel/commit/80d6ee240ea37f36ecd6dda5c8a6d7723cba73d3blk_mq_queue_tag_busy_iter(q, blk_mq_check_infli
2022-02-18 14:42:42
1762
原创 linux kenel 编译
Q1: 内核编译方法A:# yum install -y ncurses-devel openssl-devel.x86_64 bison flex elfutils-libelf-develfor BTF compile need dwarves, so should enable the PowerTools repo than# yum install dwarves# make -j16# make modules_install# make installQ2: 通过红帽的s..
2022-02-17 10:24:00
1637
原创 pcie 理解
相关名词RC Root Complex BAR Base Address Register BDF Bus+Device+Function组成ID用来定义pci设备id。PCIe系统,最大支持256条Bus,每条Bus上可以挂最多32个Device,而每个Device最多又能实现8个Function,而每个Function对应着4KB的配置空间。上电的时候,这些配置空间都是需要映射到Host的内存空间,因此,需要占用内存空间是:256*32*8*4KB =256MB。
2022-02-15 09:49:15
1212
原创 kvm steal 溯源
背景一般我们通过 kvm guest 中的%steal 指标来看 CPU 的争抢。但是目前在Host上并没有相关的手段或者指标来监控Guest 是否发生了争抢。本文主要介绍如何在Host 判断争抢的发生,及 steal time的产生的内核代码分析。CPU Steal TimeSar manual中对 %steal 的描述如下。Steal time is the percentage of time a virtual CPU waits for a real CPU while th...
2022-02-15 09:21:49
510
原创 blktrace的使用
1. blktrace 简介blktrace就是记录一个IO进入block layer后的各个步骤。可以通过各个步骤的时间统计进行IO性能问题的调查。IO可能经历的人生包括以下:Remap: 可能被DM(Device Mapper)或MD(Multiple Device, Software RAID) remap到其它设备 Split: 可能会因为I/O请求与扇区边界未对齐、或者si...
2019-07-22 11:43:57
3749
原创 ubuntu 源
1. ubuntu源修改 1) 更换源的方法: 修改/etc/apt/sources.list 2) apt-get update 需要修改下面对应的代号Ubuntu 12.04 (LTS)代号为precise。Ubuntu 14.04 (LTS)代号为trusty。Ubuntu 15.04 代号为vivid。Ubuntu 15.10 代号为wily。U...
2019-05-06 19:23:59
308
原创 ctags 快捷键
1. ctags 快捷键ctags快捷键 NO. 功能描述 快捷键 1 转到上一个位于第一列的"{" double 【 2 转到下一个位于第一列的"{" double 】 3 转到上一个空行 { 4 转到下一个空行 } 5 转到当前光标所指的局部变量的定义 gd 6 转到当前光标所指的...
2019-05-05 17:45:24
2292
原创 使用GDB单步调试KVM内核
调试内核的方法有很多。 但是通过gdb 和KVM调试有以下几个好处。1) 可以实现单步调试。2) 环境配置简单。1. RHEL7.3上实现KVM内核调试。1) 在domain行,追加xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0' 。并追加<qemu:commandline>标签,该标签将会允许启动qemu时,向qem...
2018-04-13 14:50:20
695
原创 linux NUMA技术
1. 概述NUMA(Non-Uniform Memory Access Architecture)即非一致性内存访问技术。NUMA系统有多个Node通过高速互连的网络联系起来的系统。而Node则是由一组cpu和本地内存组成。不同的Node有不同的物理内存,由于Node访问本地内存和访问其它节点的内存的速度是不一致的,为了解决非一致性访问内存对性能的影响,有一些工具可以使用。包括 numac
2016-10-13 15:11:02
9527
原创 python中的getrlimit和setrlimit
python中的getrlimit和setrlimit和c中一样。需要导入python的类库。(# import resource )resource:可能的选择有RLIMIT_AS //进程的最大虚内存空间,字节为单位。RLIMIT_CORE //内核转存文件的最大长度。RLIMIT_CPU //最大允许的CPU使用时间,秒为单位。当进程达到软限制,内核将给其发送
2016-08-03 15:51:18
2475
原创 用openvswitch创建docker容器之间的vxlan网络
环境:host1 : rhel7.2host2: rhel7.21)启动docker,导入imag# systemctl startdocker# systemctl enabledocker# docker load -irhel_img.tar2)创建网桥并给ip# ovs-vsctl add-brvxbr# ifconfig vxbr10.
2016-07-21 16:25:40
1495
原创 shell中的双冒号
shell中经常有“ echo ${a::1}”这种表达式。其实就是相当于“echo ${a:0:1},表示打印字符串种的第0个到第一个字母。类似于其它语言的substring(a, 0, 1)。 双冒号,只是省略了其中的”0“, 初看会让人迷惑。
2016-03-29 16:03:23
4147
原创 关于注册com+组件
在注册dll的时候,会报一个message”警告:类型库导出程序在签名中遇到泛型类型的实例。泛型类型不能导出到com“网上查了很多资料,无果。好像是com+组件中不能用泛型,也无法导入泛型的程序集。还请多多指教。现在程序一跑到那种带有泛型的方法就会抛出异常,因为无法导入到组件中。所以会找不到程序集。困惑还请高手不吝赐教。谢谢
2011-05-16 13:40:00
762
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人