20楼#
发布于:2004-08-23 14:23
问题是一旦出现bus reset,我还能恢复过来吗?
由于我做的是网络虚拟磁盘,保持响应时间在10ms之内对于网络来说不是那么容易保证的,比如服务器负载重,局域网网络负载重等情况,所以bus reset迟早会发生,这是一个不能回避的问题。 所以在一方面是提高响应时间,另一方面是在出现bus reset时怎样恢复过来,我注意到kangzh和terrychen做网络虚拟磁盘很长时间了,你们是怎样保持响应时间在10ms之内的,又是怎样从bus reset中恢复过来的呢? ?????? 另外,bus reset时要求在HwScsiResetBus中完成所有的srb,而我在bus reset后利用!irpfind发现仍有未完成的irp(srb),显然我的HwScsiResetBus中的ScsiPortCompleteRequest调用并没有完成srb。于是我怀疑我是将在startio中将srb插入队列,交给一个内核线程来处理。在出现bus reset时,有可能线程正在处理该srb,这时HwScsiResetBus中该怎样完成srb呢? 办法一是让HwScsiResetBus和内核线程间有某种同步措施,同时只能有一方在处理srb。但HwScsiResetBus工作在dispatch_level,好像没法使用内核同步对象,即不能waitforxxxobject。 办法二是好像从外部杀掉内核线程,然后完成srb,但好像没有办法从外部杀掉一个内核线程。 我的分析有问题吗?真是痛苦啊! |
|
|
21楼#
发布于:2004-08-23 10:20
经常出现总线reset应该是在规定的时间内scsi没有反馈srb给os造成的,一般为10ms,如果及时反馈,应该不会出现这个问题.你在reset之后才反馈,应该已经timeout了
|
|
上一页
下一页