On 10/12/06, Fajun Chen <fajunchen@xxxxxxxxx> wrote:
Hi Eric, Thanks for your detailed explanation. In terms of ops/sec, I currently implemented it as the amout of data transferred per seconds. Please let me know if I need to implement it differently.
Ops/sec and blocks/s can easily be translated. Doesn't really matter which metric you use.
I also have a question about NCQ error handling. Among all the outstanding commands, if one command fails, what will happen to the rest of the commands?
Per the specification, upon any error, all commands internal to the device are aborted. Now, there's optimizations to this behavior (drives may have internally queued command completions that they can let finish before they report the error) but they don't affect the host in any meaningful way.
I understand that all the commands in the device will be aborted by LOG PAGE 10h command, but how about the commands enqueued but haven't been sent to the device? In my particular application, one thread is blocked for every outstanding command. So depending on how libata handles outstanding commands, it will have significant implication to my user space application.
If queued in hardware but not yet issued to the device, I am not sure how those would be handled... probably up to each vendor's hardware specification. Don't really know beyond that as I haven't written an HBA driver before. My work has all been on the device side. --eric - To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html