阿里云文件存储团队从2018年1月开始在阿里云的各个可用区正式商业化SMB协议支持,给阿里云用户提供高性能和高可用的Windows文件共享服务。
和本地文件系统相比,网络文件系统的优势是支持多客户端共享,同时提供高可用性和高吞吐能力。但是由于网络延迟,多客户端访问时文件状态的通知维护开销,以及与本地文件系统缓存策略的不同,如果应用对于IO延迟比较敏感,为了获得高性能,可能需要用户对文件系统客户端的参数甚至是应用自身进行调优。典型的调优手段包括提高单个IO的大小、增加IO并发度、避免不必要的文件锁和改变客户端缓存策略等。
处于申请公测阶段,对应的SMB协议的日志分析功能也正在开发中,并且我们希望能够在不久的将来通过IO模式分析为用户主动提供一些优化的建议。但是从根本上来说,由于原来的应用和代码信息在服务端是不可见的,所以服务端的信息往往是不足的;而且应用的调优也一般是一个反复迭代的过程,客户端结合应用信息后得到的反馈也会更为直接。这些都需要用户在客户端能够得到有效的访问SMB服务的性能数据。微软在SMB协议客户端内置了性能计数器和tracing支持,并提供了性能监控和tracing工具。本文介绍一下通过Windows 性能监视器(Perfmon) 使用SMB 客户端性能计数器(Performance Counters)的方式,希望用户通过这个工具能够分析问题提高应用性能,从而更好的利用我们服务的能力,或者通过获得的数据向我们提供性能和功能上的意见反馈。
perfmon + 回车来启动,一般用administrator身份来使用。以Windows Server 2016中文版为例,perfmon启动之后界面如下。
接着我们可以加入SMB相关性能计数器对性能指标进行监控,可行的方式有几种,最简单的是点击下面界面中性能监视器的"+"图标来将计数器加入性能监视器进行实时的性能监控。
选择需要收集的SMB client 计数器,可以包括读写和元数据IOPS,带宽,读写延迟等各种计数器,需要注意的是只有在Window版本不低于Windows 8 / Windows Server 2012时才能有相关的支持。
指定SMB client 计数器和具体的SMB share(对象实例)之后性能监视器就可以开始实时采样,并通过不同的形式展示数据。下图是对某一个采样窗口数据采样的截屏,可以看出这个时候我们在运行的应用的读写尺寸不大,平均只有103KB,而且单位时间请求数量很低,平均每秒数据请求只有176次,所以只能只能利用18.2 MB/s 的带宽。
下图中展示了如何修改性能监视器的基本属性,比较有用的是是否自动循环采样,采样间隔和每次运行的总时间,一般来说在计数器不是太多的情况下,1秒或者更大的采样间隔对系统的侵入性很小,对性能的影响可以忽略不计。
我们的例子是类似于一个文件备份的应用,我们通过Perfmon和分析文件请求类型发现由于小文件(< 100KB)数量很多, 而且只有一个IO线程导致读写带宽利用不够,影响了系统性能,这个场景里我们不能直接改变读写的大小,但是可以去增加读写的并发度。经过将IO线程数量增加到8个,下图显示了调优后的效果,可以看到每秒钟的请求数量大规模提升,导致IO带宽被更好的利用。在下面这个采样窗口里数据请求提高到了每秒750个,利用的带宽达到了133MB/s。
用户也可以建立自己的数据收集器集而不是直接采用性能监视器的缺省数据收集器集,这样用户可以更好的控制设置,并保存计数器的数据。
用户可以进一步的设置数据收集器集的属性,除了前面提过的采用间隔的参数外,输出日志的格式设置是另外一个值得注意的功能。收集到的数据收集器的数据可以被存为二进制格式和CSV等格式,可以之后在perform中载入进行进一步分析,也可以通过用户自己的程序和脚本进行后处理。这个数据收集器集的输出地址也已经在图中被标出来了,用户可以在里面找到对应的设置和日志文件。
在用户自定义的数据收集器集设置以后,可以通过下图中的图标控制数据收集的开始和停止。
希望本文能够对阿里云NAS服务的用户以及其他对Windows 性能分析有兴趣的读者有所帮助。我们会在后面接着介绍一些其它的Windows性能和协议分析相关工具的使用。