自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

六六哥的博客

Linux内核,虚拟化,云计算

  • 博客(80)
  • 资源 (10)
  • 收藏
  • 关注

原创 声明 & 推荐博客[置顶]

因网易私加广告,搬家至CSDN,但有些博客图片未搬迁成功,如有需要请参考原博客原博客为网易博客,地址为 blog.163.com/eric_liufeng.

2015-09-28 09:57:41 1597 1

原创 Intel的instruction boundaries是什么

今天看SDM发现一个关键的名词交错"instruction boundaries"经常出现. 如"All interrupts are guaranteed to be taken on an instruction boundary". 那么什么是指令的边界呢?一个指令会有边界吗? 像专家请教后,才得到了答案.在X86中, 使用的是非精简指令,会占用很多的cycle才可以完成一条指令,而

2015-09-30 14:24:35 1376

原创 Cacheline技术浅析

最近组内有个同事在做cacheline相关的特性,向其学习了一下,对原来的cacheline的理解更近了一步。这里总结一下。请彭超大侠有空的话帮忙在斧正一下Cache就是对内存的内容进行缓存的一个硬件。cache和内存的逻辑关系结构如下图所示。从左往右,从上到下逐个说明首先物理内存又是通过物理地址PA(physical add

2015-09-29 11:23:42 15249 1

原创 Intel MCE 之增强的CACHE ERROR REPORTING

从Intel Core Duo开始,开始引入了 cache error reporting的增强版本。在早期的Intel芯片中,cache的状态取决于一个cache中发生错误纠正事件的次数。在一个叫做“threshold-based error status”的规范中指出,cache的状态现在取决于同样的纠正错误在cache中影响到的cache line的数量。影响阀值的因素很多,由Intel

2015-09-29 09:33:54 1237

原创 Intel MACHINE-CHECK 特性的初始化伪代码实现

如果要使用MCA,首先要初始化芯片来激活 machine-check exception和error-reporting机制下面给出的伪代码中展示了如何完成MCA的初始化动作。本代码首先检测MCA和exception是否被芯片支持;然后使能machine-check exception和 error-reporting的bank寄存器。在主板上电以后, IA

2015-09-29 08:20:15 1129

原创 Intel MCE UCR ERRORS(三) UCR的错误分类

通过 IA32_MCi_STATUS中的S和AR两位的不同编码,可以将UCR分为如下类别Uncorrected no action required (UCNA) - 该类UCR不会通过MCE进行通知,而是按照corrected machine check error的方式报告给系统软件。UCNA意味着系统都的某些数据损坏了,但是这些坏数据还没有被使用,并且处理器的状态是有效的

2015-09-28 14:21:52 3347 1

原创 Intel MCE UCR ERRORS(二) UCR的报告和记录

IA32_MCi_STATUS MSR 用来报告UCR错误、corrected错误和 uncorrected errors错误。 IA32_MCi_STATUS的定义如下所示,通过其中的bit位可以唯一的标明UCR错误。根据UCR的错误类型,UCR错误可以通过CMCI方式通知,也可以通过MCE( machine check exception)方式发送。

2015-09-28 13:44:57 1574

原创 Intel MCE UCR ERRORS(一) 概述

UCR( uncorrected recoverable machine check errors) 错误恢复是MCA的一种增强特性,第一个支持该特性的芯片是Intel的45nm芯片(CPUID为DisplayFamily_DisplayModel: 06H_2EH)。该特性允许系统软件对于特定类型的uncorrected errors做出一些恢复性动作以便保持系统的正常稳定允许

2015-09-28 10:52:25 1782

原创 Intel MCE CMCI (三) 系统软件中CMCI的相关实现

系统软件必须负责使能CMCI,并能管理CMCI。系统软件在相关的逻辑CPU上需要设定CMCI的中断处理程序,可以对CMCI LVT进行编程,并且可以串行的查询被多个处理器共享的machine check banks本文将讲述系统软件如何管理CMCI,包括:CMCI的初始化,中断处理函数(如何同最小的方式处理banks访问的竞争问题)1. CMCI的初始化虽然根据 c

2015-09-28 10:08:42 1380

原创 Intel MCE CMCI (二) CMCI的LAPIC接口

CMCI的操作图如下所示CMCI中断的传送被配置向为LAPIC寄存器空间中的 LVT CMCI写入,该寄存器默认的起始地址为 APIC_BASE + 2F0H。如果MC errors影响到了多个逻辑处理器,那么CMCI就会被传递到多个逻辑处理器上。例如,两个逻辑处理器共享一个cache,在该cache上发生了可校正(corrected)的bit错误,那么CMCI

2015-09-28 10:06:56 1086

原创 Intel MCE CMCI (一) 概述

Corrected machine-check error interrupt (CMCI) 是MCA的增强特性。在原来的芯片里面,都是使用一种叫做threshold-based error reporting的机制来处理corrected error. 但是threshold-based error reporting需要系统软件周期性的轮询检测硬件的corrected MC error

2015-09-28 10:05:07 3069

原创 MACHINE-CHECK 相关的MSR(二) - Machine-Check 全局控制MSR

Machine-Check 全局控制MSR包括:IA32_MCG_CAP, IA32_MCG_STATUS,IA32_MCG_CAP, IA32_MCG_STATUS。其中后两个是可选的1.  IA32_MCG_CAP MSRIA32_MCG_CAP是一个只读寄存器,其中报告了当前芯片MCA相关的能力信息。如下图所示 其中Count field, bits 7:0 - 当前处理器记录错误信息的ba

2015-09-28 09:57:33 1851

原创 MACHINE-CHECK 相关的MSR(一) - 概述

Machine check使用了一组相关的MSR。这些MSR有两部分组成,第一部分是全局控制和状态寄存器(global),另外一部分是一些记录错误信息的banks(banks的概念在前面的文章已经讲过,请看参考文章)。MSR的整体布局如下图所示 每一个错误报告的bank都同处理器中一个特定的硬件单元(或一组硬件单元)相关联。使用RDMSR或WRMSR来对这些寄存器进行读写。将上面图中的banks展

2015-09-28 09:57:31 1774

原创 Intel MCA 硬件机制概述

Intel引入了  MACHINE-CHECK ARCHITECTURE(MCA) 和 machine-check exception(#MC) 机制用来对服务器硬件进行自检,并在发现硬件错误的时候发出中断或异常。系统软件收到中断或异常后,会对其进行响应,进行相应的修复、告警或其他策略等动作。通过Intel的这个RAS特性,保证在发生crash等错误前,服务器可以有机会做一些容错处理,大大提升了I

2015-09-28 09:57:28 7713

原创 内核虚拟地址转物理地址的函数

内核虚拟地址转换物理地址的函数为pa = __pa(va);

2015-09-28 09:57:25 1305

原创 Native Linux的MCE基本原理和处理函数入口(基于kernel 4.2.0+ )

在老的Intel处理器上,当硬件检测到错误后,就会对系统的每个逻辑CPU广播MCE. 这样设计是因为硬件上的缺陷,因为原来的处理器当发现了错误(如内存错误),是会随着pipeline流到任意的不可预测的CPU上去,导致系统的问题.基于这样的硬件设计问题,就产生了将MCE广播到整个系统所有CPU上去的策略,保证所有的CPU在发生错误的时候,同时陷入异常处理流程指导异常处理完成.这样的消耗其实在多so

2015-09-28 09:57:23 1743

原创 Intel UCE和CE,以及register banks的意思

最近阅读intel SDM的RAS部分的时候,遇到了一些名字难以理解,找到了相关的高手询问得到了答案,这里共享出来CE: corrected error。意思就是可矫正的错误。举个例子来说,当内存检查遇到了错误的时候,当检查到的错误是1bit的时候,可能就是因为ECC校验码错误导致的,这时候CPU可以对其进行纠正,不会影响系统的任何进程,这种情况就是corrcted error。UCE:uncor

2015-09-28 09:57:20 9307

原创 实验室服务器串口配置

1. UEFI安装,所以启动文件的配置为/boot/efi/EFI/redhat/grub.cfg,或者直接修改/etc/grub2-efi.cfg2. 修改启动启动参数,添加如下参数:console=tty0 console=ttyS0,115200 并且去掉quite参数3. 通过console找到串口所连接的port,这里为11后,找其他服务器进行telnet serial-srv 4011

2015-09-28 09:57:17 721

原创 Intel处理器中断18 - Machine-Check Exception (#MC)介绍

概述当处理器探测到机器内部错误或者总线错误的时候,就会发送该中断。当然,一个外部的硬件代理设备探测到总线错误的时候,也会发送该中断。近期的工作是围绕内存错误的,所以发现了内存 错误,就会对处理器发送该中断。machine-check exception 在Pentium以后的芯片上才得以支持,而且对于不同的CPU模型都是不同的,需要参考相关的model-specific。Intel不同处理器家族对

2015-09-28 09:57:15 13218

原创 X86服务器配置YUM源的方法

#拷贝数据包mkdir /opt/repomount -o loop /dev/cdrom /opt/repocp /mnt/Packages/* /opt/repo#安装三个数据包cd /opt/reporpm -ivh deltarpm-3.6-3.el7.x86_64.rpm rpm -ivh python-deltarpm-3.6-3.el7.x86_64.rpm rpm -ivh cre

2015-09-28 09:57:12 775

原创 TrustZone初探(一)

最近在搞trustzone,把arm的例子程序成功在某Cortex-A9的处理器上跑起来,趁着手热记一些东西。1.Truztzone和已有trust computing比如TPM技术的区别。trustzone并没有打算取代TPM,它们关注的点不一样,TPM最关注的Key的安全,它的endorsement key从不会让外界知道,所以这个秘钥加密过的东西十分安全,你只有把密文扔给之前加密的那块TPM

2015-09-28 09:57:10 3076

原创 ARM TrustZone技术

当前AMD与ARM合作,甚至有采用ARM授权进军移动处理器市场的传闻,而在6月份的AFDS大会上,ARM不仅参与了AMD的HSA基金会,它与AMD暧昧不明的关系也得到确认,不过跟大家想象中的不太一样。AMD确实从ARM那里获得了IP授权应用到未来的APU产品中,不过并非完整的Cortex系列,而是TrustZone安全技术。从2004年的Cortex-A5架构首次应用以来,ARM的TrustZon

2015-09-28 09:57:07 2796

原创 X86分区虚拟化 - 多核初始化启动和GUEST OS初始化启动

最近在研究硬件分区虚拟化的模型实现方法,总结了一下,共享出来。需要先了解芯片的启动流程,以便加入Thin Hypervisor代码。下面以志强芯片为例,描述X86初始化流程多核初始化协议定义了两类处理器:bootstrap processor(BSP) 和 application processors (APs). 上电或者MP复位后,系统硬件动态选择一个作为BSP,其余的作为APs. BSP的I

2015-09-28 09:57:04 1669

原创 QEMU更换内核后启动错误

更换内核的vmlinuz-2.6.32-504.el6.x86_64之后,启动虚拟机,发现有如下的错误error:Failed to start domain testkvm-centos6.6_3error: internal error: process exited while connecting to monitor: qemu: linux kernel too old to load

2015-09-28 09:57:02 5381

原创 如何在虚拟机外面换内核

1. 挂载qcow2硬盘modprobe nbd max_part=63qemu-nbd -c /dev/nbd0  /home/liufeng/centos7.imgmkdir mntmount /dev/nbd0p1 mnt2. 将boot目录下的文件内核拷贝到HOST上,有如下文件cp ./mnt/initramfs-2.6.32-504.el6.x86_64.img   .cp ./mnt

2015-09-28 09:56:59 1312

原创 如何让CentOS启动输出详细的硬件初始化信息

原来的命令行为:root=/dev/mapper/VolGroup-lv_root nomodeset rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 rd_LVM_LV=VolGroup/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd

2015-09-28 09:56:57 1486

原创 QEMU内存管理之生成FlatView内存拓扑模型过程分析(基于QEMU2.0.0)

关于MemoryRegion请参考我的博客《MemoryRegion模型原理,以及同FlatView模型的关系(QEMU2.0.0)》,今天主要讲一下QEMU如何生成内存拓扑。主要涉及的函数为:FlatView *generate_memory_topology(MemoryRegion *mr),输入一个MR,将MR平展的FlatView返回 该函数的主要目的是为一个MemoryRegion所

2015-09-28 09:56:54 3204 2

原创 如何查看系统中都注册了哪些MemoryRegion(QEMU2.0.0)

1. 修改代码${QEMU_SRC}/memory.cstatic void render_memory_region(FlatView *view, MemoryRegion *mr, Int128 base,

2015-09-28 09:56:51 1384

原创 MemoryRegion模型原理,以及同FlatView模型的关系(QEMU2.0.0)

一、MemoryRegion模型QEMU通过MemoryRegion来管理虚拟机内存,通过内存属性,GUEST物理地址等特点对内存分类,就形成了多个MemoryRegion,这些MemoryRegion 通过树状组织起来,挂接到根MemoryRegion下。每个MemoryRegion树代表了一类作用的内存,如系统内存空间或IO内存空间。MemoryRegion模型如下图所示,蓝色的部分代表了真实

2015-09-28 09:56:49 3362 3

原创 QEMU内存管理之FlatView模型(QEMU2.0.0)

在QEMU的内存管理中的FlatView描述了QEMU虚拟机内存平坦展开的情况。首先看一下FlatView模型 FlatView的原理:1. 首先FlatView模型是通过FlatView和FlatRange两个对象组成。2. FlatView是该段内存的整体视图的管理结构,一个FlatView由一组FlatRange组成。3. 每个FlatRange代表了虚拟机上的一段内存,多个FlagRang

2015-09-28 09:56:46 2696

原创 QEMU的AddrRange地址空间对象模型算法总结(QEMU2.0.0)

QEMU负责对分配给GUEST物理内存,需要一套数据结构对GUEST物理地址空间进行管理。AddrRange 是用来管理地址空间计算的一个对象。QEMU通常使用 AddrRange 表示GUEST物理地址空间范围,所以需要注意的是通过AddrRange计算出来的值,一般代表了GUEST的物理地址空间,其中start代表了该段物理地址空间的其实地址,尤其注意的是,它是GPAstruct AddrRa

2015-09-28 09:56:43 1138

原创 QEMU的128位算法集合(基于QEMU2.0.0)

QEMU的128位算法集合,通常用于QEMU中GPA的地址运算,这里总结如下/* * 128位数据结构,由64bit组成,注意这是有符号数,所以高部分最多用63bit,表示127bit的数字 */struct Int128 {    uint64_t lo;    int64_t hi;};  函数意义Int128 int128_make64(uint64_t a)将 64BIT数字转换

2015-09-28 09:56:41 725

原创 QEMU中VCPU线程间的IPI发送核间中断(基于QEMU2.0.0)

我们都知道对于多核CPU需要IPI机制进行通知或者唤醒,当CPU接收到的中断不是本地中断的时候,需要通过IPI唤醒对端CPU,然后进行中断的传递那么QEMU中如何实现不同VCPU通知的呢首先在初始化KVM虚拟机的时候,注册了核间通信处理函数,这个函数完成了IPI的功能int kvm_init(QEMUMachine *machine){     /*     * 注册CPU见通信接口   

2015-09-28 09:56:38 2812

原创 通过KVM_SET_USER_MEMORY_REGION操作虚拟机内存(Kernel 3.10.0 & qemu 2.0.0)

先界定几个术语GPA:Guest 物理地址HVA:HOST 虚拟地址MR:Memory Region,QEMU虚拟机中地址空间的管理结构在QEMU用户态进程中,会调用KVM_SET_USER_MEMORY_REGION来修改虚拟机的内存,kvm_set_user_memory_region就是内核操作KVM_SET_USER_MEMORY_REGION的接口例如:static int kvm_se

2015-09-28 09:56:35 3557

原创 Samba服务器的配置

Samba服务器的配置实验步骤:1、安装有关Samba的RPM包(samba、samba-common、samba-client)2、创建Samba用户3、修改配置文件4、重启samba服务5、设置目录访问权限6、测试具体步骤如下:1、安装RPM包(缺省情况下RHEL5安装了samba的相关软件包,可以用如下命令查看)[root@localhost ~]#rpm -qa | grep samba 

2015-09-28 09:56:33 492

原创 ARM SERVER 虚拟机挂载多块磁盘问题的解决方法

今天在ARM-SERVER上启动虚拟机发现总是mount不上根目录,报告错误为Begin: Loading essential drivers ... done.Begin: Running /scripts/init-premount ... done.Begin: Mounting root file system ... Begin: Running /scripts/local-top .

2015-09-28 09:56:30 2554

原创 QEMU VCPU线程同步机制之QemuCond(基于QEMU2.0.0)

/* * QEMU互斥量条件,由pthread_cond_t承担,需要初始化和销毁,条件本身需要互斥量保护 */struct QemuCond {    pthread_cond_t cond;};/* * QemuCond因为一般是动态分的,所以通过pthread_cond_init来初始化QemuCond */void qemu_cond_init(QemuCond *cond){    in

2015-09-28 09:56:27 1618

原创 Linux 新api eventfd

eventfd 在内核版本,2.6.22以后有效。查看内核版本可以用命令 uname -r 。#include int eventfd(unsigned int initval, int flags);这个函数会创建一个事件对象 (eventfd object), 用来实现,进程(线程)间的等待/通知(wait/notify) 机制. 内核会为这个对象维护一个64位的计数器(uint64_t)。

2015-09-28 09:56:25 470

原创 KVM源代码分析1:基本工作原理

转自OenHan博文 1.KVM模型结构所有的虚拟化方案都是两个模块:guest和host。在完全虚拟化方案里面,guest则完全有guest OS保证其功能,保证运行场景的程序正常执行。KVM修改则是在host上,有KVM Driver(内核态)和Qemu(用户态),KVM Driver负责模拟虚拟机的CPU运行,内存管理,设备管理等;Qemu则模拟虚拟机的IO设备接口以及用户态控制接口。 如

2015-09-28 09:56:22 1503

原创 select(poll)实现代码实现分析(基于kernel 3.10.0)

分析转自网上。针对kernel3.10.0的代码重新注释,对其中的错误进行了修正上层要能使用select()和poll()系统调用来监测某个设备文件描述符,那么就必须实现这个设备驱动程序中struct file_operation结构体的poll函数,为什么?因为这两个系统调用最终都会调用驱动程序中的poll函数来初始化一个等待队列项, 然后将其加入到驱动程序中的等待队列头,这样就可以在硬件可读写

2015-09-28 09:56:19 703

2. pg302-qdma.pdf

基于Xilinx的QDMA 2019.1 硬件开发者手册,应用于5G PHY层的云化硬件加速

2020-07-16

Debug Hacks中文版—

Debug Hacks中文版—深入调试的技术和工具.pdf 个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!

2017-08-11

深入Linux内核架构(中文版)-超高清-由Word转pdf而成

深入Linux内核架构(中文版)-超高清-由Word转pdf而成 深入Linux内核架构(中文版)-超高清-由Word转pdf而成 深入Linux内核架构(中文版)-超高清-由Word转pdf而成 深入Linux内核架构(中文版)-超高清-由Word转pdf而成 深入Linux内核架构(中文版)-超高清-由Word转pdf而成

2017-05-20

EPA的完整集合

EPA 合集

2016-10-09

SoruceTree 1.6 完美中文破解版

SoruceTree 1.6 完美中文破解版 下载地址见文档 破解方法见压缩包内的说明文档

2016-04-14

ARM GICV3 中断控制器规范

ARM GICV3 中断控制器规范

2016-01-22

ARMV8 cortex-a57 64位 aarch64 开发者手册

ARMV8 cortex-a57 64位 aarch64 开发者手册

2016-01-22

ARM® Cortex®-A57 MPCore Processor Technical Reference Manual.pd

ARM开发必备

2015-12-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除