[ovs-dev] [PATCH v4 2/2] dpctl: dpif: allow viewing and configuring dp cache sizes
Eelco Chaudron
echaudro at redhat.com
Tue Jun 1 10:27:13 UTC 2021
On 1 Jun 2021, at 12:13, Paolo Valerio wrote:
> Eelco Chaudron <echaudro at redhat.com> writes:
>
>> This patch adds a general way of viewing/configuring datapath
>> cache sizes. With an implementation for the netlink interface.
>>
>> The ovs-dpctl/ovs-appctl show commands will display the
>> current cache sizes configured:
>>
>> ovs-dpctl show
>> system at ovs-system:
>> lookups: hit:25 missed:63 lost:0
>> flows: 0
>> masks: hit:282 total:0 hit/pkt:3.20
>> cache: hit:4 hit rate:4.54%
>> caches:
>> masks-cache: size: 256
>> port 0: ovs-system (internal)
>> port 1: br-int (internal)
>> port 2: genev_sys_6081 (geneve: packet_type=ptap)
>> port 3: br-ex (internal)
>> port 4: eth2
>> port 5: sw0p1 (internal)
>> port 6: sw0p3 (internal)
>>
>> A specific cache can be configured as follows:
>>
>> ovs-appctl dpctl/cache-set-size DP CACHE SIZE
>> ovs-dpctl cache-set-size DP CACHE SIZE
>>
>> For example to disable the cache do:
>>
>> $ ovs-dpctl cache-set-size system at ovs-system masks-cache 0
>> Setting cache size successful, new size 0.
>>
>> Signed-off-by: Eelco Chaudron <echaudro at redhat.com>
>>
>> ---
>> v2: - Changed precision to 2 digits
>> - Handle missing kernel feature at netlink level
>> v3: - Rebase on the latest master branch
>> v4: - Fixed commit message
>> - Fix issue with resetting user_features
>>
>> datapath/linux/compat/include/linux/openvswitch.h | 3 -
>> lib/dpctl.c | 120 +++++++++++++++++++++
>> lib/dpctl.man | 14 ++
>> lib/dpif-netdev.c | 4 +
>> lib/dpif-netlink.c | 113 ++++++++++++++++++++
>> lib/dpif-provider.h | 20 ++++
>> lib/dpif.c | 32 ++++++
>> lib/dpif.h | 7 +
>> tests/system-traffic.at | 36 ++++++
>> utilities/ovs-dpctl.c | 4 +
>> 10 files changed, 352 insertions(+), 1 deletion(-)
>>
>> diff --git a/datapath/linux/compat/include/linux/openvswitch.h b/datapath/linux/compat/include/linux/openvswitch.h
>> index 690d78871..35f32d20c 100644
>> --- a/datapath/linux/compat/include/linux/openvswitch.h
>> +++ b/datapath/linux/compat/include/linux/openvswitch.h
>> @@ -105,6 +105,7 @@ enum ovs_datapath_attr {
>> OVS_DP_ATTR_MEGAFLOW_STATS, /* struct ovs_dp_megaflow_stats */
>> OVS_DP_ATTR_USER_FEATURES, /* OVS_DP_F_* */
>> OVS_DP_ATTR_PAD,
>> + OVS_DP_ATTR_MASKS_CACHE_SIZE,
>> __OVS_DP_ATTR_MAX
>> };
>>
>> @@ -122,7 +123,7 @@ struct ovs_dp_megaflow_stats {
>> __u64 n_mask_hit; /* Number of masks used for flow lookups. */
>> __u32 n_masks; /* Number of masks for the datapath. */
>> __u32 pad0; /* Pad for future expension. */
>> - __u64 n_cache_hit; /* Number of cache matches for flow lookups. */
>> + __u64 n_cache_hit; /* Number of cache matches for flow lookups. */
>
> the previous patch introduces this member, was it intentional to replace
> spaces with tabs in this patch?
>
Yes, this was a comment from Flavio in the previous revision.
>> __u64 pad1; /* Pad for future expension. */
>> };
>
> [...]
>
>> +static int
>> +dpif_netlink_cache_set_size(struct dpif *dpif_, uint32_t level, uint32_t size)
>> +{
>> + int error;
>> + struct ofpbuf *bufp;
>> + struct dpif_netlink_dp request, reply;
>> + struct dpif_netlink *dpif = dpif_netlink_cast(dpif_);
>> +
>> + size = ROUND_UP_POW2(size);
>> +
>> + if (level != 0) {
>> + return EINVAL;
>> + }
>> +
>> + dpif_netlink_dp_init(&request);
>> + request.cmd = OVS_DP_CMD_SET;
>> + request.name = dpif_->base_name;
>> + request.dp_ifindex = dpif->dp_ifindex;
>> + request.cache_size = size;
>> +
>
> I don't see any explicit reference to user_features.
> Am I missing something?
Nope, I forgot to do an stg refresh :( I will sent out a v5, thanks for noticing.
>> + error = dpif_netlink_dp_transact(&request, &reply, &bufp);
>> + if (!error) {
>> + ofpbuf_delete(bufp);
>> + if (reply.cache_size != size) {
>> + return EINVAL;
>> + }
>> + }
>> +
>> + return error;
>> +}
>> +
More information about the dev
mailing list