发现在X86一体机上,从光盘镜像启动,速度很慢,好久系统才能起来,为什么?
这个坑挖了很久了,但是一直没填,看着也碍眼。
我用iostat看了两种情况下的Host磁盘读写情况,发现启动慢的Host读速度在3-4MB左右,快的Host能到10MB左右,差了一倍,难怪这个慢。为什么会出现这种情况呢?
首先ide-cd的继承关系:ide-cd -> ide-device -> device。
Class: IDEDeviceClass+DeviceClass
Intance:IDEDrive+IDEDevice+DeviceState
初始化函数:
Class:ide_cd_class_init --- ide_device_class_init
Intance:ide_dev_instance_init
注意,设备最终初始化是赋值在IDEDeviceClass上的init函数指针,最终调用函数:ide_dev_initfn,在这个函数里面结构体:IDEDevice相关结构一一初始化完毕,里面比较关键的成员是BlockConf conf,这个是和IDE的后端驱动联系在一起的,后端驱动负责Host端的具体IO操作,Host端用iostat看到的磁盘读写都是由这个后端驱动触发的,所以,现在慢慢的接近事情的真相。究竟为什么会慢呢,我会继续填这个坑。