Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1242558
  • 博文数量: 122
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 4004
  • 用 户 组: 普通用户
  • 注册时间: 2014-02-20 08:27
文章分类
文章存档

2016年(1)

2015年(21)

2014年(100)

分类: LINUX

2014-08-07 22:25:23

有做个“硬盘黑匣子”的想法,即在磁盘中划分一块区域出来做黑匣子用。
我们知道,当系统出现严重问题时,系统日志经常已不能正常工作,因为依赖太多,比如调度和冗长的IO流程。
因此向利用现有的硬盘做黑匣子,记录内核关键的异常信息,信息量小,循环写入,不考虑删除、不考虑碎片、不考虑性能、不考
虑复杂的管理算法。

目前想到的方法有二:
1、利用BIOS INT13接口。
我们知道内核boot时,MBR和boot相关的数据通常是通过BIOS INT13接口读取的,通过该接口可以实现硬盘指定扇区范围的读写,看似
可以满足我的需求,但其实不然,因为BIOS接口只能在实模式下使用,保护模式下无法直接使用,因为实模式下中断的处理方式和地址
宽度跟保护模式都不同,如果要在保护模式中调用BIOS中断接口,只能:
  a、定制idt表,并弄清楚实模式下BIOS中断接口的处理方式,估计难度非常大。
  b、通过vm86()接口进入VM86模式,可以调用BIOS中断接口,但问题是vm86只在32位环境中支持,64位不支持。
综上,这个方法的可行性很小。

2、定制简化的硬件驱动,直接操作硬件。
这种方法,需要深入理解硬件。通常硬盘底层驱动都是厂商自己维护的,算是硬件的核心技术之一了,改写驱动的难度也不小,而且面临
如下问题:
1、硬件种类众多,难以做到兼容。
2、定制驱动和原驱动的竞争和互斥问题。比如中断和DMA的竞争
3、对系统IO性能影响问题。我们知道磁盘IO的时间大部分花在寻道上,而块设备层的各种合并和优化算法,其实就是为了减少寻道时间,
而如果系统正常IO期间,穿插了定制驱动的直接IO操作的话,应该会对系统的IO产生影响。

欢迎大家多提宝贵意见和建议!!
阅读(4822) | 评论(8) | 转发(1) |
给主人留下些什么吧!~~

humjb_19832014-08-12 08:38:33

kifast:1.应该需要qemu来启动这个虚拟机,虚拟机启动后,qemu就不发挥太大作用; 实模式虚拟机,其实就是虚拟机启动的时候,虚拟机中seabios加载后运行的那一段时间,其实跟普通虚拟机并无差别,只是平常加载系统后,会转到保护模式下;这个刚开始还是借助qemu来调试,我觉得到最后,可以自己实现类似功能,ioctl下发命令给kvm内核模块,创建vCPU,然后指定运行指令的地址EIP,run vCPU。
2.这个vm上不运行现有的OS, 参考《x86 x64体系探索及编程》, 自己写一段在实模式下运行的类似boot的代码,这段代码来读取host机内核信息并记录到磁盘中;
3.磁盘透传给vm后, vm访问磁盘实际还是走vm上的io流程,但因为其实相当与我们自己写了个实模式操作系统,基本上没有调度和冗长的IO流程。

呵呵,这下比较清楚了,个人觉得这个思路不错,有新意~,但还是存在些问题:
1、由于虚拟机运行于qemu进程上下文中,其运行必然依赖host的调度,如果系统调度出问题了,那么vm就不起作用了。
2、不确认磁盘透传是否可以只透传一个分区(印象中应该不行),这样的话,vm和host间对磁盘访问的冲突问题,应该也难以解决。
但总体来说,这个思路还是很不错的,有一定的可行性和用途。感谢兄弟的意见,欢迎继续讨论!!!

回复 | 举报

kifast2014-08-11 22:45:04

humjb_1983:非常感谢,感觉这个思路不错,但是还有些疑问,继续讨论哈:
1、这样的vm是否需要qemu?实模式虚拟机具体是啥概念?跟普通qemu-kvm模拟的vm有啥差别?
2、这个vm上运行什么OS?
3、磁盘透传给vm后,vm访问磁盘实际还是走vm上的guest OS的标准IO通道?

1.应该需要qemu来启动这个虚拟机,虚拟机启动后,qemu就不发挥太大作用; 实模式虚拟机,其实就是虚拟机启动的时候,虚拟机中seabios加载后运行的那一段时间,其实跟普通虚拟机并无差别,只是平常加载系统后,会转到保护模式下;这个刚开始还是借助qemu来调试,我觉得到最后,可以自己实现类似功能,ioctl下发命令给kvm内核模块,创建vCPU,然后指定运行指令的地址EIP,run vCPU。
2.这个vm上不运行现有的OS, 参考《x86 x64体系探索及编程》, 自己写一段在实模式下运行的类似boot的代码,这段代码来读取host机内核信息并记录到磁盘中;
3.磁盘透传给vm后, vm访问磁盘实际还是走vm上的io流程,但因为其实相当与我们自己写了个实模式操作系统,基本上没有调度和冗长的IO流程。

回复 | 举报

humjb_19832014-08-11 18:51:08

kifast:需要hypv支持, kvm当然也要用,毕竟kvm是cpu硬件虚拟化的驱动。
vm与host机的通信通过vmchannel实现,也可以单纯用共享物理内存去实现。
至于vm如何操作磁盘分区,我想看是不是把这个磁盘直接透传给虚拟机,一块磁盘被两个系统同时挂载使用,vm中也可以直接操作物理磁盘。
实模式vm需要保证跟host机的操作不冲突。

我的一点思路,你觉得是否可行?

非常感谢,感觉这个思路不错,但是还有些疑问,继续讨论哈:
1、这样的vm是否需要qemu?实模式虚拟机具体是啥概念?跟普通qemu-kvm模拟的vm有啥差别?
2、这个vm上运行什么OS?
3、磁盘透传给vm后,vm访问磁盘实际还是走vm上的guest OS的标准IO通道?

回复 | 举报

kifast2014-08-11 15:13:39

humjb_1983:呵呵,这个有点意思~,请问这个实模式vm,需要hypv支持么?需要使用kvm?
这个vm如何与host通信?这个vm如何操作硬盘分区?是否依赖于cache、块设备、scsi、驱动等?
对这个实模式的vm有点好奇,希望指点。。。

需要hypv支持, kvm当然也要用,毕竟kvm是cpu硬件虚拟化的驱动。
vm与host机的通信通过vmchannel实现,也可以单纯用共享物理内存去实现。
至于vm如何操作磁盘分区,我想看是不是把这个磁盘直接透传给虚拟机,一块磁盘被两个系统同时挂载使用,vm中也可以直接操作物理磁盘。
实模式vm需要保证跟host机的操作不冲突。

我的一点思路,你觉得是否可行?

回复 | 举报

humjb_19832014-08-10 22:49:38

kifast:blackbox我们也有做,不过只是单独开个日志分区,记录系统运行日志。
我想你说的这种情况,应该是内核连kdump文件都无法生成的时候吧。

划分一个日志分区,然后host机不要插手这个分区的事,利用Intel vt技术,创建一个vCPU,运行一个实模式的虚拟机,定时记录host机的日志信息到日志分区,
你看怎样?

呵呵,这个有点意思~,请问这个实模式vm,需要hypv支持么?需要使用kvm?
这个vm如何与host通信?这个vm如何操作硬盘分区?是否依赖于cache、块设备、scsi、驱动等?
对这个实模式的vm有点好奇,希望指点。。。

回复 | 举报