Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F148189346
D42660.id130568.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
5 KB
Referenced Files
None
Subscribers
None
D42660.id130568.diff
View Options
diff --git a/sys/dev/ena/ena.h b/sys/dev/ena/ena.h
--- a/sys/dev/ena/ena.h
+++ b/sys/dev/ena/ena.h
@@ -487,6 +487,7 @@
struct ena_stats_dev dev_stats;
struct ena_hw_stats hw_stats;
struct ena_admin_eni_stats eni_metrics;
+ struct ena_admin_ena_srd_info ena_srd_info;
uint64_t *customer_metrics_array;
enum ena_regs_reset_reason_types reset_reason;
diff --git a/sys/dev/ena/ena.c b/sys/dev/ena/ena.c
--- a/sys/dev/ena/ena.c
+++ b/sys/dev/ena/ena.c
@@ -166,6 +166,7 @@
static void ena_update_on_link_change(void *, struct ena_admin_aenq_entry *);
static void unimplemented_aenq_handler(void *, struct ena_admin_aenq_entry *);
static int ena_copy_eni_metrics(struct ena_adapter *);
+static int ena_copy_srd_metrics(struct ena_adapter *);
static int ena_copy_customer_metrics(struct ena_adapter *);
static void ena_timer_service(void *);
@@ -3307,6 +3308,12 @@
return (rc);
}
+static int
+ena_copy_srd_metrics(struct ena_adapter *adapter)
+{
+ return ena_com_get_ena_srd_info(adapter->ena_dev, &adapter->ena_srd_info);
+}
+
static int
ena_copy_customer_metrics(struct ena_adapter *adapter)
{
@@ -3569,6 +3576,9 @@
else if (ena_com_get_cap(adapter->ena_dev, ENA_ADMIN_ENI_STATS))
(void)ena_copy_eni_metrics(adapter);
+ if (ena_com_get_cap(adapter->ena_dev, ENA_ADMIN_ENA_SRD_INFO))
+ (void)ena_copy_srd_metrics(adapter);
+
ENA_LOCK_UNLOCK();
}
diff --git a/sys/dev/ena/ena_sysctl.c b/sys/dev/ena/ena_sysctl.c
--- a/sys/dev/ena/ena_sysctl.c
+++ b/sys/dev/ena/ena_sysctl.c
@@ -38,6 +38,7 @@
static void ena_sysctl_add_stats(struct ena_adapter *);
static void ena_sysctl_add_eni_metrics(struct ena_adapter *);
static void ena_sysctl_add_customer_metrics(struct ena_adapter *);
+static void ena_sysctl_add_srd_info(struct ena_adapter *);
static void ena_sysctl_add_tuneables(struct ena_adapter *);
static void ena_sysctl_add_irq_affinity(struct ena_adapter *);
/* Kernel option RSS prevents manipulation of key hash and indirection table. */
@@ -59,18 +60,46 @@
#define ENA_METRICS_MAX_SAMPLE_INTERVAL 3600
#define ENA_HASH_KEY_MSG_SIZE (ENA_HASH_KEY_SIZE * 2 + 1)
-#define SYSCTL_GSTRING_LEN 64
+#define SYSCTL_GSTRING_LEN 128
#define ENA_METRIC_ENI_ENTRY(stat, desc) { \
.name = #stat, \
.description = #desc, \
}
+#define ENA_STAT_ENTRY(stat, desc, stat_type) { \
+ .name = #stat, \
+ .description = #desc, \
+ .stat_offset = offsetof(struct ena_admin_##stat_type, stat) / sizeof(u64), \
+}
+
+#define ENA_STAT_ENA_SRD_ENTRY(stat, desc) \
+ ENA_STAT_ENTRY(stat, desc, ena_srd_stats)
+
struct ena_hw_metrics {
char name[SYSCTL_GSTRING_LEN];
char description[SYSCTL_GSTRING_LEN];
};
+struct ena_srd_metrics {
+ char name[SYSCTL_GSTRING_LEN];
+ char description[SYSCTL_GSTRING_LEN];
+ int stat_offset;
+};
+
+static const struct ena_srd_metrics ena_srd_stats_strings[] = {
+ ENA_STAT_ENA_SRD_ENTRY(
+ ena_srd_tx_pkts, Number of packets transmitted over ENA SRD),
+ ENA_STAT_ENA_SRD_ENTRY(
+ ena_srd_eligible_tx_pkts, Number of packets transmitted or could
+ have been transmitted over ENA SRD),
+ ENA_STAT_ENA_SRD_ENTRY(
+ ena_srd_rx_pkts, Number of packets received over ENA SRD),
+ ENA_STAT_ENA_SRD_ENTRY(
+ ena_srd_resource_utilization, Percentage of the ENA SRD resources
+ that are in use),
+};
+
static const struct ena_hw_metrics ena_hw_stats_strings[] = {
ENA_METRIC_ENI_ENTRY(
bw_in_allowance_exceeded, Inbound BW allowance exceeded),
@@ -91,6 +120,7 @@
#endif
#define ENA_CUSTOMER_METRICS_ARRAY_SIZE ARRAY_SIZE(ena_hw_stats_strings)
+#define ENA_SRD_METRICS_ARRAY_SIZE ARRAY_SIZE(ena_srd_stats_strings)
static SYSCTL_NODE(_hw, OID_AUTO, ena, CTLFLAG_RD | CTLFLAG_MPSAFE, 0,
"ENA driver parameters");
@@ -153,6 +183,9 @@
else if (ena_com_get_cap(dev, ENA_ADMIN_ENI_STATS))
ena_sysctl_add_eni_metrics(adapter);
+ if (ena_com_get_cap(adapter->ena_dev, ENA_ADMIN_ENA_SRD_INFO))
+ ena_sysctl_add_srd_info(adapter);
+
ena_sysctl_add_wd(adapter);
ena_sysctl_add_stats(adapter);
ena_sysctl_add_tuneables(adapter);
@@ -379,6 +412,47 @@
&admin_stats->no_completion, 0, "Commands not completed");
}
+static void
+ena_sysctl_add_srd_info(struct ena_adapter *adapter)
+{
+ device_t dev;
+
+ struct sysctl_oid *ena_srd_info;
+ struct sysctl_oid_list *srd_list;
+
+ struct sysctl_ctx_list *ctx;
+ struct sysctl_oid *tree;
+ struct sysctl_oid_list *child;
+
+ struct ena_admin_ena_srd_stats *srd_stats_ptr;
+ struct ena_srd_metrics cur_stat_strings;
+
+ int i;
+
+ dev = adapter->pdev;
+
+ ctx = device_get_sysctl_ctx(dev);
+ tree = device_get_sysctl_tree(dev);
+ child = SYSCTL_CHILDREN(tree);
+
+ ena_srd_info = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "ena_srd_info",
+ CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "ENA's SRD information");
+ srd_list = SYSCTL_CHILDREN(ena_srd_info);
+
+ SYSCTL_ADD_U64(ctx, srd_list, OID_AUTO, "ena_srd_mode",
+ CTLFLAG_RD, &adapter->ena_srd_info.flags, 0,
+ "Describes which ENA-express features are enabled");
+
+ srd_stats_ptr = &adapter->ena_srd_info.ena_srd_stats;
+
+ for (i = 0 ; i < ENA_SRD_METRICS_ARRAY_SIZE; i++) {
+ cur_stat_strings = ena_srd_stats_strings[i];
+ SYSCTL_ADD_U64(ctx, srd_list, OID_AUTO, cur_stat_strings.name,
+ CTLFLAG_RD, (u64 *)srd_stats_ptr + cur_stat_strings.stat_offset,
+ 0, cur_stat_strings.description);
+ }
+}
+
static void
ena_sysctl_add_customer_metrics(struct ena_adapter *adapter)
{
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Mar 17, 9:21 AM (9 h, 15 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29801562
Default Alt Text
D42660.id130568.diff (5 KB)
Attached To
Mode
D42660: ena: Support srd metrics with sysctl
Attached
Detach File
Event Timeline
Log In to Comment