Google工程师的一个新的Linux内核补丁解决了一个问题,这个问题是由我们许多人可能没有体验过的情况引起的,那就是一台服务器当中插着太多的NVMe驱动器……这个问题是由正确关闭一个驱动器所需的相对较长的时间引起的:显然,单个最长时间达4.5秒。
还记得Sun公司的X4500存储服务器吗,它的代号为Thumper,它出现时确实很激进:一个3U的双处理器服务器密密麻麻装了48个驱动器托架。当他们不得不重新启动时,他们需要很长的时间。
如果你有一个有16个驱动器的存储服务器,每次重启都会浪费72秒的时间。虽然也就是泡杯咖啡的时间,但仍然很烦人--因为这完全是不必要的。
问题主要出在内核的驱动器关闭功能是同步的:对于每个驱动器,它都会等待关闭命令完成,然后再进行下一个。新的内核补丁做了完全相同的事情,但改变了调用的方式,使其成为异步的。它向第一个驱动器发出调用,然后立即转到下一个,并按顺序进行。当它们都返回所需的状态时,工作就完成了。
虽然这并不能直接帮助我们中的大多数人,但有时这类变化会产生非常令人愉快的作用。例如,有一个为内核开发者提供的工具叫kexec,它允许一个内核将另一个内核加载到内存中并启动它。不仅仅如此,这还可以加速Linux的重新启动。由于计算机在加载操作系统之前必须在其读取固件过程中花费一分钟左右的时间,进行一些自我测试等等,如果能绕过这一点,直接从一个操作系统重启到另一个,就可以把时间缩短到几秒钟而不是几分钟。