【发布时间】:2017-06-28 08:43:54
【问题描述】:
这可能只是我的 google-fu 无法正常工作的情况,但我正在尝试获取一组 Windows 服务器之间的准确响应时间。我可以在 Powershell 中使用以下类型:
Test-Connection -ComputerName google.com -count 1
但是,这只会给您以毫秒为单位的响应时间:
Source Destination IPV4Address IPV6Address Bytes Time(ms)
------ ----------- ----------- ----------- ----- --------
ComputerName google.com 172.217.26.14 32 26
我们正在使用的应用程序需要非常快的响应时间(低于 1 毫秒),所以如果我作为一个简单的外行可以在微秒内测量它,那就太好了。我尝试了类似以下的方法:
$startTime = Get-Date
$testConnection = Test-Connection -ComputerName google.com -count 1
$stopTime = Get-Date
$responseTime = $stopTime - $startTime
但这从 20-30 毫秒到 120 毫秒,大概是因为我的机器必须读取日期并计算差异,这确实需要几毫秒。
我假设某种形式的应用程序(可能是 WireShark?)可以在微秒内测量,但我找不到这个。我知道,例如 Active Directory 登录时间戳记录甚至可以低至纳秒,因此它应该在 Powershell 脚本框架内是可行的。
【问题讨论】:
-
正如您所指出的,您几乎毫无疑问地测量了错误的东西,因为您测量的是 cmdlet 执行的时间长度加上各种开销。您可以通过从返回值中检索 ping 状态时间来更接近金属,但这仍然是衡量协议的结果,就传输的数据和其他考虑因素而言,该协议可能与您的实现无关。 Wireshark 在行动中捕获和分析您的协议将是一个更现实的衡量标准。
-
啊,是的,我只是想看看使用 Test-Connection 输出(以毫秒为单位)以及这样做以及使用之前和之后的时间戳的区别是巨大的差异。如果它只有几微秒那么嗯,但事实证明它比预期的要大:) 我还没有深入了解 WireShark,但你会知道其中使用的时间戳是否可以以微秒为单位测量吗?
标签: windows powershell server