xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Yi Sun <yi.y.sun@linux.intel.com>
To: Jan Beulich <jbeulich@suse.com>
Cc: andrew.cooper3@citrix.com, xen-devel@lists.xenproject.org,
	wei.liu2@citrix.com, chao.p.peng@linux.intel.com,
	roger.pau@citrix.com
Subject: Re: [PATCH v4 07/15] x86: implement set value flow for MBA
Date: Thu, 5 Oct 2017 12:48:12 +0800	[thread overview]
Message-ID: <20171005044812.GH11006@yi.y.sun> (raw)
In-Reply-To: <59D478D20200007800107951@prv-mh.provo.novell.com>

On 17-10-03 23:59:46, Jan Beulich wrote:
> >>> Yi Sun <yi.y.sun@linux.intel.com> 09/29/17 4:58 AM >>>
> >On 17-09-28 05:36:11, Jan Beulich wrote:
> >> >>> On 23.09.17 at 11:48, <yi.y.sun@linux.intel.com> wrote:
> >> > This patch implements set value flow for MBA including its callback
> >> > function and domctl interface.
> >> > 
> >> > It also changes the memebers in 'cos_write_info' to transfer the
> >> > feature array, feature properties array and value array. Then, we
> >> > can write all features values on the cos id into MSRs.
> >> > 
> >> > Because multiple features may co-exist, we need handle all features to write
> >> > values of them into a COS register with new COS ID. E.g:
> >> > 1. L3 CAT and MBA co-exist.
> >> > 2. Dom1 and Dom2 share a same COS ID (2). The L3 CAT CBM of Dom1 is 0x1ff,
> >> >    the MBA Thrtle of Dom1 is 0xa.
> >> > 3. User wants to change MBA Thrtl of Dom1 to be 0x14. Because COS ID 2 is
> >> >    used by Dom2 too, we have to pick a new COS ID 3. The values of Dom1 on
> >> >    COS ID 3 are all default values as below:
> >> >            ---------
> >> >            | COS 3 |
> >> >            ---------
> >> >    L3 CAT  | 0x7ff |
> >> >            ---------
> >> >    MBA     | 0x0   |
> >> >            ---------
> >> > 4. After setting, the L3 CAT CBM value of Dom1 should be kept and the new MBA
> >> >    Thrtl is set. So, the values on COS ID 3 should be below.
> >> >            ---------
> >> >            | COS 3 |
> >> >            ---------
> >> >    L3 CAT  | 0x1ff |
> >> >            ---------
> >> >    MBA     | 0x14  |
> >> >            ---------
> >> > 
> >> > So, we should write all features values into their MSRs. That requires the
> >> > feature array, feature properties array and value array are input.
> >> 
> >> How is this last aspect (and the respective changes) related to MBA?
> >> I.e. why isn't this needed with the (also independent but possibly
> >> co-existing) L2/L3 CAT features?
> >> 
> >I tried to introduce this in L2 CAT patch set but did not succeed. As there is
> >no HW that L2 CAT and L3 CAT co-exist so far, I did not insist on this.
> 
> Hmm, I'm afraid this wasn't then made clear enough to understand. I would
> certainly not have been against something that could in theory occur with
> L2/L3 CAT alone. In any event this means you don't want to mix this into this
> MBA specific change here.
> 
Anyway, I think you suggest to split this as a new patch, right?

> >> >  static void do_write_psr_msrs(void *data)
> >> >  {
> >> >      const struct cos_write_info *info = data;
> >> > -    struct feat_node *feat = info->feature;
> >> > -    const struct feat_props *props = info->props;
> >> > -    unsigned int i, cos = info->cos, cos_num = props->cos_num;
> >> > +    unsigned int i, index = 0, cos = info->cos;
> >> > +    const uint32_t *val_array = info->val;
> >> >  
> >> > -    for ( i = 0; i < cos_num; i++ )
> >> > +    for ( i = 0; i < ARRAY_SIZE(feat_props); i++ )
> >> >      {
> >> > -        if ( feat->cos_reg_val[cos * cos_num + i] != info->val[i] )
> >> > +        struct feat_node *feat = info->features[i];
> >> > +        const struct feat_props *props = info->props[i];
> >> > +        unsigned int cos_num, j;
> >> > +
> >> > +        if ( !feat || !props )
> >> > +            continue;
> >> > +
> >> > +        cos_num = props->cos_num;
> >> > +        if ( info->array_len < index + cos_num )
> >> > +            return;
> >> > +
> >> > +        for ( j = 0; j < cos_num; j++ )
> >> >          {
> >> > -            feat->cos_reg_val[cos * cos_num + i] = info->val[i];
> >> > -            props->write_msr(cos, info->val[i], props->type[i]);
> >> > +            if ( feat->cos_reg_val[cos * cos_num + j] != val_array[index + j] )
> >> > +                feat->cos_reg_val[cos * cos_num + j] =
> >> > +                    props->write_msr(cos, val_array[index + j], props->type[j]);
> >> 
> >> This renders partly useless the check: If hardware can alter the
> >> value, repeatedly requesting the same value to be written will
> >> no longer guarantee the MSR write to be skipped. If hardware
> >> behavior can't be predicted you may want to consider recording
> >> both the value in found by reading back the register written and
> >> the value that was written - a match with either would eliminate
> >> the need to do the write.
> >> 
> >The hardware behavior is explicitly defined by SDM and mentioned in
> >'xl-psr.markdown' and 'intel_psr_mba.pandoc'. User should know that HW
> >can alter MBA value if the value is not valid.
> 
> So if hardware behavior is fully defined, why don't you pre-adjust what is
> to be written to the value hardware would alter it to?
> 
In previous version of MBA patch set, I pre-adjust the value in 'mba_check_thrtl'.
But Roger did not like that. So, the pre-adjust codes are removed.

> >This check is not only for MBA but also for CAT features that the HW
> >cannot alter CAT value.
> 
> I don't understand this part.
> 
I mean the check here are for all features so we cannot remove it.

> > Although this check is not a critical check,
> >it can prevent some non-necessary MSR write.
> 
> That's my point - while previously all unnecessary writes were avoided,
> you now avoid only some.
> 
Without the pre-adjust codes in 'mba_check_thrtl', if user inputs value, e.g.
11/22/33/..., this check cannot prevent the write action. So, only some can
be avoided in current codes.

> >If you still think we should handle the case that user inputs an invalid
> >value every time, I think we can restore the codes in 'mba_check_thrtl'
> >to change invalid value to valid one, then insert the valid value into
> >val_array. Then, this check is always valid.
> 
> I don't think I've asked to deal with "invalid" values here (which should be
> rejected anyway, but that's a different topic). Values adjusted by hardware
> don't fall into the "invalid" category for me.
> 
If the pre-adjust codes in 'mba_check_thrtl' are restored, all values written
to HW are valid.

> Jan

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

  reply	other threads:[~2017-10-05  4:49 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-23  9:48 [PATCH v4 00/15] Enable Memory Bandwidth Allocation in Xen Yi Sun
2017-09-23  9:48 ` [PATCH v4 01/15] docs: create Memory Bandwidth Allocation (MBA) feature document Yi Sun
2017-09-25 15:13   ` Roger Pau Monné
2017-09-23  9:48 ` [PATCH v4 02/15] Rename PSR sysctl/domctl interfaces and xsm policy to make them be general Yi Sun
2017-09-25 16:15   ` Roger Pau Monné
2017-09-26  5:15     ` Yi Sun
2017-09-26 14:19   ` Wei Liu
2017-09-28  2:12     ` Yi Sun
2017-09-28  8:34       ` Wei Liu
2017-09-28 10:21   ` Jan Beulich
2017-09-29  1:34     ` Yi Sun
2017-10-04  5:47       ` Jan Beulich
2017-09-23  9:48 ` [PATCH v4 03/15] x86: rename 'cbm_type' to 'psr_type' to make it general Yi Sun
2017-09-28 10:25   ` Jan Beulich
2017-09-29  1:35     ` Yi Sun
2017-09-23  9:48 ` [PATCH v4 04/15] x86: implement data structure and CPU init flow for MBA Yi Sun
2017-09-26  8:38   ` Roger Pau Monné
2017-09-28 10:27     ` Jan Beulich
2017-09-28 11:00   ` Jan Beulich
2017-09-29  1:53     ` Yi Sun
2017-10-04  5:52       ` Jan Beulich
2017-10-05  4:42         ` Yi Sun
2017-10-05  8:49           ` Jan Beulich
2017-10-05 10:08             ` Yi Sun
2017-09-23  9:48 ` [PATCH v4 05/15] x86: implement get hw info " Yi Sun
2017-09-26  8:46   ` Roger Pau Monné
2017-09-26 11:49     ` Jan Beulich
2017-09-23  9:48 ` [PATCH v4 06/15] x86: implement get value interface " Yi Sun
2017-09-28 11:12   ` Jan Beulich
2017-09-23  9:48 ` [PATCH v4 07/15] x86: implement set value flow " Yi Sun
2017-09-26  9:39   ` Roger Pau Monné
2017-09-28  2:39     ` Yi Sun
2017-09-28 11:15       ` Jan Beulich
2017-09-28 11:36   ` Jan Beulich
2017-09-29  2:56     ` Yi Sun
2017-10-04  5:59       ` Jan Beulich
2017-10-05  4:48         ` Yi Sun [this message]
2017-10-05  8:39           ` Roger Pau Monné
2017-10-05  9:39             ` Jan Beulich
2017-10-05 10:10               ` Yi Sun
2017-10-05  8:55           ` Jan Beulich
2017-10-05 10:32             ` Yi Sun
2017-09-23  9:48 ` [PATCH v4 08/15] tools: create general interfaces to support psr allocation features Yi Sun
2017-09-26 10:11   ` Roger Pau Monné
2017-09-23  9:48 ` [PATCH v4 09/15] tools: implement the new libxc get hw info interface Yi Sun
2017-09-26 10:22   ` Roger Pau Monné
2017-09-23  9:48 ` [PATCH v4 10/15] tools: implement the new libxl " Yi Sun
2017-09-26 10:54   ` Roger Pau Monné
2017-09-23  9:48 ` [PATCH v4 11/15] tools: implement the new xl " Yi Sun
2017-09-26 11:19   ` Roger Pau Monné
2017-09-23  9:48 ` [PATCH v4 12/15] tools: rename 'xc_psr_cat_type' to 'xc_psr_type' Yi Sun
2017-09-26 11:21   ` Roger Pau Monné
2017-09-23  9:48 ` [PATCH v4 13/15] tools: implement new generic get value interface and MBA get value command Yi Sun
2017-09-26 11:34   ` Roger Pau Monné
2017-09-23  9:48 ` [PATCH v4 14/15] tools: implement new generic set value interface and MBA set " Yi Sun
2017-09-26 11:39   ` Roger Pau Monné
2017-09-28  2:46     ` Yi Sun
2017-09-23  9:48 ` [PATCH v4 15/15] docs: add MBA description in docs Yi Sun
2017-09-26 11:45   ` Roger Pau Monné
2017-09-26 11:48 ` [PATCH v4 00/15] Enable Memory Bandwidth Allocation in Xen Roger Pau Monné
2017-09-28  2:20   ` Yi Sun
2017-09-28 15:57 ` Wei Liu
2017-09-29  2:58   ` Yi Sun
2017-09-29  8:02     ` Wei Liu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20171005044812.GH11006@yi.y.sun \
    --to=yi.y.sun@linux.intel.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=chao.p.peng@linux.intel.com \
    --cc=jbeulich@suse.com \
    --cc=roger.pau@citrix.com \
    --cc=wei.liu2@citrix.com \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).