我有一个 SCSI 控制器(HP Smart Array 642),使用 Linux 上的 cciss 驱动程序,它连接到多个 SCSI 磁盘。我正在尝试优化这些设备之间的通信,并来到了我应该检查每个磁盘的缓存有多满的地方。
是否可以从磁盘获取此值?或者是否可以从控制器获取此值?
ps 要注意的是,由于磁盘位于控制器后面,所以我无法使用 hdparm。
答案1
您可以直接使用驱动器上的固件。 scsirastools将允许您向驱动器发出模式页面命令来修改其配置。如果您想对驱动器进行实验,请查看模式页面 8 上的缓存分段参数和预取策略作为起点。
我不知道 scsirastools 是否支持您的 RAID 控制器上的直通。如果不支持,您可能必须从 Ebay 上购买旧的 adaptec 39320 或类似控制器,并使用它来摆弄模式页面。YMMV。
答案2
研究过程中发现,Linux 驱动程序 (cciss) 中存在该控制器的缓冲区限制:
MAX_KMALLOC_SIZE(4096∗512)
这意味着为了获得最快的速度,我们需要始终将发送信息放在这个 2MB 的缓冲区中。因此,看起来它不是控制器的缓存,而是一些重要的值,会影响发送过程的速度。
如果我们谈论的是 Data-Out 命令,其中我们需要始终包含缓冲区,那么检查传输长度参数,它会影响缓冲区大小。当然,不要忘记磁盘数量,因为这个分配内存和控制器有关。
否则,这种情况的限制是磁盘速度,但当然它取决于控制器、磁盘、总线和许多其他参数。