当我优化我们所有的服务器时,我注意到大多数性能瓶颈都与硬盘读/写速度直接相关。
我想知道的是,我可以对 Windows / 注册表 / 设备驱动程序进行任何调整来提高硬盘的 I/O 速度吗?
(我们所有的服务器都运行 Windows 2003 或 Windows 2008)
非常感谢您的所有建议!
谢谢!
答案1
确保你的读写缓存已启用且足够大。缓存的作用至关重要。
答案2
如果您的 RAID 是镜像,那么镜像 + 剥离将加快速度。不过您需要购买更多驱动器。
答案3
RAID 10 15K 磁盘,但显然这涉及财务支出和重建/迁移工作。
说实话,我会避免过度优化服务器,除非性能瓶颈真的导致问题。您所做的每项优化都是某种权衡,您需要问自己这种权衡是否值得。对于服务器,我总是乐于接受“足够好但不一定出色”的性能,如果它意味着更好的稳定性和可靠性。
答案4
我建议不要尝试调整 Windows 执行 I/O 的方式,一些聪明人已经对此进行了大量思考和测试。尽可能地优化,涵盖许多不同的场景。
远程复制的另一项增强功能是 SMB2 文件系统驱动程序 srv2.sys 发出的流水线 I/O,这是 Windows Vista 和 Windows Server 2008 的新功能。与原始 SMB 实现通过网络发出 60KB I/O 不同,SMB2 发出流水线 64KB I/O,这样当它从应用程序接收到大型 I/O 时,它将同时发出多个 64KB I/O,从而使数据以更少的延迟停顿流入或流出远程系统。
复制引擎还会发出四个初始 I/O,大小从 128KB 到 1MB 不等,具体取决于要复制的文件的大小,这会触发缓存管理器预读线程发出大型 I/O。SP1 中对缓存管理器所做的平台更改使其在预读和后写时都执行更大的 I/O。更大的 I/O 之所以可能,是因为原始 Vista I/O 系统已完成工作以支持大于 64KB 的 I/O,这是以前版本的 Windows 的限制。更大的 I/O 还可以提高本地副本的性能,因为磁盘访问和磁盘寻道更少,并且它使缓存管理器后写线程能够更好地跟上内存填充复制文件数据的速度。这减少了(但不一定消除)导致在复制过程中丢弃活动内存内容的内存压力。最后,对于远程副本,大型 I/O 允许 SMB2 驱动程序使用流水线。缓存管理器发出的读取 I/O 是应用程序发出的 I/O 大小的两倍,在 Vista 上最大为 2MB,在 Server 2008 上最大为 16MB;写入 I/O 在 Vista 上最大为 1MB,在 Server 2008 上最大为 32MB。
如果你能将 2003 服务器升级到 2008 并且客户端运行 Vista,那么你就不会快点I/O,但你可能只需要更高效输入/输出。
话虽如此,研究其他答案中提到的硬件解决方案可能更容易、更好。