svn commit: r309777 - head/sbin/nvmecontrol

Warner Losh imp at FreeBSD.org
Fri Dec 9 23:37:15 UTC 2016


Author: imp
Date: Fri Dec  9 23:37:14 2016
New Revision: 309777
URL: https://svnweb.freebsd.org/changeset/base/309777

Log:
  Implement Intel's log page 0xc1 (Read Command Latency Log) and page
  0xc1 (Write Command Latency Log).
  
  Sponsored By: Netflix, Inc

Modified:
  head/sbin/nvmecontrol/logpage.c

Modified: head/sbin/nvmecontrol/logpage.c
==============================================================================
--- head/sbin/nvmecontrol/logpage.c	Fri Dec  9 23:37:11 2016	(r309776)
+++ head/sbin/nvmecontrol/logpage.c	Fri Dec  9 23:37:14 2016	(r309777)
@@ -324,6 +324,47 @@ print_intel_temp_stats(void *buf, uint32
 	printf("Estimated Temperature Offset:   %ju C/K\n", (uintmax_t)temp->est_offset);
 }
 
+/*
+ * Format from Table 22, section 5.7 IO Command Latency Statistics.
+ * Read and write stats pages have identical encoding.
+ */
+static void
+print_intel_read_write_lat_log(void *buf, uint32_t size __unused)
+{
+	const char *walker = buf;
+	int i;
+
+	printf("Major:                         %d\n", le16dec(walker + 0));
+	printf("Minor:                         %d\n", le16dec(walker + 2));
+	for (i = 0; i < 32; i++)
+		printf("%4dus-%4dus:                 %ju\n", i * 32, (i + 1) * 32, (uintmax_t)le32dec(walker + 4 + i * 4));
+	for (i = 1; i < 32; i++)
+		printf("%4dms-%4dms:                 %ju\n", i, i + 1, (uintmax_t)le32dec(walker + 132 + i * 4));
+	for (i = 1; i < 32; i++)
+		printf("%4dms-%4dms:                 %ju\n", i * 32, (i + 1) * 32, (uintmax_t)le32dec(walker + 256 + i * 4));
+}
+
+static void
+print_intel_read_lat_log(void *buf, uint32_t size)
+{
+
+	printf("Intel Read Latency Log\n");
+	printf("======================\n");
+	print_intel_read_write_lat_log(buf, size);
+}
+
+static void
+print_intel_write_lat_log(void *buf, uint32_t size)
+{
+
+	printf("Intel Write Latency Log\n");
+	printf("=======================\n");
+	print_intel_read_write_lat_log(buf, size);
+}
+
+/*
+ * Table 19. 5.4 SMART Attributes
+ */
 static void
 print_intel_add_smart(void *buf, uint32_t size __unused)
 {
@@ -803,11 +844,15 @@ static struct logpage_function {
 	 sizeof(struct nvme_health_information_page)},
 	{NVME_LOG_FIRMWARE_SLOT,	NULL,	print_log_firmware,
 	 sizeof(struct nvme_firmware_page)},
+	{HGST_INFO_LOG,			"hgst",	print_hgst_info_log,
+	 DEFAULT_SIZE},
 	{INTEL_LOG_TEMP_STATS,		"intel", print_intel_temp_stats,
 	 sizeof(struct intel_log_temp_stats)},
-	{INTEL_LOG_ADD_SMART,		"intel", print_intel_add_smart,
+	{INTEL_LOG_READ_LAT_LOG,	"intel", print_intel_read_lat_log,
 	 DEFAULT_SIZE},
-	{HGST_INFO_LOG,			"hgst",	print_hgst_info_log,
+	{INTEL_LOG_WRITE_LAT_LOG,	"intel", print_intel_write_lat_log,
+	 DEFAULT_SIZE},
+	{INTEL_LOG_ADD_SMART,		"intel", print_intel_add_smart,
 	 DEFAULT_SIZE},
 	{0,				NULL,	NULL,	 0},
 };


More information about the svn-src-head mailing list