Re: [PATCH 3/6] tools/kvm_stat: cache compiled regular expression

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 14.02.2018 22:45, Stefan Raspl wrote:
> From: Stefan Raspl <stefan.raspl@xxxxxxxxxx>
> 
> Should save us a couple of cycles.

Are you sure, the wiki says otherwise?


Note

The compiled versions of the most recent patterns passed to re.match(),
re.search() or re.compile() are cached, so programs that use only a few
regular expressions at a time needn’t worry about compiling regular
expressions.

> 
> Signed-off-by: Stefan Raspl <raspl@xxxxxxxxxxxxxxxxxx>
> ---
>  tools/kvm/kvm_stat/kvm_stat | 18 +++++++++++-------
>  1 file changed, 11 insertions(+), 7 deletions(-)
> 
> diff --git a/tools/kvm/kvm_stat/kvm_stat b/tools/kvm/kvm_stat/kvm_stat
> index d7c80ac0374d..9f7e21cd5d19 100755
> --- a/tools/kvm/kvm_stat/kvm_stat
> +++ b/tools/kvm/kvm_stat/kvm_stat
> @@ -480,7 +480,7 @@ class Provider(object):
>          """Indicate whether field is valid according to fields_filter."""
>          if not fields_filter:
>              return True
> -        return re.match(fields_filter, field) is not None
> +        return fields_filter.match(field) is not None
> 
>      @staticmethod
>      def walkdir(path):
> @@ -811,9 +811,10 @@ class Stats(object):
> 
>      """
>      def __init__(self, options):
> -        self.providers = self._get_providers(options)
>          self._pid_filter = options.pid
>          self._fields_filter = options.fields
> +        self._fields_filter_comp = re.compile(options.fields)
> +        self.providers = self._get_providers(options)
>          self.values = {}
> 
>      def _get_providers(self, options):
> @@ -821,10 +822,12 @@ class Stats(object):
>          providers = []
> 
>          if options.debugfs:
> -            providers.append(DebugfsProvider(options.pid, options.fields,
> +            providers.append(DebugfsProvider(self._pid_filter,
> +                                             self._fields_filter_comp,
>                                               options.dbgfs_include_past))
>          if options.tracepoints or not providers:
> -            providers.append(TracepointProvider(options.pid, options.fields))
> +            providers.append(TracepointProvider(self._pid_filter,
> +                                                self._fields_filter_comp))
> 
>          return providers
> 
> @@ -834,7 +837,7 @@ class Stats(object):
>          # also clear the cache of old values.
>          self.values = {}
>          for provider in self.providers:
> -            provider.update_fields(self._fields_filter)
> +            provider.update_fields(self._fields_filter_comp)
> 
>      def reset(self):
>          self.values = {}
> @@ -849,6 +852,7 @@ class Stats(object):
>      def fields_filter(self, fields_filter):
>          if fields_filter != self._fields_filter:
>              self._fields_filter = fields_filter
> +            self._fields_filter_comp = re.compile(fields_filter)
>              self._update_provider_filters()
> 
>      @property
> @@ -1040,7 +1044,7 @@ class Tui(object):
>              self.stats.fields_filter = DEFAULT_REGEX
> 
>          elif self.stats.fields_filter == DEFAULT_REGEX:
> -            self.stats.fields_filter = None
> +            self.stats.fields_filter = ''
> 
>      def _update_pid(self, pid):
>          """Propagates pid selection to stats object."""
> @@ -1548,7 +1552,7 @@ def main():
>      stats = Stats(options)
> 
>      if options.fields == 'help':
> -        stats.fields_filter = None
> +        stats.fields_filter = ''
>          event_list = []
>          for key in stats.get().keys():
>              event_list.append(key.split('(', 1)[0])
> 


Attachment: signature.asc
Description: OpenPGP digital signature


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux