1 /* SPDX-License-Identifier: GPL-2.0 2 * 3 * IO cost model based controller. 4 * 5 * Copyright (C) 2019 Tejun Heo <tj@kernel.org> 6 * Copyright (C) 2019 Andy Newell <newella@fb.com> 7 * Copyright (C) 2019 Facebook 8 * 9 * One challenge of controlling IO resources is the lack of trivially 10 * observable cost metric. This is distinguished from CPU and memory where 11 * wallclock time and the number of bytes can serve as accurate enough 12 * approximations. 13 * 14 * Bandwidth and iops are the most commonly used metrics for IO devices but 15 * depending on the type and specifics of the device, different IO patterns 16 * easily lead to multiple orders of magnitude variations rendering them 17 * useless for the purpose of IO capacity distribution. While on-device 18 * time, with a lot of clutches, could serve as a useful approximation for 19 * non-queued rotational devices, this is no longer viable with modern 20 * devices, even the rotational ones. 21 * 22 * While there is no cost metric we can trivially observe, it isn't a 23 * complete mystery. For example, on a rotational device, seek cost 24 * dominates while a contiguous transfer contributes a smaller amount 25 * proportional to the size. If we can characterize at least the relative 26 * costs of these different types of IOs, it should be possible to 27 * implement a reasonable work-conserving proportional IO resource 28 * distribution. 29 * 30 * 1. IO Cost Model 31 * 32 * IO cost model estimates the cost of an IO given its basic parameters and 33 * history (e.g. the end sector of the last IO). The cost is measured in 34 * device time. If a given IO is estimated to cost 10ms, the device should 35 * be able to process ~100 of those IOs in a second. 36 * 37 * Currently, there's only one builtin cost model - linear. Each IO is 38 * classified as sequential or random and given a base cost accordingly. 39 * On top of that, a size cost proportional to the length of the IO is 40 * added. While simple, this model captures the operational 41 * characteristics of a wide varienty of devices well enough. Default 42 * parameters for several different classes of devices are provided and the 43 * parameters can be configured from userspace via 44 * /sys/fs/cgroup/io.cost.model. 45 * 46 * If needed, tools/cgroup/iocost_coef_gen.py can be used to generate 47 * device-specific coefficients. 48 * 49 * 2. Control Strategy 50 * 51 * The device virtual time (vtime) is used as the primary control metric. 52 * The control strategy is composed of the following three parts. 53 * 54 * 2-1. Vtime Distribution 55 * 56 * When a cgroup becomes active in terms of IOs, its hierarchical share is 57 * calculated. Please consider the following hierarchy where the numbers 58 * inside parentheses denote the configured weights. 59 * 60 * root 61 * / \ 62 * A (w:100) B (w:300) 63 * / \ 64 * A0 (w:100) A1 (w:100) 65 * 66 * If B is idle and only A0 and A1 are actively issuing IOs, as the two are 67 * of equal weight, each gets 50% share. If then B starts issuing IOs, B 68 * gets 300/(100+300) or 75% share, and A0 and A1 equally splits the rest, 69 * 12.5% each. The distribution mechanism only cares about these flattened 70 * shares. They're called hweights (hierarchical weights) and always add 71 * upto 1 (WEIGHT_ONE). 72 * 73 * A given cgroup's vtime runs slower in inverse proportion to its hweight. 74 * For example, with 12.5% weight, A0's time runs 8 times slower (100/12.5) 75 * against the device vtime - an IO which takes 10ms on the underlying 76 * device is considered to take 80ms on A0. 77 * 78 * This constitutes the basis of IO capacity distribution. Each cgroup's 79 * vtime is running at a rate determined by its hweight. A cgroup tracks 80 * the vtime consumed by past IOs and can issue a new IO if doing so 81 * wouldn't outrun the current device vtime. Otherwise, the IO is 82 * suspended until the vtime has progressed enough to cover it. 83 * 84 * 2-2. Vrate Adjustment 85 * 86 * It's unrealistic to expect the cost model to be perfect. There are too 87 * many devices and even on the same device the overall performance 88 * fluctuates depending on numerous factors such as IO mixture and device 89 * internal garbage collection. The controller needs to adapt dynamically. 90 * 91 * This is achieved by adjusting the overall IO rate according to how busy 92 * the device is. If the device becomes overloaded, we're sending down too 93 * many IOs and should generally slow down. If there are waiting issuers 94 * but the device isn't saturated, we're issuing too few and should 95 * generally speed up. 96 * 97 * To slow down, we lower the vrate - the rate at which the device vtime 98 * passes compared to the wall clock. For example, if the vtime is running 99 * at the vrate of 75%, all cgroups added up would only be able to issue 100 * 750ms worth of IOs per second, and vice-versa for speeding up. 101 * 102 * Device business is determined using two criteria - rq wait and 103 * completion latencies. 104 * 105 * When a device gets saturated, the on-device and then the request queues 106 * fill up and a bio which is ready to be issued has to wait for a request 107 * to become available. When this delay becomes noticeable, it's a clear 108 * indication that the device is saturated and we lower the vrate. This 109 * saturation signal is fairly conservative as it only triggers when both 110 * hardware and software queues are filled up, and is used as the default 111 * busy signal. 112 * 113 * As devices can have deep queues and be unfair in how the queued commands 114 * are executed, solely depending on rq wait may not result in satisfactory 115 * control quality. For a better control quality, completion latency QoS 116 * parameters can be configured so that the device is considered saturated 117 * if N'th percentile completion latency rises above the set point. 118 * 119 * The completion latency requirements are a function of both the 120 * underlying device characteristics and the desired IO latency quality of 121 * service. There is an inherent trade-off - the tighter the latency QoS, 122 * the higher the bandwidth lossage. Latency QoS is disabled by default 123 * and can be set through /sys/fs/cgroup/io.cost.qos. 124 * 125 * 2-3. Work Conservation 126 * 127 * Imagine two cgroups A and B with equal weights. A is issuing a small IO 128 * periodically while B is sending out enough parallel IOs to saturate the 129 * device on its own. Let's say A's usage amounts to 100ms worth of IO 130 * cost per second, i.e., 10% of the device capacity. The naive 131 * distribution of half and half would lead to 60% utilization of the 132 * device, a significant reduction in the total amount of work done 133 * compared to free-for-all competition. This is too high a cost to pay 134 * for IO control. 135 * 136 * To conserve the total amount of work done, we keep track of how much 137 * each active cgroup is actually using and yield part of its weight if 138 * there are other cgroups which can make use of it. In the above case, 139 * A's weight will be lowered so that it hovers above the actual usage and 140 * B would be able to use the rest. 141 * 142 * As we don't want to penalize a cgroup for donating its weight, the 143 * surplus weight adjustment factors in a margin and has an immediate 144 * snapback mechanism in case the cgroup needs more IO vtime for itself. 145 * 146 * Note that adjusting down surplus weights has the same effects as 147 * accelerating vtime for other cgroups and work conservation can also be 148 * implemented by adjusting vrate dynamically. However, squaring who can 149 * donate and should take back how much requires hweight propagations 150 * anyway making it easier to implement and understand as a separate 151 * mechanism. 152 * 153 * 3. Monitoring 154 * 155 * Instead of debugfs or other clumsy monitoring mechanisms, this 156 * controller uses a drgn based monitoring script - 157 * tools/cgroup/iocost_monitor.py. For details on drgn, please see 158 * https://github.com/osandov/drgn. The output looks like the following. 159 * 160 * sdb RUN per=300ms cur_per=234.218:v203.695 busy= +1 vrate= 62.12% 161 * active weight hweight% inflt% dbt delay usages% 162 * test/a * 50/ 50 33.33/ 33.33 27.65 2 0*041 033:033:033 163 * test/b * 100/ 100 66.67/ 66.67 17.56 0 0*000 066:079:077 164 * 165 * - per : Timer period 166 * - cur_per : Internal wall and device vtime clock 167 * - vrate : Device virtual time rate against wall clock 168 * - weight : Surplus-adjusted and configured weights 169 * - hweight : Surplus-adjusted and configured hierarchical weights 170 * - inflt : The percentage of in-flight IO cost at the end of last period 171 * - del_ms : Deferred issuer delay induction level and duration 172 * - usages : Usage history 173 */ 174 175 #include <linux/kernel.h> 176 #include <linux/bitfield.h> 177 #include <linux/module.h> 178 #include <linux/timer.h> 179 #include <linux/time64.h> 180 #include <linux/parser.h> 181 #include <linux/sched/signal.h> 182 #include <asm/local.h> 183 #include <asm/local64.h> 184 #include "blk-rq-qos.h" 185 #include "blk-stat.h" 186 #include "blk-wbt.h" 187 #include "blk-cgroup.h" 188 189 #ifdef CONFIG_TRACEPOINTS 190 191 /* copied from TRACE_CGROUP_PATH, see cgroup-internal.h */ 192 #define TRACE_IOCG_PATH_LEN 1024 193 static DEFINE_SPINLOCK(trace_iocg_path_lock); 194 static char trace_iocg_path[TRACE_IOCG_PATH_LEN]; 195 196 #define TRACE_IOCG_PATH(type, iocg, ...) \ 197 do { \ 198 unsigned long flags; \ 199 if (trace_iocost_##type##_enabled()) { \ 200 spin_lock_irqsave(&trace_iocg_path_lock, flags); \ 201 cgroup_path(iocg_to_blkg(iocg)->blkcg->css.cgroup, \ 202 trace_iocg_path, TRACE_IOCG_PATH_LEN); \ 203 trace_iocost_##type(iocg, trace_iocg_path, \ 204 ##__VA_ARGS__); \ 205 spin_unlock_irqrestore(&trace_iocg_path_lock, flags); \ 206 } \ 207 } while (0) 208 209 #else /* CONFIG_TRACE_POINTS */ 210 #define TRACE_IOCG_PATH(type, iocg, ...) do { } while (0) 211 #endif /* CONFIG_TRACE_POINTS */ 212 213 enum { 214 MILLION = 1000000, 215 216 /* timer period is calculated from latency requirements, bound it */ 217 MIN_PERIOD = USEC_PER_MSEC, 218 MAX_PERIOD = USEC_PER_SEC, 219 220 /* 221 * iocg->vtime is targeted at 50% behind the device vtime, which 222 * serves as its IO credit buffer. Surplus weight adjustment is 223 * immediately canceled if the vtime margin runs below 10%. 224 */ 225 MARGIN_MIN_PCT = 10, 226 MARGIN_LOW_PCT = 20, 227 MARGIN_TARGET_PCT = 50, 228 229 INUSE_ADJ_STEP_PCT = 25, 230 231 /* Have some play in timer operations */ 232 TIMER_SLACK_PCT = 1, 233 234 /* 1/64k is granular enough and can easily be handled w/ u32 */ 235 WEIGHT_ONE = 1 << 16, 236 }; 237 238 enum { 239 /* 240 * As vtime is used to calculate the cost of each IO, it needs to 241 * be fairly high precision. For example, it should be able to 242 * represent the cost of a single page worth of discard with 243 * suffificient accuracy. At the same time, it should be able to 244 * represent reasonably long enough durations to be useful and 245 * convenient during operation. 246 * 247 * 1s worth of vtime is 2^37. This gives us both sub-nanosecond 248 * granularity and days of wrap-around time even at extreme vrates. 249 */ 250 VTIME_PER_SEC_SHIFT = 37, 251 VTIME_PER_SEC = 1LLU << VTIME_PER_SEC_SHIFT, 252 VTIME_PER_USEC = VTIME_PER_SEC / USEC_PER_SEC, 253 VTIME_PER_NSEC = VTIME_PER_SEC / NSEC_PER_SEC, 254 255 /* bound vrate adjustments within two orders of magnitude */ 256 VRATE_MIN_PPM = 10000, /* 1% */ 257 VRATE_MAX_PPM = 100000000, /* 10000% */ 258 259 VRATE_MIN = VTIME_PER_USEC * VRATE_MIN_PPM / MILLION, 260 VRATE_CLAMP_ADJ_PCT = 4, 261 262 /* switch iff the conditions are met for longer than this */ 263 AUTOP_CYCLE_NSEC = 10LLU * NSEC_PER_SEC, 264 }; 265 266 enum { 267 /* if IOs end up waiting for requests, issue less */ 268 RQ_WAIT_BUSY_PCT = 5, 269 270 /* unbusy hysterisis */ 271 UNBUSY_THR_PCT = 75, 272 273 /* 274 * The effect of delay is indirect and non-linear and a huge amount of 275 * future debt can accumulate abruptly while unthrottled. Linearly scale 276 * up delay as debt is going up and then let it decay exponentially. 277 * This gives us quick ramp ups while delay is accumulating and long 278 * tails which can help reducing the frequency of debt explosions on 279 * unthrottle. The parameters are experimentally determined. 280 * 281 * The delay mechanism provides adequate protection and behavior in many 282 * cases. However, this is far from ideal and falls shorts on both 283 * fronts. The debtors are often throttled too harshly costing a 284 * significant level of fairness and possibly total work while the 285 * protection against their impacts on the system can be choppy and 286 * unreliable. 287 * 288 * The shortcoming primarily stems from the fact that, unlike for page 289 * cache, the kernel doesn't have well-defined back-pressure propagation 290 * mechanism and policies for anonymous memory. Fully addressing this 291 * issue will likely require substantial improvements in the area. 292 */ 293 MIN_DELAY_THR_PCT = 500, 294 MAX_DELAY_THR_PCT = 25000, 295 MIN_DELAY = 250, 296 MAX_DELAY = 250 * USEC_PER_MSEC, 297 298 /* halve debts if avg usage over 100ms is under 50% */ 299 DFGV_USAGE_PCT = 50, 300 DFGV_PERIOD = 100 * USEC_PER_MSEC, 301 302 /* don't let cmds which take a very long time pin lagging for too long */ 303 MAX_LAGGING_PERIODS = 10, 304 305 /* 306 * Count IO size in 4k pages. The 12bit shift helps keeping 307 * size-proportional components of cost calculation in closer 308 * numbers of digits to per-IO cost components. 309 */ 310 IOC_PAGE_SHIFT = 12, 311 IOC_PAGE_SIZE = 1 << IOC_PAGE_SHIFT, 312 IOC_SECT_TO_PAGE_SHIFT = IOC_PAGE_SHIFT - SECTOR_SHIFT, 313 314 /* if apart further than 16M, consider randio for linear model */ 315 LCOEF_RANDIO_PAGES = 4096, 316 }; 317 318 enum ioc_running { 319 IOC_IDLE, 320 IOC_RUNNING, 321 IOC_STOP, 322 }; 323 324 /* io.cost.qos controls including per-dev enable of the whole controller */ 325 enum { 326 QOS_ENABLE, 327 QOS_CTRL, 328 NR_QOS_CTRL_PARAMS, 329 }; 330 331 /* io.cost.qos params */ 332 enum { 333 QOS_RPPM, 334 QOS_RLAT, 335 QOS_WPPM, 336 QOS_WLAT, 337 QOS_MIN, 338 QOS_MAX, 339 NR_QOS_PARAMS, 340 }; 341 342 /* io.cost.model controls */ 343 enum { 344 COST_CTRL, 345 COST_MODEL, 346 NR_COST_CTRL_PARAMS, 347 }; 348 349 /* builtin linear cost model coefficients */ 350 enum { 351 I_LCOEF_RBPS, 352 I_LCOEF_RSEQIOPS, 353 I_LCOEF_RRANDIOPS, 354 I_LCOEF_WBPS, 355 I_LCOEF_WSEQIOPS, 356 I_LCOEF_WRANDIOPS, 357 I_LCOEF_FLUSHIOPS, 358 NR_I_LCOEFS, 359 }; 360 361 enum { 362 LCOEF_RPAGE, 363 LCOEF_RSEQIO, 364 LCOEF_RRANDIO, 365 LCOEF_WPAGE, 366 LCOEF_WSEQIO, 367 LCOEF_WRANDIO, 368 LCOEF_FLUSH, 369 NR_LCOEFS, 370 }; 371 372 enum { 373 AUTOP_INVALID, 374 AUTOP_HDD, 375 AUTOP_SSD_QD1, 376 AUTOP_SSD_DFL, 377 AUTOP_SSD_FAST, 378 }; 379 380 struct ioc_params { 381 u32 qos[NR_QOS_PARAMS]; 382 u64 i_lcoefs[NR_I_LCOEFS]; 383 u64 lcoefs[NR_LCOEFS]; 384 u32 too_fast_vrate_pct; 385 u32 too_slow_vrate_pct; 386 }; 387 388 struct ioc_margins { 389 s64 min; 390 s64 low; 391 s64 target; 392 }; 393 394 struct ioc_missed { 395 local_t nr_met; 396 local_t nr_missed; 397 u32 last_met; 398 u32 last_missed; 399 }; 400 401 struct ioc_pcpu_stat { 402 struct ioc_missed missed[2]; 403 404 local64_t rq_wait_ns; 405 u64 last_rq_wait_ns; 406 }; 407 408 /* per device */ 409 struct ioc { 410 struct rq_qos rqos; 411 412 bool enabled; 413 414 struct ioc_params params; 415 struct ioc_margins margins; 416 u32 period_us; 417 u32 timer_slack_ns; 418 u64 vrate_min; 419 u64 vrate_max; 420 421 spinlock_t lock; 422 struct timer_list timer; 423 struct list_head active_iocgs; /* active cgroups */ 424 struct ioc_pcpu_stat __percpu *pcpu_stat; 425 426 enum ioc_running running; 427 atomic64_t vtime_rate; 428 u64 vtime_base_rate; 429 s64 vtime_err; 430 431 seqcount_spinlock_t period_seqcount; 432 u64 period_at; /* wallclock starttime */ 433 u64 period_at_vtime; /* vtime starttime */ 434 435 atomic64_t cur_period; /* inc'd each period */ 436 int busy_level; /* saturation history */ 437 438 bool weights_updated; 439 atomic_t hweight_gen; /* for lazy hweights */ 440 441 /* debt forgivness */ 442 u64 dfgv_period_at; 443 u64 dfgv_period_rem; 444 u64 dfgv_usage_us_sum; 445 446 u64 autop_too_fast_at; 447 u64 autop_too_slow_at; 448 int autop_idx; 449 bool user_qos_params:1; 450 bool user_cost_model:1; 451 }; 452 453 struct iocg_pcpu_stat { 454 local64_t abs_vusage; 455 }; 456 457 struct iocg_stat { 458 u64 usage_us; 459 u64 wait_us; 460 u64 indebt_us; 461 u64 indelay_us; 462 }; 463 464 /* per device-cgroup pair */ 465 struct ioc_gq { 466 struct blkg_policy_data pd; 467 struct ioc *ioc; 468 469 /* 470 * A iocg can get its weight from two sources - an explicit 471 * per-device-cgroup configuration or the default weight of the 472 * cgroup. `cfg_weight` is the explicit per-device-cgroup 473 * configuration. `weight` is the effective considering both 474 * sources. 475 * 476 * When an idle cgroup becomes active its `active` goes from 0 to 477 * `weight`. `inuse` is the surplus adjusted active weight. 478 * `active` and `inuse` determine the hierarchical weights cached in 479 * `hweight_cache`. 480 * 481 * `last_inuse` remembers `inuse` while an iocg is idle to persist 482 * surplus adjustments. 483 * 484 * `inuse` may be adjusted dynamically during period. `saved_*` are used 485 * to determine and track adjustments. 486 */ 487 u32 cfg_weight; 488 u32 weight; 489 u32 active; 490 u32 inuse; 491 492 u32 last_inuse; 493 s64 saved_margin; 494 495 sector_t cursor; /* to detect randio */ 496 497 /* 498 * `vtime` is this iocg's vtime cursor which progresses as IOs are 499 * issued. If lagging behind device vtime, the delta represents 500 * the currently available IO budget. If running ahead, the 501 * overage. 502 * 503 * `vtime_done` is the same but progressed on completion rather 504 * than issue. The delta behind `vtime` represents the cost of 505 * currently in-flight IOs. 506 */ 507 atomic64_t vtime; 508 atomic64_t done_vtime; 509 u64 abs_vdebt; 510 511 /* current delay in effect and when it started */ 512 u64 delay; 513 u64 delay_at; 514 515 /* 516 * The period this iocg was last active in. Used for deactivation 517 * and invalidating `vtime`. 518 */ 519 atomic64_t active_period; 520 struct list_head active_list; 521 522 /* see __propagate_weights() and current_hweight() for details */ 523 u64 child_active_sum; 524 u64 child_inuse_sum; 525 u64 child_adjusted_sum; 526 /* Generation in bits 63:32; active - 1 and inuse - 1 in 31:16/15:0. */ 527 atomic64_t hweight_cache; 528 /* Donation workspace, protected by ioc->lock. */ 529 u32 hweight_active; 530 u32 hweight_inuse; 531 u32 hweight_donating; 532 u32 hweight_after_donation; 533 534 struct list_head walk_list; 535 struct list_head surplus_list; 536 537 struct wait_queue_head waitq; 538 struct hrtimer waitq_timer; 539 540 /* timestamp at the latest activation */ 541 u64 activated_at; 542 543 /* statistics */ 544 struct iocg_pcpu_stat __percpu *pcpu_stat; 545 struct iocg_stat stat; 546 struct iocg_stat last_stat; 547 u64 last_stat_abs_vusage; 548 u64 usage_delta_us; 549 u64 wait_since; 550 u64 indebt_since; 551 u64 indelay_since; 552 553 /* this iocg's depth in the hierarchy and ancestors including self */ 554 int level; 555 struct ioc_gq *ancestors[]; 556 }; 557 558 /* per cgroup */ 559 struct ioc_cgrp { 560 struct blkcg_policy_data cpd; 561 unsigned int dfl_weight; 562 }; 563 564 struct ioc_now { 565 u64 now_ns; 566 u64 now; 567 u64 vnow; 568 }; 569 570 struct iocg_wait { 571 struct wait_queue_entry wait; 572 struct bio *bio; 573 u64 abs_cost; 574 bool committed; 575 }; 576 577 struct iocg_wake_ctx { 578 struct ioc_gq *iocg; 579 u32 hw_inuse; 580 s64 vbudget; 581 }; 582 583 static const struct ioc_params autop[] = { 584 [AUTOP_HDD] = { 585 .qos = { 586 [QOS_RLAT] = 250000, /* 250ms */ 587 [QOS_WLAT] = 250000, 588 [QOS_MIN] = VRATE_MIN_PPM, 589 [QOS_MAX] = VRATE_MAX_PPM, 590 }, 591 .i_lcoefs = { 592 [I_LCOEF_RBPS] = 174019176, 593 [I_LCOEF_RSEQIOPS] = 41708, 594 [I_LCOEF_RRANDIOPS] = 370, 595 [I_LCOEF_WBPS] = 178075866, 596 [I_LCOEF_WSEQIOPS] = 42705, 597 [I_LCOEF_WRANDIOPS] = 378, 598 }, 599 }, 600 [AUTOP_SSD_QD1] = { 601 .qos = { 602 [QOS_RLAT] = 25000, /* 25ms */ 603 [QOS_WLAT] = 25000, 604 [QOS_MIN] = VRATE_MIN_PPM, 605 [QOS_MAX] = VRATE_MAX_PPM, 606 }, 607 .i_lcoefs = { 608 [I_LCOEF_RBPS] = 245855193, 609 [I_LCOEF_RSEQIOPS] = 61575, 610 [I_LCOEF_RRANDIOPS] = 6946, 611 [I_LCOEF_WBPS] = 141365009, 612 [I_LCOEF_WSEQIOPS] = 33716, 613 [I_LCOEF_WRANDIOPS] = 26796, 614 }, 615 }, 616 [AUTOP_SSD_DFL] = { 617 .qos = { 618 [QOS_RLAT] = 25000, /* 25ms */ 619 [QOS_WLAT] = 25000, 620 [QOS_MIN] = VRATE_MIN_PPM, 621 [QOS_MAX] = VRATE_MAX_PPM, 622 }, 623 .i_lcoefs = { 624 [I_LCOEF_RBPS] = 488636629, 625 [I_LCOEF_RSEQIOPS] = 8932, 626 [I_LCOEF_RRANDIOPS] = 8518, 627 [I_LCOEF_WBPS] = 427891549, 628 [I_LCOEF_WSEQIOPS] = 28755, 629 [I_LCOEF_WRANDIOPS] = 21940, 630 }, 631 .too_fast_vrate_pct = 500, 632 }, 633 [AUTOP_SSD_FAST] = { 634 .qos = { 635 [QOS_RLAT] = 5000, /* 5ms */ 636 [QOS_WLAT] = 5000, 637 [QOS_MIN] = VRATE_MIN_PPM, 638 [QOS_MAX] = VRATE_MAX_PPM, 639 }, 640 .i_lcoefs = { 641 [I_LCOEF_RBPS] = 3102524156LLU, 642 [I_LCOEF_RSEQIOPS] = 724816, 643 [I_LCOEF_RRANDIOPS] = 778122, 644 [I_LCOEF_WBPS] = 1742780862LLU, 645 [I_LCOEF_WSEQIOPS] = 425702, 646 [I_LCOEF_WRANDIOPS] = 443193, 647 }, 648 .too_slow_vrate_pct = 10, 649 }, 650 }; 651 652 /* 653 * vrate adjust percentages indexed by ioc->busy_level. We adjust up on 654 * vtime credit shortage and down on device saturation. 655 */ 656 static const u32 vrate_adj_pct[] = 657 { 0, 0, 0, 0, 658 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 659 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 660 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8, 8, 8, 8, 16 }; 661 662 static struct blkcg_policy blkcg_policy_iocost; 663 664 /* accessors and helpers */ 665 static struct ioc *rqos_to_ioc(struct rq_qos *rqos) 666 { 667 return container_of(rqos, struct ioc, rqos); 668 } 669 670 static struct ioc *q_to_ioc(struct request_queue *q) 671 { 672 return rqos_to_ioc(rq_qos_id(q, RQ_QOS_COST)); 673 } 674 675 static const char __maybe_unused *ioc_name(struct ioc *ioc) 676 { 677 struct gendisk *disk = ioc->rqos.disk; 678 679 if (!disk) 680 return "<unknown>"; 681 return disk->disk_name; 682 } 683 684 static struct ioc_gq *pd_to_iocg(struct blkg_policy_data *pd) 685 { 686 return pd ? container_of(pd, struct ioc_gq, pd) : NULL; 687 } 688 689 static struct ioc_gq *blkg_to_iocg(struct blkcg_gq *blkg) 690 { 691 return pd_to_iocg(blkg_to_pd(blkg, &blkcg_policy_iocost)); 692 } 693 694 static struct blkcg_gq *iocg_to_blkg(struct ioc_gq *iocg) 695 { 696 return pd_to_blkg(&iocg->pd); 697 } 698 699 static struct ioc_cgrp *blkcg_to_iocc(struct blkcg *blkcg) 700 { 701 return container_of(blkcg_to_cpd(blkcg, &blkcg_policy_iocost), 702 struct ioc_cgrp, cpd); 703 } 704 705 /* 706 * Scale @abs_cost to the inverse of @hw_inuse. The lower the hierarchical 707 * weight, the more expensive each IO. Must round up. 708 */ 709 static u64 abs_cost_to_cost(u64 abs_cost, u32 hw_inuse) 710 { 711 return DIV64_U64_ROUND_UP(abs_cost * WEIGHT_ONE, hw_inuse); 712 } 713 714 /* 715 * The inverse of abs_cost_to_cost(). Must round up. 716 */ 717 static u64 cost_to_abs_cost(u64 cost, u32 hw_inuse) 718 { 719 return DIV64_U64_ROUND_UP(cost * hw_inuse, WEIGHT_ONE); 720 } 721 722 static void iocg_commit_bio(struct ioc_gq *iocg, struct bio *bio, 723 u64 abs_cost, u64 cost) 724 { 725 struct iocg_pcpu_stat *gcs; 726 727 bio->bi_iocost_cost = cost; 728 atomic64_add(cost, &iocg->vtime); 729 730 gcs = get_cpu_ptr(iocg->pcpu_stat); 731 local64_add(abs_cost, &gcs->abs_vusage); 732 put_cpu_ptr(gcs); 733 } 734 735 /* 736 * The hierarchical weights are in [1, WEIGHT_ONE] and the generation is a 737 * 32-bit counter. Pack generation and both weights into one 64-bit value so 738 * that a reader or a refresher always observes a complete snapshot: 739 * 740 * bits 63:32 generation 741 * bits 31:16 hweight_active - 1 742 * bits 15:0 hweight_inuse - 1 743 */ 744 #define HWEIGHT_GEN_MASK GENMASK_ULL(63, 32) 745 #define HWEIGHT_ACTIVE_MASK GENMASK_ULL(31, 16) 746 #define HWEIGHT_INUSE_MASK GENMASK_ULL(15, 0) 747 748 static inline u64 hweight_cache_pack(u32 gen, u32 active, u32 inuse) 749 { 750 return FIELD_PREP(HWEIGHT_GEN_MASK, gen) | 751 FIELD_PREP(HWEIGHT_ACTIVE_MASK, active - 1) | 752 FIELD_PREP(HWEIGHT_INUSE_MASK, inuse - 1); 753 } 754 755 static inline void hweight_cache_unpack(u64 cache, u32 *genp, u32 *activep, 756 u32 *inusep) 757 { 758 if (genp) 759 *genp = FIELD_GET(HWEIGHT_GEN_MASK, cache); 760 if (activep) 761 *activep = FIELD_GET(HWEIGHT_ACTIVE_MASK, cache) + 1; 762 if (inusep) 763 *inusep = FIELD_GET(HWEIGHT_INUSE_MASK, cache) + 1; 764 } 765 766 /* Decode the published weights without refreshing the cache. */ 767 static inline void iocg_hweight_cache(struct ioc_gq *iocg, u32 *activep, 768 u32 *inusep) 769 { 770 hweight_cache_unpack(atomic64_read(&iocg->hweight_cache), NULL, 771 activep, inusep); 772 } 773 774 /* Decode the cached inuse weight; only used by tracepoints. */ 775 static inline u32 iocg_hweight_cache_inuse(struct ioc_gq *iocg) 776 { 777 u32 inuse; 778 779 iocg_hweight_cache(iocg, NULL, &inuse); 780 return inuse; 781 } 782 783 #define CREATE_TRACE_POINTS 784 #include <trace/events/iocost.h> 785 786 static void ioc_refresh_margins(struct ioc *ioc) 787 { 788 struct ioc_margins *margins = &ioc->margins; 789 u32 period_us = ioc->period_us; 790 u64 vrate = ioc->vtime_base_rate; 791 792 margins->min = (period_us * MARGIN_MIN_PCT / 100) * vrate; 793 margins->low = (period_us * MARGIN_LOW_PCT / 100) * vrate; 794 margins->target = (period_us * MARGIN_TARGET_PCT / 100) * vrate; 795 } 796 797 /* latency Qos params changed, update period_us and all the dependent params */ 798 static void ioc_refresh_period_us(struct ioc *ioc) 799 { 800 u32 ppm, lat, multi, period_us; 801 802 lockdep_assert_held(&ioc->lock); 803 804 /* pick the higher latency target */ 805 if (ioc->params.qos[QOS_RLAT] >= ioc->params.qos[QOS_WLAT]) { 806 ppm = ioc->params.qos[QOS_RPPM]; 807 lat = ioc->params.qos[QOS_RLAT]; 808 } else { 809 ppm = ioc->params.qos[QOS_WPPM]; 810 lat = ioc->params.qos[QOS_WLAT]; 811 } 812 813 /* 814 * We want the period to be long enough to contain a healthy number 815 * of IOs while short enough for granular control. Define it as a 816 * multiple of the latency target. Ideally, the multiplier should 817 * be scaled according to the percentile so that it would nominally 818 * contain a certain number of requests. Let's be simpler and 819 * scale it linearly so that it's 2x >= pct(90) and 10x at pct(50). 820 */ 821 if (ppm) 822 multi = max_t(u32, (MILLION - ppm) / 50000, 2); 823 else 824 multi = 2; 825 period_us = multi * lat; 826 period_us = clamp_t(u32, period_us, MIN_PERIOD, MAX_PERIOD); 827 828 /* calculate dependent params */ 829 ioc->period_us = period_us; 830 ioc->timer_slack_ns = div64_u64( 831 (u64)period_us * NSEC_PER_USEC * TIMER_SLACK_PCT, 832 100); 833 ioc_refresh_margins(ioc); 834 } 835 836 /* 837 * ioc->rqos.disk isn't initialized when this function is called from 838 * the init path. 839 */ 840 static int ioc_autop_idx(struct ioc *ioc, struct gendisk *disk) 841 { 842 int idx = ioc->autop_idx; 843 const struct ioc_params *p = &autop[idx]; 844 u32 vrate_pct; 845 u64 now_ns; 846 847 /* rotational? */ 848 if (blk_queue_rot(disk->queue)) 849 return AUTOP_HDD; 850 851 /* handle SATA SSDs w/ broken NCQ */ 852 if (blk_queue_depth(disk->queue) == 1) 853 return AUTOP_SSD_QD1; 854 855 /* use one of the normal ssd sets */ 856 if (idx < AUTOP_SSD_DFL) 857 return AUTOP_SSD_DFL; 858 859 /* if user is overriding anything, maintain what was there */ 860 if (ioc->user_qos_params || ioc->user_cost_model) 861 return idx; 862 863 /* step up/down based on the vrate */ 864 vrate_pct = div64_u64(ioc->vtime_base_rate * 100, VTIME_PER_USEC); 865 now_ns = blk_time_get_ns(); 866 867 if (p->too_fast_vrate_pct && p->too_fast_vrate_pct <= vrate_pct) { 868 if (!ioc->autop_too_fast_at) 869 ioc->autop_too_fast_at = now_ns; 870 if (now_ns - ioc->autop_too_fast_at >= AUTOP_CYCLE_NSEC) 871 return idx + 1; 872 } else { 873 ioc->autop_too_fast_at = 0; 874 } 875 876 if (p->too_slow_vrate_pct && p->too_slow_vrate_pct >= vrate_pct) { 877 if (!ioc->autop_too_slow_at) 878 ioc->autop_too_slow_at = now_ns; 879 if (now_ns - ioc->autop_too_slow_at >= AUTOP_CYCLE_NSEC) 880 return idx - 1; 881 } else { 882 ioc->autop_too_slow_at = 0; 883 } 884 885 return idx; 886 } 887 888 /* 889 * Take the followings as input 890 * 891 * @bps maximum sequential throughput 892 * @seqiops maximum sequential 4k iops 893 * @randiops maximum random 4k iops 894 * 895 * and calculate the linear model cost coefficients. 896 * 897 * *@page per-page cost 1s / (@bps / 4096) 898 * *@seqio base cost of a seq IO max((1s / @seqiops) - *@page, 0) 899 * @randiops base cost of a rand IO max((1s / @randiops) - *@page, 0) 900 */ 901 static void calc_lcoefs(u64 bps, u64 seqiops, u64 randiops, 902 u64 *page, u64 *seqio, u64 *randio) 903 { 904 u64 v; 905 906 *page = *seqio = *randio = 0; 907 908 if (bps) { 909 u64 bps_pages = DIV_ROUND_UP_ULL(bps, IOC_PAGE_SIZE); 910 911 if (bps_pages) 912 *page = DIV64_U64_ROUND_UP(VTIME_PER_SEC, bps_pages); 913 else 914 *page = 1; 915 } 916 917 if (seqiops) { 918 v = DIV64_U64_ROUND_UP(VTIME_PER_SEC, seqiops); 919 if (v > *page) 920 *seqio = v - *page; 921 } 922 923 if (randiops) { 924 v = DIV64_U64_ROUND_UP(VTIME_PER_SEC, randiops); 925 if (v > *page) 926 *randio = v - *page; 927 } 928 } 929 930 static void ioc_refresh_lcoefs(struct ioc *ioc) 931 { 932 u64 *u = ioc->params.i_lcoefs; 933 u64 *c = ioc->params.lcoefs; 934 935 calc_lcoefs(u[I_LCOEF_RBPS], u[I_LCOEF_RSEQIOPS], u[I_LCOEF_RRANDIOPS], 936 &c[LCOEF_RPAGE], &c[LCOEF_RSEQIO], &c[LCOEF_RRANDIO]); 937 calc_lcoefs(u[I_LCOEF_WBPS], u[I_LCOEF_WSEQIOPS], u[I_LCOEF_WRANDIOPS], 938 &c[LCOEF_WPAGE], &c[LCOEF_WSEQIO], &c[LCOEF_WRANDIO]); 939 940 c[LCOEF_FLUSH] = u[I_LCOEF_FLUSHIOPS] ? 941 DIV64_U64_ROUND_UP(VTIME_PER_SEC, u[I_LCOEF_FLUSHIOPS]) : 0; 942 } 943 944 /* 945 * struct gendisk is required as an argument because ioc->rqos.disk 946 * is not properly initialized when called from the init path. 947 */ 948 static bool ioc_refresh_params_disk(struct ioc *ioc, bool force, 949 struct gendisk *disk) 950 { 951 const struct ioc_params *p; 952 int idx; 953 954 lockdep_assert_held(&ioc->lock); 955 956 idx = ioc_autop_idx(ioc, disk); 957 p = &autop[idx]; 958 959 if (idx == ioc->autop_idx && !force) 960 return false; 961 962 if (idx != ioc->autop_idx) { 963 atomic64_set(&ioc->vtime_rate, VTIME_PER_USEC); 964 ioc->vtime_base_rate = VTIME_PER_USEC; 965 } 966 967 ioc->autop_idx = idx; 968 ioc->autop_too_fast_at = 0; 969 ioc->autop_too_slow_at = 0; 970 971 if (!ioc->user_qos_params) 972 memcpy(ioc->params.qos, p->qos, sizeof(p->qos)); 973 if (!ioc->user_cost_model) 974 memcpy(ioc->params.i_lcoefs, p->i_lcoefs, sizeof(p->i_lcoefs)); 975 976 ioc_refresh_period_us(ioc); 977 ioc_refresh_lcoefs(ioc); 978 979 ioc->vrate_min = DIV64_U64_ROUND_UP((u64)ioc->params.qos[QOS_MIN] * 980 VTIME_PER_USEC, MILLION); 981 ioc->vrate_max = DIV64_U64_ROUND_UP((u64)ioc->params.qos[QOS_MAX] * 982 VTIME_PER_USEC, MILLION); 983 984 return true; 985 } 986 987 static bool ioc_refresh_params(struct ioc *ioc, bool force) 988 { 989 return ioc_refresh_params_disk(ioc, force, ioc->rqos.disk); 990 } 991 992 /* 993 * When an iocg accumulates too much vtime or gets deactivated, we throw away 994 * some vtime, which lowers the overall device utilization. As the exact amount 995 * which is being thrown away is known, we can compensate by accelerating the 996 * vrate accordingly so that the extra vtime generated in the current period 997 * matches what got lost. 998 */ 999 static void ioc_refresh_vrate(struct ioc *ioc, struct ioc_now *now) 1000 { 1001 s64 pleft = ioc->period_at + ioc->period_us - now->now; 1002 s64 vperiod = ioc->period_us * ioc->vtime_base_rate; 1003 s64 vcomp, vcomp_min, vcomp_max; 1004 1005 lockdep_assert_held(&ioc->lock); 1006 1007 /* we need some time left in this period */ 1008 if (pleft <= 0) 1009 goto done; 1010 1011 /* 1012 * Calculate how much vrate should be adjusted to offset the error. 1013 * Limit the amount of adjustment and deduct the adjusted amount from 1014 * the error. 1015 */ 1016 vcomp = -div64_s64(ioc->vtime_err, pleft); 1017 vcomp_min = -(ioc->vtime_base_rate >> 1); 1018 vcomp_max = ioc->vtime_base_rate; 1019 vcomp = clamp(vcomp, vcomp_min, vcomp_max); 1020 1021 ioc->vtime_err += vcomp * pleft; 1022 1023 atomic64_set(&ioc->vtime_rate, ioc->vtime_base_rate + vcomp); 1024 done: 1025 /* bound how much error can accumulate */ 1026 ioc->vtime_err = clamp(ioc->vtime_err, -vperiod, vperiod); 1027 } 1028 1029 static void ioc_adjust_base_vrate(struct ioc *ioc, u32 rq_wait_pct, 1030 int nr_lagging, int nr_shortages, 1031 int prev_busy_level, u32 *missed_ppm) 1032 { 1033 u64 vrate = ioc->vtime_base_rate; 1034 u64 vrate_min = ioc->vrate_min, vrate_max = ioc->vrate_max; 1035 1036 if (!ioc->busy_level || (ioc->busy_level < 0 && nr_lagging)) { 1037 if (ioc->busy_level != prev_busy_level || nr_lagging) 1038 trace_iocost_ioc_vrate_adj(ioc, vrate, 1039 missed_ppm, rq_wait_pct, 1040 nr_lagging, nr_shortages); 1041 1042 return; 1043 } 1044 1045 /* 1046 * If vrate is out of bounds, apply clamp gradually as the 1047 * bounds can change abruptly. Otherwise, apply busy_level 1048 * based adjustment. 1049 */ 1050 if (vrate < vrate_min) { 1051 vrate = div64_u64(vrate * (100 + VRATE_CLAMP_ADJ_PCT), 100); 1052 vrate = min(vrate, vrate_min); 1053 } else if (vrate > vrate_max) { 1054 vrate = div64_u64(vrate * (100 - VRATE_CLAMP_ADJ_PCT), 100); 1055 vrate = max(vrate, vrate_max); 1056 } else { 1057 int idx = min_t(int, abs(ioc->busy_level), 1058 ARRAY_SIZE(vrate_adj_pct) - 1); 1059 u32 adj_pct = vrate_adj_pct[idx]; 1060 1061 if (ioc->busy_level > 0) 1062 adj_pct = 100 - adj_pct; 1063 else 1064 adj_pct = 100 + adj_pct; 1065 1066 vrate = clamp(DIV64_U64_ROUND_UP(vrate * adj_pct, 100), 1067 vrate_min, vrate_max); 1068 } 1069 1070 trace_iocost_ioc_vrate_adj(ioc, vrate, missed_ppm, rq_wait_pct, 1071 nr_lagging, nr_shortages); 1072 1073 ioc->vtime_base_rate = vrate; 1074 ioc_refresh_margins(ioc); 1075 } 1076 1077 /* take a snapshot of the current [v]time and vrate */ 1078 static void ioc_now(struct ioc *ioc, struct ioc_now *now) 1079 { 1080 unsigned seq; 1081 u64 vrate; 1082 1083 now->now_ns = blk_time_get_ns(); 1084 now->now = ktime_to_us(now->now_ns); 1085 vrate = atomic64_read(&ioc->vtime_rate); 1086 1087 /* 1088 * The current vtime is 1089 * 1090 * vtime at period start + (wallclock time since the start) * vrate 1091 * 1092 * As a consistent snapshot of `period_at_vtime` and `period_at` is 1093 * needed, they're seqcount protected. 1094 */ 1095 do { 1096 seq = read_seqcount_begin(&ioc->period_seqcount); 1097 now->vnow = ioc->period_at_vtime + 1098 (now->now - ioc->period_at) * vrate; 1099 } while (read_seqcount_retry(&ioc->period_seqcount, seq)); 1100 } 1101 1102 static void ioc_start_period(struct ioc *ioc, struct ioc_now *now) 1103 { 1104 WARN_ON_ONCE(ioc->running != IOC_RUNNING); 1105 1106 write_seqcount_begin(&ioc->period_seqcount); 1107 ioc->period_at = now->now; 1108 ioc->period_at_vtime = now->vnow; 1109 write_seqcount_end(&ioc->period_seqcount); 1110 1111 ioc->timer.expires = jiffies + usecs_to_jiffies(ioc->period_us); 1112 add_timer(&ioc->timer); 1113 } 1114 1115 /* 1116 * Update @iocg's `active` and `inuse` to @active and @inuse, update level 1117 * weight sums and propagate upwards accordingly. If @save, the current margin 1118 * is saved to be used as reference for later inuse in-period adjustments. 1119 */ 1120 static void __propagate_weights(struct ioc_gq *iocg, u32 active, u32 inuse, 1121 bool save, struct ioc_now *now) 1122 { 1123 struct ioc *ioc = iocg->ioc; 1124 int lvl; 1125 1126 lockdep_assert_held(&ioc->lock); 1127 1128 /* 1129 * For an active leaf node, its inuse shouldn't be zero or exceed 1130 * @active. An active internal node's inuse is solely determined by the 1131 * inuse to active ratio of its children regardless of @inuse. 1132 */ 1133 if (list_empty(&iocg->active_list) && iocg->child_active_sum) { 1134 inuse = DIV64_U64_ROUND_UP(active * iocg->child_inuse_sum, 1135 iocg->child_active_sum); 1136 } else { 1137 /* 1138 * It may be tempting to turn this into a clamp expression with 1139 * a lower limit of 1 but active may be 0, which cannot be used 1140 * as an upper limit in that situation. This expression allows 1141 * active to clamp inuse unless it is 0, in which case inuse 1142 * becomes 1. 1143 */ 1144 inuse = min(inuse, active) ?: 1; 1145 } 1146 1147 iocg->last_inuse = iocg->inuse; 1148 if (save) 1149 iocg->saved_margin = now->vnow - atomic64_read(&iocg->vtime); 1150 1151 if (active == iocg->active && inuse == iocg->inuse) 1152 return; 1153 1154 for (lvl = iocg->level - 1; lvl >= 0; lvl--) { 1155 struct ioc_gq *parent = iocg->ancestors[lvl]; 1156 struct ioc_gq *child = iocg->ancestors[lvl + 1]; 1157 u32 parent_active = 0, parent_inuse = 0; 1158 1159 /* update the level sums */ 1160 parent->child_active_sum += (s32)(active - child->active); 1161 parent->child_inuse_sum += (s32)(inuse - child->inuse); 1162 /* apply the updates */ 1163 child->active = active; 1164 child->inuse = inuse; 1165 1166 /* 1167 * The delta between inuse and active sums indicates that 1168 * much of weight is being given away. Parent's inuse 1169 * and active should reflect the ratio. 1170 */ 1171 if (parent->child_active_sum) { 1172 parent_active = parent->weight; 1173 parent_inuse = DIV64_U64_ROUND_UP( 1174 parent_active * parent->child_inuse_sum, 1175 parent->child_active_sum); 1176 } 1177 1178 /* do we need to keep walking up? */ 1179 if (parent_active == parent->active && 1180 parent_inuse == parent->inuse) 1181 break; 1182 1183 active = parent_active; 1184 inuse = parent_inuse; 1185 } 1186 1187 ioc->weights_updated = true; 1188 } 1189 1190 static void commit_weights(struct ioc *ioc) 1191 { 1192 lockdep_assert_held(&ioc->lock); 1193 1194 if (ioc->weights_updated) { 1195 /* paired with rmb in current_hweight(), see there */ 1196 smp_wmb(); 1197 atomic_inc(&ioc->hweight_gen); 1198 ioc->weights_updated = false; 1199 } 1200 } 1201 1202 static void propagate_weights(struct ioc_gq *iocg, u32 active, u32 inuse, 1203 bool save, struct ioc_now *now) 1204 { 1205 __propagate_weights(iocg, active, inuse, save, now); 1206 commit_weights(iocg->ioc); 1207 } 1208 1209 static void current_hweight(struct ioc_gq *iocg, u32 *hw_activep, u32 *hw_inusep) 1210 { 1211 struct ioc *ioc = iocg->ioc; 1212 int lvl; 1213 u32 hwa, hwi, ioc_gen, cache_gen; 1214 u64 cache; 1215 1216 ioc_gen = (u32)atomic_read(&ioc->hweight_gen); 1217 1218 /* hot path - if uptodate, use the cached snapshot */ 1219 cache = atomic64_read(&iocg->hweight_cache); 1220 hweight_cache_unpack(cache, &cache_gen, &hwa, &hwi); 1221 if (cache_gen == ioc_gen) 1222 goto out; 1223 1224 /* 1225 * Paired with wmb in commit_weights(). If we saw the updated 1226 * hweight_gen, all the weight updates from __propagate_weights() are 1227 * visible too. 1228 * 1229 * We can race with weight updates during calculation and get it 1230 * wrong. However, hweight_gen would have changed and a future 1231 * reader will recalculate and we're guaranteed to discard the 1232 * wrong result soon. 1233 */ 1234 smp_rmb(); 1235 1236 hwa = hwi = WEIGHT_ONE; 1237 for (lvl = 0; lvl <= iocg->level - 1; lvl++) { 1238 struct ioc_gq *parent = iocg->ancestors[lvl]; 1239 struct ioc_gq *child = iocg->ancestors[lvl + 1]; 1240 u64 active_sum = READ_ONCE(parent->child_active_sum); 1241 u64 inuse_sum = READ_ONCE(parent->child_inuse_sum); 1242 u32 active = READ_ONCE(child->active); 1243 u32 inuse = READ_ONCE(child->inuse); 1244 1245 /* we can race with deactivations and either may read as zero */ 1246 if (!active_sum || !inuse_sum) 1247 continue; 1248 1249 active_sum = max_t(u64, active, active_sum); 1250 hwa = div64_u64((u64)hwa * active, active_sum); 1251 1252 inuse_sum = max_t(u64, inuse, inuse_sum); 1253 hwi = div64_u64((u64)hwi * inuse, inuse_sum); 1254 } 1255 1256 hwa = max_t(u32, hwa, 1); 1257 hwi = max_t(u32, hwi, 1); 1258 /* 1259 * Publish the generation and both weights as one atomic snapshot. 1260 * A concurrent refresher may overwrite this with its own snapshot, 1261 * but the generation travels with the weights so the next reader 1262 * detects the mismatch and refreshes again. 1263 */ 1264 atomic64_set(&iocg->hweight_cache, hweight_cache_pack(ioc_gen, hwa, hwi)); 1265 out: 1266 if (hw_activep) 1267 *hw_activep = hwa; 1268 if (hw_inusep) 1269 *hw_inusep = hwi; 1270 } 1271 1272 /* 1273 * Calculate the hweight_inuse @iocg would get with max @inuse assuming all the 1274 * other weights stay unchanged. 1275 */ 1276 static u32 current_hweight_max(struct ioc_gq *iocg) 1277 { 1278 u32 hwm = WEIGHT_ONE; 1279 u32 inuse = iocg->active; 1280 u64 child_inuse_sum; 1281 int lvl; 1282 1283 lockdep_assert_held(&iocg->ioc->lock); 1284 1285 for (lvl = iocg->level - 1; lvl >= 0; lvl--) { 1286 struct ioc_gq *parent = iocg->ancestors[lvl]; 1287 struct ioc_gq *child = iocg->ancestors[lvl + 1]; 1288 1289 child_inuse_sum = parent->child_inuse_sum + inuse - child->inuse; 1290 hwm = div64_u64((u64)hwm * inuse, child_inuse_sum); 1291 inuse = DIV64_U64_ROUND_UP(parent->active * child_inuse_sum, 1292 parent->child_active_sum); 1293 } 1294 1295 return max_t(u32, hwm, 1); 1296 } 1297 1298 static void weight_updated(struct ioc_gq *iocg, struct ioc_now *now) 1299 { 1300 struct ioc *ioc = iocg->ioc; 1301 struct blkcg_gq *blkg = iocg_to_blkg(iocg); 1302 struct ioc_cgrp *iocc = blkcg_to_iocc(blkg->blkcg); 1303 u32 weight; 1304 1305 lockdep_assert_held(&ioc->lock); 1306 1307 weight = iocg->cfg_weight ?: iocc->dfl_weight; 1308 if (weight != iocg->weight && iocg->active) 1309 propagate_weights(iocg, weight, iocg->inuse, true, now); 1310 iocg->weight = weight; 1311 } 1312 1313 static bool iocg_activate(struct ioc_gq *iocg, struct ioc_now *now) 1314 { 1315 struct ioc *ioc = iocg->ioc; 1316 u64 __maybe_unused last_period, cur_period; 1317 u64 vtime, vtarget, cache; 1318 u32 active, inuse; 1319 int i; 1320 1321 /* 1322 * If seem to be already active, just update the stamp to tell the 1323 * timer that we're still active. We don't mind occassional races. 1324 */ 1325 if (!list_empty(&iocg->active_list)) { 1326 ioc_now(ioc, now); 1327 cur_period = atomic64_read(&ioc->cur_period); 1328 if (atomic64_read(&iocg->active_period) != cur_period) 1329 atomic64_set(&iocg->active_period, cur_period); 1330 return true; 1331 } 1332 1333 /* racy check on internal node IOs, treat as root level IOs */ 1334 if (iocg->child_active_sum) 1335 return false; 1336 1337 spin_lock_irq(&ioc->lock); 1338 1339 ioc_now(ioc, now); 1340 1341 /* update period */ 1342 cur_period = atomic64_read(&ioc->cur_period); 1343 last_period = atomic64_read(&iocg->active_period); 1344 atomic64_set(&iocg->active_period, cur_period); 1345 1346 /* already activated or breaking leaf-only constraint? */ 1347 if (!list_empty(&iocg->active_list)) 1348 goto succeed_unlock; 1349 for (i = iocg->level - 1; i > 0; i--) 1350 if (!list_empty(&iocg->ancestors[i]->active_list)) 1351 goto fail_unlock; 1352 1353 if (iocg->child_active_sum) 1354 goto fail_unlock; 1355 1356 /* 1357 * Always start with the target budget. On deactivation, we throw away 1358 * anything above it. 1359 */ 1360 vtarget = now->vnow - ioc->margins.target; 1361 vtime = atomic64_read(&iocg->vtime); 1362 1363 atomic64_add(vtarget - vtime, &iocg->vtime); 1364 atomic64_add(vtarget - vtime, &iocg->done_vtime); 1365 vtime = vtarget; 1366 1367 /* 1368 * Activate, propagate weight and start period timer if not running. 1369 * Invalidate the cached generation to avoid an accidental match from 1370 * wrapping. Keep the last published weights so that the activation 1371 * tracepoint can report them; the next current_hweight() recomputes. 1372 */ 1373 cache = atomic64_read(&iocg->hweight_cache); 1374 hweight_cache_unpack(cache, NULL, &active, &inuse); 1375 atomic64_set(&iocg->hweight_cache, 1376 hweight_cache_pack((u32)(atomic_read(&ioc->hweight_gen) - 1), 1377 active, inuse)); 1378 list_add(&iocg->active_list, &ioc->active_iocgs); 1379 1380 propagate_weights(iocg, iocg->weight, 1381 iocg->last_inuse ?: iocg->weight, true, now); 1382 1383 TRACE_IOCG_PATH(iocg_activate, iocg, now, 1384 last_period, cur_period, vtime); 1385 1386 iocg->activated_at = now->now; 1387 1388 if (ioc->running == IOC_IDLE) { 1389 ioc->running = IOC_RUNNING; 1390 ioc->dfgv_period_at = now->now; 1391 ioc->dfgv_period_rem = 0; 1392 ioc_start_period(ioc, now); 1393 } 1394 1395 succeed_unlock: 1396 spin_unlock_irq(&ioc->lock); 1397 return true; 1398 1399 fail_unlock: 1400 spin_unlock_irq(&ioc->lock); 1401 return false; 1402 } 1403 1404 static bool iocg_kick_delay(struct ioc_gq *iocg, struct ioc_now *now) 1405 { 1406 struct ioc *ioc = iocg->ioc; 1407 struct blkcg_gq *blkg = iocg_to_blkg(iocg); 1408 u64 tdelta, delay, new_delay, shift; 1409 s64 vover, vover_pct; 1410 u32 hwa; 1411 1412 lockdep_assert_held(&iocg->waitq.lock); 1413 1414 /* 1415 * If the delay is set by another CPU, we may be in the past. No need to 1416 * change anything if so. This avoids decay calculation underflow. 1417 */ 1418 if (time_before64(now->now, iocg->delay_at)) 1419 return false; 1420 1421 /* calculate the current delay in effect - 1/2 every second */ 1422 tdelta = now->now - iocg->delay_at; 1423 shift = div64_u64(tdelta, USEC_PER_SEC); 1424 if (iocg->delay && shift < BITS_PER_LONG) 1425 delay = iocg->delay >> shift; 1426 else 1427 delay = 0; 1428 1429 /* calculate the new delay from the debt amount */ 1430 current_hweight(iocg, &hwa, NULL); 1431 vover = atomic64_read(&iocg->vtime) + 1432 abs_cost_to_cost(iocg->abs_vdebt, hwa) - now->vnow; 1433 vover_pct = div64_s64(100 * vover, 1434 ioc->period_us * ioc->vtime_base_rate); 1435 1436 if (vover_pct <= MIN_DELAY_THR_PCT) 1437 new_delay = 0; 1438 else if (vover_pct >= MAX_DELAY_THR_PCT) 1439 new_delay = MAX_DELAY; 1440 else 1441 new_delay = MIN_DELAY + 1442 div_u64((MAX_DELAY - MIN_DELAY) * 1443 (vover_pct - MIN_DELAY_THR_PCT), 1444 MAX_DELAY_THR_PCT - MIN_DELAY_THR_PCT); 1445 1446 /* pick the higher one and apply */ 1447 if (new_delay > delay) { 1448 iocg->delay = new_delay; 1449 iocg->delay_at = now->now; 1450 delay = new_delay; 1451 } 1452 1453 if (delay >= MIN_DELAY) { 1454 if (!iocg->indelay_since) 1455 iocg->indelay_since = now->now; 1456 blkcg_set_delay(blkg, delay * NSEC_PER_USEC); 1457 return true; 1458 } else { 1459 if (iocg->indelay_since) { 1460 iocg->stat.indelay_us += now->now - iocg->indelay_since; 1461 iocg->indelay_since = 0; 1462 } 1463 iocg->delay = 0; 1464 blkcg_clear_delay(blkg); 1465 return false; 1466 } 1467 } 1468 1469 static void iocg_incur_debt(struct ioc_gq *iocg, u64 abs_cost, 1470 struct ioc_now *now) 1471 { 1472 struct iocg_pcpu_stat *gcs; 1473 1474 lockdep_assert_held(&iocg->ioc->lock); 1475 lockdep_assert_held(&iocg->waitq.lock); 1476 WARN_ON_ONCE(list_empty(&iocg->active_list)); 1477 1478 /* 1479 * Once in debt, debt handling owns inuse. @iocg stays at the minimum 1480 * inuse donating all of it share to others until its debt is paid off. 1481 */ 1482 if (!iocg->abs_vdebt && abs_cost) { 1483 iocg->indebt_since = now->now; 1484 propagate_weights(iocg, iocg->active, 0, false, now); 1485 } 1486 1487 iocg->abs_vdebt += abs_cost; 1488 1489 gcs = get_cpu_ptr(iocg->pcpu_stat); 1490 local64_add(abs_cost, &gcs->abs_vusage); 1491 put_cpu_ptr(gcs); 1492 } 1493 1494 static void iocg_pay_debt(struct ioc_gq *iocg, u64 abs_vpay, 1495 struct ioc_now *now) 1496 { 1497 lockdep_assert_held(&iocg->ioc->lock); 1498 lockdep_assert_held(&iocg->waitq.lock); 1499 1500 /* 1501 * make sure that nobody messed with @iocg. Check iocg->pd.online 1502 * to avoid warn when removing blkcg or disk. 1503 */ 1504 WARN_ON_ONCE(list_empty(&iocg->active_list) && iocg->pd.online); 1505 WARN_ON_ONCE(iocg->inuse > 1); 1506 1507 iocg->abs_vdebt -= min(abs_vpay, iocg->abs_vdebt); 1508 1509 /* if debt is paid in full, restore inuse */ 1510 if (!iocg->abs_vdebt) { 1511 iocg->stat.indebt_us += now->now - iocg->indebt_since; 1512 iocg->indebt_since = 0; 1513 1514 propagate_weights(iocg, iocg->active, iocg->last_inuse, 1515 false, now); 1516 } 1517 } 1518 1519 static int iocg_wake_fn(struct wait_queue_entry *wq_entry, unsigned mode, 1520 int flags, void *key) 1521 { 1522 struct iocg_wait *wait = container_of(wq_entry, struct iocg_wait, wait); 1523 struct iocg_wake_ctx *ctx = key; 1524 u64 cost = abs_cost_to_cost(wait->abs_cost, ctx->hw_inuse); 1525 1526 ctx->vbudget -= cost; 1527 1528 if (ctx->vbudget < 0) 1529 return -1; 1530 1531 iocg_commit_bio(ctx->iocg, wait->bio, wait->abs_cost, cost); 1532 wait->committed = true; 1533 1534 /* 1535 * autoremove_wake_function() removes the wait entry only when it 1536 * actually changed the task state. We want the wait always removed. 1537 * Remove explicitly and use default_wake_function(). Note that the 1538 * order of operations is important as finish_wait() tests whether 1539 * @wq_entry is removed without grabbing the lock. 1540 */ 1541 default_wake_function(wq_entry, mode, flags, key); 1542 list_del_init_careful(&wq_entry->entry); 1543 return 0; 1544 } 1545 1546 /* 1547 * Calculate the accumulated budget, pay debt if @pay_debt and wake up waiters 1548 * accordingly. When @pay_debt is %true, the caller must be holding ioc->lock in 1549 * addition to iocg->waitq.lock. 1550 */ 1551 static void iocg_kick_waitq(struct ioc_gq *iocg, bool pay_debt, 1552 struct ioc_now *now) 1553 { 1554 struct ioc *ioc = iocg->ioc; 1555 struct iocg_wake_ctx ctx = { .iocg = iocg }; 1556 u64 vshortage, expires, oexpires; 1557 s64 vbudget; 1558 u32 hwa; 1559 1560 lockdep_assert_held(&iocg->waitq.lock); 1561 1562 current_hweight(iocg, &hwa, NULL); 1563 vbudget = now->vnow - atomic64_read(&iocg->vtime); 1564 1565 /* pay off debt */ 1566 if (pay_debt && iocg->abs_vdebt && vbudget > 0) { 1567 u64 abs_vbudget = cost_to_abs_cost(vbudget, hwa); 1568 u64 abs_vpay = min_t(u64, abs_vbudget, iocg->abs_vdebt); 1569 u64 vpay = abs_cost_to_cost(abs_vpay, hwa); 1570 1571 lockdep_assert_held(&ioc->lock); 1572 1573 atomic64_add(vpay, &iocg->vtime); 1574 atomic64_add(vpay, &iocg->done_vtime); 1575 iocg_pay_debt(iocg, abs_vpay, now); 1576 vbudget -= vpay; 1577 } 1578 1579 if (iocg->abs_vdebt || iocg->delay) 1580 iocg_kick_delay(iocg, now); 1581 1582 /* 1583 * Debt can still be outstanding if we haven't paid all yet or the 1584 * caller raced and called without @pay_debt. Shouldn't wake up waiters 1585 * under debt. Make sure @vbudget reflects the outstanding amount and is 1586 * not positive. 1587 */ 1588 if (iocg->abs_vdebt) { 1589 s64 vdebt = abs_cost_to_cost(iocg->abs_vdebt, hwa); 1590 vbudget = min_t(s64, 0, vbudget - vdebt); 1591 } 1592 1593 /* 1594 * Wake up the ones which are due and see how much vtime we'll need for 1595 * the next one. As paying off debt restores hw_inuse, it must be read 1596 * after the above debt payment. 1597 */ 1598 ctx.vbudget = vbudget; 1599 current_hweight(iocg, NULL, &ctx.hw_inuse); 1600 1601 __wake_up_locked_key(&iocg->waitq, TASK_NORMAL, &ctx); 1602 1603 if (!waitqueue_active(&iocg->waitq)) { 1604 if (iocg->wait_since) { 1605 iocg->stat.wait_us += now->now - iocg->wait_since; 1606 iocg->wait_since = 0; 1607 } 1608 return; 1609 } 1610 1611 if (!iocg->wait_since) 1612 iocg->wait_since = now->now; 1613 1614 if (WARN_ON_ONCE(ctx.vbudget >= 0)) 1615 return; 1616 1617 /* determine next wakeup, add a timer margin to guarantee chunking */ 1618 vshortage = -ctx.vbudget; 1619 expires = now->now_ns + 1620 DIV64_U64_ROUND_UP(vshortage, ioc->vtime_base_rate) * 1621 NSEC_PER_USEC; 1622 expires += ioc->timer_slack_ns; 1623 1624 /* if already active and close enough, don't bother */ 1625 oexpires = ktime_to_ns(hrtimer_get_softexpires(&iocg->waitq_timer)); 1626 if (hrtimer_is_queued(&iocg->waitq_timer) && 1627 abs(oexpires - expires) <= ioc->timer_slack_ns) 1628 return; 1629 1630 hrtimer_start_range_ns(&iocg->waitq_timer, ns_to_ktime(expires), 1631 ioc->timer_slack_ns, HRTIMER_MODE_ABS); 1632 } 1633 1634 static enum hrtimer_restart iocg_waitq_timer_fn(struct hrtimer *timer) 1635 { 1636 struct ioc_gq *iocg = container_of(timer, struct ioc_gq, waitq_timer); 1637 bool pay_debt = READ_ONCE(iocg->abs_vdebt); 1638 struct ioc_now now; 1639 unsigned long flags; 1640 1641 ioc_now(iocg->ioc, &now); 1642 1643 if (pay_debt) { 1644 spin_lock_irqsave(&iocg->ioc->lock, flags); 1645 spin_lock(&iocg->waitq.lock); 1646 iocg_kick_waitq(iocg, pay_debt, &now); 1647 spin_unlock(&iocg->waitq.lock); 1648 spin_unlock_irqrestore(&iocg->ioc->lock, flags); 1649 } else { 1650 spin_lock_irqsave(&iocg->waitq.lock, flags); 1651 iocg_kick_waitq(iocg, pay_debt, &now); 1652 spin_unlock_irqrestore(&iocg->waitq.lock, flags); 1653 } 1654 1655 return HRTIMER_NORESTART; 1656 } 1657 1658 static void ioc_lat_stat(struct ioc *ioc, u32 *missed_ppm_ar, u32 *rq_wait_pct_p, 1659 u32 *nr_done) 1660 { 1661 u32 nr_met[2] = { }; 1662 u32 nr_missed[2] = { }; 1663 u64 rq_wait_ns = 0; 1664 int cpu, rw; 1665 1666 for_each_possible_cpu(cpu) { 1667 struct ioc_pcpu_stat *stat = per_cpu_ptr(ioc->pcpu_stat, cpu); 1668 u64 this_rq_wait_ns; 1669 1670 for (rw = READ; rw <= WRITE; rw++) { 1671 u32 this_met = local_read(&stat->missed[rw].nr_met); 1672 u32 this_missed = local_read(&stat->missed[rw].nr_missed); 1673 1674 nr_met[rw] += this_met - stat->missed[rw].last_met; 1675 nr_missed[rw] += this_missed - stat->missed[rw].last_missed; 1676 stat->missed[rw].last_met = this_met; 1677 stat->missed[rw].last_missed = this_missed; 1678 } 1679 1680 this_rq_wait_ns = local64_read(&stat->rq_wait_ns); 1681 rq_wait_ns += this_rq_wait_ns - stat->last_rq_wait_ns; 1682 stat->last_rq_wait_ns = this_rq_wait_ns; 1683 } 1684 1685 for (rw = READ; rw <= WRITE; rw++) { 1686 if (nr_met[rw] + nr_missed[rw]) 1687 missed_ppm_ar[rw] = 1688 DIV64_U64_ROUND_UP((u64)nr_missed[rw] * MILLION, 1689 nr_met[rw] + nr_missed[rw]); 1690 else 1691 missed_ppm_ar[rw] = 0; 1692 } 1693 1694 *rq_wait_pct_p = div64_u64(rq_wait_ns * 100, 1695 ioc->period_us * NSEC_PER_USEC); 1696 1697 *nr_done = nr_met[READ] + nr_met[WRITE] + nr_missed[READ] + nr_missed[WRITE]; 1698 } 1699 1700 /* was iocg idle this period? */ 1701 static bool iocg_is_idle(struct ioc_gq *iocg) 1702 { 1703 struct ioc *ioc = iocg->ioc; 1704 1705 /* did something get issued this period? */ 1706 if (atomic64_read(&iocg->active_period) == 1707 atomic64_read(&ioc->cur_period)) 1708 return false; 1709 1710 /* is something in flight? */ 1711 if (atomic64_read(&iocg->done_vtime) != atomic64_read(&iocg->vtime)) 1712 return false; 1713 1714 return true; 1715 } 1716 1717 /* 1718 * Call this function on the target leaf @iocg's to build pre-order traversal 1719 * list of all the ancestors in @inner_walk. The inner nodes are linked through 1720 * ->walk_list and the caller is responsible for dissolving the list after use. 1721 */ 1722 static void iocg_build_inner_walk(struct ioc_gq *iocg, 1723 struct list_head *inner_walk) 1724 { 1725 int lvl; 1726 1727 WARN_ON_ONCE(!list_empty(&iocg->walk_list)); 1728 1729 /* find the first ancestor which hasn't been visited yet */ 1730 for (lvl = iocg->level - 1; lvl >= 0; lvl--) { 1731 if (!list_empty(&iocg->ancestors[lvl]->walk_list)) 1732 break; 1733 } 1734 1735 /* walk down and visit the inner nodes to get pre-order traversal */ 1736 while (++lvl <= iocg->level - 1) { 1737 struct ioc_gq *inner = iocg->ancestors[lvl]; 1738 1739 /* record traversal order */ 1740 list_add_tail(&inner->walk_list, inner_walk); 1741 } 1742 } 1743 1744 /* propagate the deltas to the parent */ 1745 static void iocg_flush_stat_upward(struct ioc_gq *iocg) 1746 { 1747 if (iocg->level > 0) { 1748 struct iocg_stat *parent_stat = 1749 &iocg->ancestors[iocg->level - 1]->stat; 1750 1751 parent_stat->usage_us += 1752 iocg->stat.usage_us - iocg->last_stat.usage_us; 1753 parent_stat->wait_us += 1754 iocg->stat.wait_us - iocg->last_stat.wait_us; 1755 parent_stat->indebt_us += 1756 iocg->stat.indebt_us - iocg->last_stat.indebt_us; 1757 parent_stat->indelay_us += 1758 iocg->stat.indelay_us - iocg->last_stat.indelay_us; 1759 } 1760 1761 iocg->last_stat = iocg->stat; 1762 } 1763 1764 /* collect per-cpu counters and propagate the deltas to the parent */ 1765 static void iocg_flush_stat_leaf(struct ioc_gq *iocg, struct ioc_now *now) 1766 { 1767 struct ioc *ioc = iocg->ioc; 1768 u64 abs_vusage = 0; 1769 u64 vusage_delta; 1770 int cpu; 1771 1772 lockdep_assert_held(&iocg->ioc->lock); 1773 1774 /* collect per-cpu counters */ 1775 for_each_possible_cpu(cpu) { 1776 abs_vusage += local64_read( 1777 per_cpu_ptr(&iocg->pcpu_stat->abs_vusage, cpu)); 1778 } 1779 vusage_delta = abs_vusage - iocg->last_stat_abs_vusage; 1780 iocg->last_stat_abs_vusage = abs_vusage; 1781 1782 iocg->usage_delta_us = div64_u64(vusage_delta, ioc->vtime_base_rate); 1783 iocg->stat.usage_us += iocg->usage_delta_us; 1784 1785 iocg_flush_stat_upward(iocg); 1786 } 1787 1788 /* get stat counters ready for reading on all active iocgs */ 1789 static void iocg_flush_stat(struct list_head *target_iocgs, struct ioc_now *now) 1790 { 1791 LIST_HEAD(inner_walk); 1792 struct ioc_gq *iocg, *tiocg; 1793 1794 /* flush leaves and build inner node walk list */ 1795 list_for_each_entry(iocg, target_iocgs, active_list) { 1796 iocg_flush_stat_leaf(iocg, now); 1797 iocg_build_inner_walk(iocg, &inner_walk); 1798 } 1799 1800 /* keep flushing upwards by walking the inner list backwards */ 1801 list_for_each_entry_safe_reverse(iocg, tiocg, &inner_walk, walk_list) { 1802 iocg_flush_stat_upward(iocg); 1803 list_del_init(&iocg->walk_list); 1804 } 1805 } 1806 1807 /* 1808 * Determine what @iocg's hweight_inuse should be after donating unused 1809 * capacity. @hwm is the upper bound and used to signal no donation. This 1810 * function also throws away @iocg's excess budget. 1811 */ 1812 static u32 hweight_after_donation(struct ioc_gq *iocg, u32 old_hwi, u32 hwm, 1813 u32 usage, struct ioc_now *now) 1814 { 1815 struct ioc *ioc = iocg->ioc; 1816 u64 vtime = atomic64_read(&iocg->vtime); 1817 s64 excess, delta, target, new_hwi; 1818 1819 /* debt handling owns inuse for debtors */ 1820 if (iocg->abs_vdebt) 1821 return 1; 1822 1823 /* see whether minimum margin requirement is met */ 1824 if (waitqueue_active(&iocg->waitq) || 1825 time_after64(vtime, now->vnow - ioc->margins.min)) 1826 return hwm; 1827 1828 /* throw away excess above target */ 1829 excess = now->vnow - vtime - ioc->margins.target; 1830 if (excess > 0) { 1831 atomic64_add(excess, &iocg->vtime); 1832 atomic64_add(excess, &iocg->done_vtime); 1833 vtime += excess; 1834 ioc->vtime_err -= div64_u64(excess * old_hwi, WEIGHT_ONE); 1835 } 1836 1837 /* 1838 * Let's say the distance between iocg's and device's vtimes as a 1839 * fraction of period duration is delta. Assuming that the iocg will 1840 * consume the usage determined above, we want to determine new_hwi so 1841 * that delta equals MARGIN_TARGET at the end of the next period. 1842 * 1843 * We need to execute usage worth of IOs while spending the sum of the 1844 * new budget (1 - MARGIN_TARGET) and the leftover from the last period 1845 * (delta): 1846 * 1847 * usage = (1 - MARGIN_TARGET + delta) * new_hwi 1848 * 1849 * Therefore, the new_hwi is: 1850 * 1851 * new_hwi = usage / (1 - MARGIN_TARGET + delta) 1852 */ 1853 delta = div64_s64(WEIGHT_ONE * (now->vnow - vtime), 1854 now->vnow - ioc->period_at_vtime); 1855 target = WEIGHT_ONE * MARGIN_TARGET_PCT / 100; 1856 new_hwi = div64_s64(WEIGHT_ONE * usage, WEIGHT_ONE - target + delta); 1857 1858 return clamp_t(s64, new_hwi, 1, hwm); 1859 } 1860 1861 /* 1862 * For work-conservation, an iocg which isn't using all of its share should 1863 * donate the leftover to other iocgs. There are two ways to achieve this - 1. 1864 * bumping up vrate accordingly 2. lowering the donating iocg's inuse weight. 1865 * 1866 * #1 is mathematically simpler but has the drawback of requiring synchronous 1867 * global hweight_inuse updates when idle iocg's get activated or inuse weights 1868 * change due to donation snapbacks as it has the possibility of grossly 1869 * overshooting what's allowed by the model and vrate. 1870 * 1871 * #2 is inherently safe with local operations. The donating iocg can easily 1872 * snap back to higher weights when needed without worrying about impacts on 1873 * other nodes as the impacts will be inherently correct. This also makes idle 1874 * iocg activations safe. The only effect activations have is decreasing 1875 * hweight_inuse of others, the right solution to which is for those iocgs to 1876 * snap back to higher weights. 1877 * 1878 * So, we go with #2. The challenge is calculating how each donating iocg's 1879 * inuse should be adjusted to achieve the target donation amounts. This is done 1880 * using Andy's method described in the following pdf. 1881 * 1882 * https://drive.google.com/file/d/1PsJwxPFtjUnwOY1QJ5AeICCcsL7BM3bo 1883 * 1884 * Given the weights and target after-donation hweight_inuse values, Andy's 1885 * method determines how the proportional distribution should look like at each 1886 * sibling level to maintain the relative relationship between all non-donating 1887 * pairs. To roughly summarize, it divides the tree into donating and 1888 * non-donating parts, calculates global donation rate which is used to 1889 * determine the target hweight_inuse for each node, and then derives per-level 1890 * proportions. 1891 * 1892 * The following pdf shows that global distribution calculated this way can be 1893 * achieved by scaling inuse weights of donating leaves and propagating the 1894 * adjustments upwards proportionally. 1895 * 1896 * https://drive.google.com/file/d/1vONz1-fzVO7oY5DXXsLjSxEtYYQbOvsE 1897 * 1898 * Combining the above two, we can determine how each leaf iocg's inuse should 1899 * be adjusted to achieve the target donation. 1900 * 1901 * https://drive.google.com/file/d/1WcrltBOSPN0qXVdBgnKm4mdp9FhuEFQN 1902 * 1903 * The inline comments use symbols from the last pdf. 1904 * 1905 * b is the sum of the absolute budgets in the subtree. 1 for the root node. 1906 * f is the sum of the absolute budgets of non-donating nodes in the subtree. 1907 * t is the sum of the absolute budgets of donating nodes in the subtree. 1908 * w is the weight of the node. w = w_f + w_t 1909 * w_f is the non-donating portion of w. w_f = w * f / b 1910 * w_b is the donating portion of w. w_t = w * t / b 1911 * s is the sum of all sibling weights. s = Sum(w) for siblings 1912 * s_f and s_t are the non-donating and donating portions of s. 1913 * 1914 * Subscript p denotes the parent's counterpart and ' the adjusted value - e.g. 1915 * w_pt is the donating portion of the parent's weight and w'_pt the same value 1916 * after adjustments. Subscript r denotes the root node's values. 1917 */ 1918 static void transfer_surpluses(struct list_head *surpluses, struct ioc_now *now) 1919 { 1920 LIST_HEAD(over_hwa); 1921 LIST_HEAD(inner_walk); 1922 struct ioc_gq *iocg, *tiocg, *root_iocg; 1923 u32 after_sum, over_sum, over_target, gamma; 1924 1925 /* 1926 * It's pretty unlikely but possible for the total sum of 1927 * hweight_after_donation's to be higher than WEIGHT_ONE, which will 1928 * confuse the following calculations. If such condition is detected, 1929 * scale down everyone over its full share equally to keep the sum below 1930 * WEIGHT_ONE. 1931 */ 1932 after_sum = 0; 1933 over_sum = 0; 1934 list_for_each_entry(iocg, surpluses, surplus_list) { 1935 u32 hwa; 1936 1937 current_hweight(iocg, &hwa, NULL); 1938 after_sum += iocg->hweight_after_donation; 1939 1940 if (iocg->hweight_after_donation > hwa) { 1941 over_sum += iocg->hweight_after_donation; 1942 list_add(&iocg->walk_list, &over_hwa); 1943 } 1944 } 1945 1946 if (after_sum >= WEIGHT_ONE) { 1947 /* 1948 * The delta should be deducted from the over_sum, calculate 1949 * target over_sum value. 1950 */ 1951 u32 over_delta = after_sum - (WEIGHT_ONE - 1); 1952 WARN_ON_ONCE(over_sum <= over_delta); 1953 over_target = over_sum - over_delta; 1954 } else { 1955 over_target = 0; 1956 } 1957 1958 list_for_each_entry_safe(iocg, tiocg, &over_hwa, walk_list) { 1959 if (over_target) 1960 iocg->hweight_after_donation = 1961 div_u64((u64)iocg->hweight_after_donation * 1962 over_target, over_sum); 1963 list_del_init(&iocg->walk_list); 1964 } 1965 1966 /* 1967 * Build pre-order inner node walk list and prepare for donation 1968 * adjustment calculations. 1969 */ 1970 list_for_each_entry(iocg, surpluses, surplus_list) { 1971 iocg_build_inner_walk(iocg, &inner_walk); 1972 } 1973 1974 root_iocg = list_first_entry(&inner_walk, struct ioc_gq, walk_list); 1975 WARN_ON_ONCE(root_iocg->level > 0); 1976 1977 list_for_each_entry(iocg, &inner_walk, walk_list) { 1978 iocg->child_adjusted_sum = 0; 1979 iocg->hweight_donating = 0; 1980 iocg->hweight_after_donation = 0; 1981 } 1982 1983 /* 1984 * Propagate the donating budget (b_t) and after donation budget (b'_t) 1985 * up the hierarchy. 1986 */ 1987 list_for_each_entry(iocg, surpluses, surplus_list) { 1988 struct ioc_gq *parent = iocg->ancestors[iocg->level - 1]; 1989 1990 parent->hweight_donating += iocg->hweight_donating; 1991 parent->hweight_after_donation += iocg->hweight_after_donation; 1992 } 1993 1994 list_for_each_entry_reverse(iocg, &inner_walk, walk_list) { 1995 if (iocg->level > 0) { 1996 struct ioc_gq *parent = iocg->ancestors[iocg->level - 1]; 1997 1998 parent->hweight_donating += iocg->hweight_donating; 1999 parent->hweight_after_donation += iocg->hweight_after_donation; 2000 } 2001 } 2002 2003 /* 2004 * Calculate inner hwa's (b) and make sure the donation values are 2005 * within the accepted ranges as we're doing low res calculations with 2006 * roundups. 2007 */ 2008 list_for_each_entry(iocg, &inner_walk, walk_list) { 2009 if (iocg->level) { 2010 struct ioc_gq *parent = iocg->ancestors[iocg->level - 1]; 2011 2012 iocg->hweight_active = DIV64_U64_ROUND_UP( 2013 (u64)parent->hweight_active * iocg->active, 2014 parent->child_active_sum); 2015 2016 } 2017 2018 iocg->hweight_donating = min(iocg->hweight_donating, 2019 iocg->hweight_active); 2020 iocg->hweight_after_donation = min(iocg->hweight_after_donation, 2021 iocg->hweight_donating - 1); 2022 if (WARN_ON_ONCE(iocg->hweight_active <= 1 || 2023 iocg->hweight_donating <= 1 || 2024 iocg->hweight_after_donation == 0)) { 2025 pr_warn("iocg: invalid donation weights in "); 2026 pr_cont_cgroup_path(iocg_to_blkg(iocg)->blkcg->css.cgroup); 2027 pr_cont(": active=%u donating=%u after=%u\n", 2028 iocg->hweight_active, iocg->hweight_donating, 2029 iocg->hweight_after_donation); 2030 goto out; 2031 } 2032 } 2033 2034 /* 2035 * Calculate the global donation rate (gamma) - the rate to adjust 2036 * non-donating budgets by. 2037 * 2038 * No need to use 64bit multiplication here as the first operand is 2039 * guaranteed to be smaller than WEIGHT_ONE (1<<16). 2040 * 2041 * We know that there are beneficiary nodes and the sum of the donating 2042 * hweights can't be whole; however, due to the round-ups during hweight 2043 * calculations, root_iocg->hweight_donating might still end up equal to 2044 * or greater than whole. Limit the range when calculating the divider. 2045 * 2046 * gamma = (1 - t_r') / (1 - t_r) 2047 */ 2048 gamma = DIV_ROUND_UP( 2049 (WEIGHT_ONE - root_iocg->hweight_after_donation) * WEIGHT_ONE, 2050 WEIGHT_ONE - min_t(u32, root_iocg->hweight_donating, WEIGHT_ONE - 1)); 2051 2052 /* 2053 * Calculate adjusted hwi, child_adjusted_sum and inuse for the inner 2054 * nodes. 2055 */ 2056 list_for_each_entry(iocg, &inner_walk, walk_list) { 2057 struct ioc_gq *parent; 2058 u32 inuse, wpt, wptp; 2059 u64 st, sf; 2060 2061 if (iocg->level == 0) { 2062 /* adjusted weight sum for 1st level: s' = s * b_pf / b'_pf */ 2063 iocg->child_adjusted_sum = DIV64_U64_ROUND_UP( 2064 iocg->child_active_sum * (WEIGHT_ONE - iocg->hweight_donating), 2065 WEIGHT_ONE - iocg->hweight_after_donation); 2066 continue; 2067 } 2068 2069 parent = iocg->ancestors[iocg->level - 1]; 2070 2071 /* b' = gamma * b_f + b_t' */ 2072 iocg->hweight_inuse = DIV64_U64_ROUND_UP( 2073 (u64)gamma * (iocg->hweight_active - iocg->hweight_donating), 2074 WEIGHT_ONE) + iocg->hweight_after_donation; 2075 2076 /* w' = s' * b' / b'_p */ 2077 inuse = DIV64_U64_ROUND_UP( 2078 (u64)parent->child_adjusted_sum * iocg->hweight_inuse, 2079 parent->hweight_inuse); 2080 2081 /* adjusted weight sum for children: s' = s_f + s_t * w'_pt / w_pt */ 2082 st = DIV64_U64_ROUND_UP( 2083 iocg->child_active_sum * iocg->hweight_donating, 2084 iocg->hweight_active); 2085 sf = iocg->child_active_sum - st; 2086 wpt = DIV64_U64_ROUND_UP( 2087 (u64)iocg->active * iocg->hweight_donating, 2088 iocg->hweight_active); 2089 wptp = DIV64_U64_ROUND_UP( 2090 (u64)inuse * iocg->hweight_after_donation, 2091 iocg->hweight_inuse); 2092 2093 iocg->child_adjusted_sum = sf + DIV64_U64_ROUND_UP(st * wptp, wpt); 2094 } 2095 2096 /* 2097 * All inner nodes now have ->hweight_inuse and ->child_adjusted_sum and 2098 * we can finally determine leaf adjustments. 2099 */ 2100 list_for_each_entry(iocg, surpluses, surplus_list) { 2101 struct ioc_gq *parent = iocg->ancestors[iocg->level - 1]; 2102 u32 inuse; 2103 2104 /* 2105 * In-debt iocgs participated in the donation calculation with 2106 * the minimum target hweight_inuse. Configuring inuse 2107 * accordingly would work fine but debt handling expects 2108 * @iocg->inuse stay at the minimum and we don't wanna 2109 * interfere. 2110 */ 2111 if (iocg->abs_vdebt) { 2112 WARN_ON_ONCE(iocg->inuse > 1); 2113 continue; 2114 } 2115 2116 /* w' = s' * b' / b'_p, note that b' == b'_t for donating leaves */ 2117 inuse = DIV64_U64_ROUND_UP( 2118 parent->child_adjusted_sum * iocg->hweight_after_donation, 2119 parent->hweight_inuse); 2120 2121 TRACE_IOCG_PATH(inuse_transfer, iocg, now, 2122 iocg->inuse, inuse, 2123 iocg_hweight_cache_inuse(iocg), 2124 iocg->hweight_after_donation); 2125 2126 __propagate_weights(iocg, iocg->active, inuse, true, now); 2127 } 2128 2129 out: 2130 /* walk list should be dissolved after use */ 2131 list_for_each_entry_safe(iocg, tiocg, &inner_walk, walk_list) 2132 list_del_init(&iocg->walk_list); 2133 } 2134 2135 /* 2136 * A low weight iocg can amass a large amount of debt, for example, when 2137 * anonymous memory gets reclaimed aggressively. If the system has a lot of 2138 * memory paired with a slow IO device, the debt can span multiple seconds or 2139 * more. If there are no other subsequent IO issuers, the in-debt iocg may end 2140 * up blocked paying its debt while the IO device is idle. 2141 * 2142 * The following protects against such cases. If the device has been 2143 * sufficiently idle for a while, the debts are halved and delays are 2144 * recalculated. 2145 */ 2146 static void ioc_forgive_debts(struct ioc *ioc, u64 usage_us_sum, int nr_debtors, 2147 struct ioc_now *now) 2148 { 2149 struct ioc_gq *iocg; 2150 u64 dur, usage_pct, nr_cycles, nr_cycles_shift; 2151 2152 /* if no debtor, reset the cycle */ 2153 if (!nr_debtors) { 2154 ioc->dfgv_period_at = now->now; 2155 ioc->dfgv_period_rem = 0; 2156 ioc->dfgv_usage_us_sum = 0; 2157 return; 2158 } 2159 2160 /* 2161 * Debtors can pass through a lot of writes choking the device and we 2162 * don't want to be forgiving debts while the device is struggling from 2163 * write bursts. If we're missing latency targets, consider the device 2164 * fully utilized. 2165 */ 2166 if (ioc->busy_level > 0) 2167 usage_us_sum = max_t(u64, usage_us_sum, ioc->period_us); 2168 2169 ioc->dfgv_usage_us_sum += usage_us_sum; 2170 if (time_before64(now->now, ioc->dfgv_period_at + DFGV_PERIOD)) 2171 return; 2172 2173 /* 2174 * At least DFGV_PERIOD has passed since the last period. Calculate the 2175 * average usage and reset the period counters. 2176 */ 2177 dur = now->now - ioc->dfgv_period_at; 2178 usage_pct = div64_u64(100 * ioc->dfgv_usage_us_sum, dur); 2179 2180 ioc->dfgv_period_at = now->now; 2181 ioc->dfgv_usage_us_sum = 0; 2182 2183 /* if was too busy, reset everything */ 2184 if (usage_pct > DFGV_USAGE_PCT) { 2185 ioc->dfgv_period_rem = 0; 2186 return; 2187 } 2188 2189 /* 2190 * Usage is lower than threshold. Let's forgive some debts. Debt 2191 * forgiveness runs off of the usual ioc timer but its period usually 2192 * doesn't match ioc's. Compensate the difference by performing the 2193 * reduction as many times as would fit in the duration since the last 2194 * run and carrying over the left-over duration in @ioc->dfgv_period_rem 2195 * - if ioc period is 75% of DFGV_PERIOD, one out of three consecutive 2196 * reductions is doubled. 2197 */ 2198 nr_cycles = dur + ioc->dfgv_period_rem; 2199 ioc->dfgv_period_rem = do_div(nr_cycles, DFGV_PERIOD); 2200 2201 list_for_each_entry(iocg, &ioc->active_iocgs, active_list) { 2202 u64 __maybe_unused old_debt, __maybe_unused old_delay; 2203 2204 if (!iocg->abs_vdebt && !iocg->delay) 2205 continue; 2206 2207 spin_lock(&iocg->waitq.lock); 2208 2209 old_debt = iocg->abs_vdebt; 2210 old_delay = iocg->delay; 2211 2212 nr_cycles_shift = min_t(u64, nr_cycles, BITS_PER_LONG - 1); 2213 if (iocg->abs_vdebt) 2214 iocg->abs_vdebt = iocg->abs_vdebt >> nr_cycles_shift ?: 1; 2215 2216 if (iocg->delay) 2217 iocg->delay = iocg->delay >> nr_cycles_shift ?: 1; 2218 2219 iocg_kick_waitq(iocg, true, now); 2220 2221 TRACE_IOCG_PATH(iocg_forgive_debt, iocg, now, usage_pct, 2222 old_debt, iocg->abs_vdebt, 2223 old_delay, iocg->delay); 2224 2225 spin_unlock(&iocg->waitq.lock); 2226 } 2227 } 2228 2229 /* 2230 * Check the active iocgs' state to avoid oversleeping and deactive 2231 * idle iocgs. 2232 * 2233 * Since waiters determine the sleep durations based on the vrate 2234 * they saw at the time of sleep, if vrate has increased, some 2235 * waiters could be sleeping for too long. Wake up tardy waiters 2236 * which should have woken up in the last period and expire idle 2237 * iocgs. 2238 */ 2239 static int ioc_check_iocgs(struct ioc *ioc, struct ioc_now *now) 2240 { 2241 int nr_debtors = 0; 2242 struct ioc_gq *iocg, *tiocg; 2243 2244 list_for_each_entry_safe(iocg, tiocg, &ioc->active_iocgs, active_list) { 2245 if (!waitqueue_active(&iocg->waitq) && !iocg->abs_vdebt && 2246 !iocg->delay && !iocg_is_idle(iocg)) 2247 continue; 2248 2249 spin_lock(&iocg->waitq.lock); 2250 2251 /* flush wait and indebt stat deltas */ 2252 if (iocg->wait_since) { 2253 iocg->stat.wait_us += now->now - iocg->wait_since; 2254 iocg->wait_since = now->now; 2255 } 2256 if (iocg->indebt_since) { 2257 iocg->stat.indebt_us += 2258 now->now - iocg->indebt_since; 2259 iocg->indebt_since = now->now; 2260 } 2261 if (iocg->indelay_since) { 2262 iocg->stat.indelay_us += 2263 now->now - iocg->indelay_since; 2264 iocg->indelay_since = now->now; 2265 } 2266 2267 if (waitqueue_active(&iocg->waitq) || iocg->abs_vdebt || 2268 iocg->delay) { 2269 /* might be oversleeping vtime / hweight changes, kick */ 2270 iocg_kick_waitq(iocg, true, now); 2271 if (iocg->abs_vdebt || iocg->delay) 2272 nr_debtors++; 2273 } else if (iocg_is_idle(iocg)) { 2274 /* no waiter and idle, deactivate */ 2275 u64 vtime = atomic64_read(&iocg->vtime); 2276 s64 excess; 2277 2278 /* 2279 * @iocg has been inactive for a full duration and will 2280 * have a high budget. Account anything above target as 2281 * error and throw away. On reactivation, it'll start 2282 * with the target budget. 2283 */ 2284 excess = now->vnow - vtime - ioc->margins.target; 2285 if (excess > 0) { 2286 u32 old_hwi; 2287 2288 current_hweight(iocg, NULL, &old_hwi); 2289 ioc->vtime_err -= div64_u64(excess * old_hwi, 2290 WEIGHT_ONE); 2291 } 2292 2293 TRACE_IOCG_PATH(iocg_idle, iocg, now, 2294 atomic64_read(&iocg->active_period), 2295 atomic64_read(&ioc->cur_period), vtime); 2296 __propagate_weights(iocg, 0, 0, false, now); 2297 list_del_init(&iocg->active_list); 2298 } 2299 2300 spin_unlock(&iocg->waitq.lock); 2301 } 2302 2303 commit_weights(ioc); 2304 return nr_debtors; 2305 } 2306 2307 static void ioc_timer_fn(struct timer_list *timer) 2308 { 2309 struct ioc *ioc = container_of(timer, struct ioc, timer); 2310 struct ioc_gq *iocg, *tiocg; 2311 struct ioc_now now; 2312 LIST_HEAD(surpluses); 2313 int nr_debtors, nr_shortages = 0, nr_lagging = 0; 2314 u64 usage_us_sum = 0; 2315 u32 ppm_rthr; 2316 u32 ppm_wthr; 2317 u32 missed_ppm[2], rq_wait_pct, nr_done; 2318 u64 period_vtime; 2319 int prev_busy_level; 2320 2321 /* how were the latencies during the period? */ 2322 ioc_lat_stat(ioc, missed_ppm, &rq_wait_pct, &nr_done); 2323 2324 /* take care of active iocgs */ 2325 spin_lock_irq(&ioc->lock); 2326 2327 ppm_rthr = MILLION - ioc->params.qos[QOS_RPPM]; 2328 ppm_wthr = MILLION - ioc->params.qos[QOS_WPPM]; 2329 ioc_now(ioc, &now); 2330 2331 period_vtime = now.vnow - ioc->period_at_vtime; 2332 if (WARN_ON_ONCE(!period_vtime)) { 2333 spin_unlock_irq(&ioc->lock); 2334 return; 2335 } 2336 2337 nr_debtors = ioc_check_iocgs(ioc, &now); 2338 2339 /* 2340 * Wait and indebt stat are flushed above and the donation calculation 2341 * below needs updated usage stat. Let's bring stat up-to-date. 2342 */ 2343 iocg_flush_stat(&ioc->active_iocgs, &now); 2344 2345 /* calc usage and see whether some weights need to be moved around */ 2346 list_for_each_entry(iocg, &ioc->active_iocgs, active_list) { 2347 u64 vdone, vtime, usage_us; 2348 u32 hw_active, hw_inuse; 2349 2350 /* 2351 * Collect unused and wind vtime closer to vnow to prevent 2352 * iocgs from accumulating a large amount of budget. 2353 */ 2354 vdone = atomic64_read(&iocg->done_vtime); 2355 vtime = atomic64_read(&iocg->vtime); 2356 current_hweight(iocg, &hw_active, &hw_inuse); 2357 2358 /* 2359 * Latency QoS detection doesn't account for IOs which are 2360 * in-flight for longer than a period. Detect them by 2361 * comparing vdone against period start. If lagging behind 2362 * IOs from past periods, don't increase vrate. 2363 */ 2364 if ((ppm_rthr != MILLION || ppm_wthr != MILLION) && 2365 !atomic_read(&iocg_to_blkg(iocg)->use_delay) && 2366 time_after64(vtime, vdone) && 2367 time_after64(vtime, now.vnow - 2368 MAX_LAGGING_PERIODS * period_vtime) && 2369 time_before64(vdone, now.vnow - period_vtime)) 2370 nr_lagging++; 2371 2372 /* 2373 * Determine absolute usage factoring in in-flight IOs to avoid 2374 * high-latency completions appearing as idle. 2375 */ 2376 usage_us = iocg->usage_delta_us; 2377 usage_us_sum += usage_us; 2378 2379 /* see whether there's surplus vtime */ 2380 WARN_ON_ONCE(!list_empty(&iocg->surplus_list)); 2381 if (hw_inuse < hw_active || 2382 (!waitqueue_active(&iocg->waitq) && 2383 time_before64(vtime, now.vnow - ioc->margins.low))) { 2384 u32 hwa, old_hwi, hwm, new_hwi, usage; 2385 u64 usage_dur; 2386 2387 if (vdone != vtime) { 2388 u64 inflight_us = DIV64_U64_ROUND_UP( 2389 cost_to_abs_cost(vtime - vdone, hw_inuse), 2390 ioc->vtime_base_rate); 2391 2392 usage_us = max(usage_us, inflight_us); 2393 } 2394 2395 /* convert to hweight based usage ratio */ 2396 if (time_after64(iocg->activated_at, ioc->period_at)) 2397 usage_dur = max_t(u64, now.now - iocg->activated_at, 1); 2398 else 2399 usage_dur = max_t(u64, now.now - ioc->period_at, 1); 2400 2401 usage = clamp(DIV64_U64_ROUND_UP(usage_us * WEIGHT_ONE, usage_dur), 2402 1, WEIGHT_ONE); 2403 2404 /* 2405 * Already donating or accumulated enough to start. 2406 * Determine the donation amount. 2407 */ 2408 current_hweight(iocg, &hwa, &old_hwi); 2409 hwm = current_hweight_max(iocg); 2410 new_hwi = hweight_after_donation(iocg, old_hwi, hwm, 2411 usage, &now); 2412 /* 2413 * Donation calculation assumes hweight_after_donation 2414 * to be positive, a condition that a donor w/ hwa < 2 2415 * can't meet. Don't bother with donation if hwa is 2416 * below 2. It's not gonna make a meaningful difference 2417 * anyway. 2418 */ 2419 if (new_hwi < hwm && hwa >= 2) { 2420 iocg->hweight_donating = hwa; 2421 iocg->hweight_after_donation = new_hwi; 2422 list_add(&iocg->surplus_list, &surpluses); 2423 } else if (!iocg->abs_vdebt) { 2424 /* 2425 * @iocg doesn't have enough to donate. Reset 2426 * its inuse to active. 2427 * 2428 * Don't reset debtors as their inuse's are 2429 * owned by debt handling. This shouldn't affect 2430 * donation calculuation in any meaningful way 2431 * as @iocg doesn't have a meaningful amount of 2432 * share anyway. 2433 */ 2434 TRACE_IOCG_PATH(inuse_shortage, iocg, &now, 2435 iocg->inuse, iocg->active, 2436 old_hwi, new_hwi); 2437 2438 __propagate_weights(iocg, iocg->active, 2439 iocg->active, true, &now); 2440 nr_shortages++; 2441 } 2442 } else { 2443 /* genuinely short on vtime */ 2444 nr_shortages++; 2445 } 2446 } 2447 2448 if (!list_empty(&surpluses) && nr_shortages) 2449 transfer_surpluses(&surpluses, &now); 2450 2451 commit_weights(ioc); 2452 2453 /* surplus list should be dissolved after use */ 2454 list_for_each_entry_safe(iocg, tiocg, &surpluses, surplus_list) 2455 list_del_init(&iocg->surplus_list); 2456 2457 /* 2458 * If q is getting clogged or we're missing too much, we're issuing 2459 * too much IO and should lower vtime rate. If we're not missing 2460 * and experiencing shortages but not surpluses, we're too stingy 2461 * and should increase vtime rate. 2462 */ 2463 prev_busy_level = ioc->busy_level; 2464 if (!nr_done && nr_lagging) { 2465 /* 2466 * When there are lagging IOs but no completions, we don't 2467 * know if the IO latency will meet the QoS targets. The 2468 * disk might be saturated or not. We should not reset 2469 * busy_level to 0 (which would prevent vrate from scaling 2470 * up or down), but rather to keep it unchanged. 2471 */ 2472 } else if (rq_wait_pct > RQ_WAIT_BUSY_PCT || 2473 missed_ppm[READ] > ppm_rthr || 2474 missed_ppm[WRITE] > ppm_wthr) { 2475 /* clearly missing QoS targets, slow down vrate */ 2476 ioc->busy_level = max(ioc->busy_level, 0); 2477 ioc->busy_level++; 2478 } else if (rq_wait_pct <= RQ_WAIT_BUSY_PCT * UNBUSY_THR_PCT / 100 && 2479 missed_ppm[READ] <= ppm_rthr * UNBUSY_THR_PCT / 100 && 2480 missed_ppm[WRITE] <= ppm_wthr * UNBUSY_THR_PCT / 100) { 2481 /* QoS targets are being met with >25% margin */ 2482 if (nr_shortages) { 2483 /* 2484 * We're throttling while the device has spare 2485 * capacity. If vrate was being slowed down, stop. 2486 */ 2487 ioc->busy_level = min(ioc->busy_level, 0); 2488 2489 /* 2490 * If there are IOs spanning multiple periods, wait 2491 * them out before pushing the device harder. 2492 */ 2493 if (!nr_lagging) 2494 ioc->busy_level--; 2495 } else { 2496 /* 2497 * Nobody is being throttled and the users aren't 2498 * issuing enough IOs to saturate the device. We 2499 * simply don't know how close the device is to 2500 * saturation. Coast. 2501 */ 2502 ioc->busy_level = 0; 2503 } 2504 } else { 2505 /* inside the hysterisis margin, we're good */ 2506 ioc->busy_level = 0; 2507 } 2508 2509 ioc->busy_level = clamp(ioc->busy_level, -1000, 1000); 2510 2511 ioc_adjust_base_vrate(ioc, rq_wait_pct, nr_lagging, nr_shortages, 2512 prev_busy_level, missed_ppm); 2513 2514 ioc_refresh_params(ioc, false); 2515 2516 ioc_forgive_debts(ioc, usage_us_sum, nr_debtors, &now); 2517 2518 /* 2519 * This period is done. Move onto the next one. If nothing's 2520 * going on with the device, stop the timer. 2521 */ 2522 atomic64_inc(&ioc->cur_period); 2523 2524 if (ioc->running != IOC_STOP) { 2525 if (!list_empty(&ioc->active_iocgs)) { 2526 ioc_start_period(ioc, &now); 2527 } else { 2528 ioc->busy_level = 0; 2529 ioc->vtime_err = 0; 2530 ioc->running = IOC_IDLE; 2531 } 2532 2533 ioc_refresh_vrate(ioc, &now); 2534 } 2535 2536 spin_unlock_irq(&ioc->lock); 2537 } 2538 2539 static u64 adjust_inuse_and_calc_cost(struct ioc_gq *iocg, u64 vtime, 2540 u64 abs_cost, struct ioc_now *now) 2541 { 2542 struct ioc *ioc = iocg->ioc; 2543 struct ioc_margins *margins = &ioc->margins; 2544 u32 __maybe_unused old_inuse = iocg->inuse, __maybe_unused old_hwi; 2545 u32 hwi, adj_step; 2546 s64 margin; 2547 u64 cost, new_inuse; 2548 unsigned long flags; 2549 2550 current_hweight(iocg, NULL, &hwi); 2551 old_hwi = hwi; 2552 cost = abs_cost_to_cost(abs_cost, hwi); 2553 margin = now->vnow - vtime - cost; 2554 2555 /* debt handling owns inuse for debtors */ 2556 if (iocg->abs_vdebt) 2557 return cost; 2558 2559 /* 2560 * We only increase inuse during period and do so if the margin has 2561 * deteriorated since the previous adjustment. 2562 */ 2563 if (margin >= iocg->saved_margin || margin >= margins->low || 2564 iocg->inuse == iocg->active) 2565 return cost; 2566 2567 spin_lock_irqsave(&ioc->lock, flags); 2568 2569 /* we own inuse only when @iocg is in the normal active state */ 2570 if (iocg->abs_vdebt || list_empty(&iocg->active_list)) { 2571 spin_unlock_irqrestore(&ioc->lock, flags); 2572 return cost; 2573 } 2574 2575 /* 2576 * Bump up inuse till @abs_cost fits in the existing budget. 2577 * adj_step must be determined after acquiring ioc->lock - we might 2578 * have raced and lost to another thread for activation and could 2579 * be reading 0 iocg->active before ioc->lock which will lead to 2580 * infinite loop. 2581 */ 2582 new_inuse = iocg->inuse; 2583 adj_step = DIV_ROUND_UP(iocg->active * INUSE_ADJ_STEP_PCT, 100); 2584 do { 2585 new_inuse = new_inuse + adj_step; 2586 propagate_weights(iocg, iocg->active, new_inuse, true, now); 2587 current_hweight(iocg, NULL, &hwi); 2588 cost = abs_cost_to_cost(abs_cost, hwi); 2589 } while (time_after64(vtime + cost, now->vnow) && 2590 iocg->inuse != iocg->active); 2591 2592 spin_unlock_irqrestore(&ioc->lock, flags); 2593 2594 TRACE_IOCG_PATH(inuse_adjust, iocg, now, 2595 old_inuse, iocg->inuse, old_hwi, hwi); 2596 2597 return cost; 2598 } 2599 2600 static void calc_vtime_cost_builtin(struct bio *bio, struct ioc_gq *iocg, 2601 bool is_merge, u64 *costp) 2602 { 2603 struct ioc *ioc = iocg->ioc; 2604 u64 coef_seqio, coef_randio, coef_page; 2605 u64 pages = max_t(u64, bio_sectors(bio) >> IOC_SECT_TO_PAGE_SHIFT, 1); 2606 u64 seek_pages = 0; 2607 u64 cost = 0; 2608 2609 /* 2610 * FUA on a device without native support becomes a post-flush; 2611 * charge it like PREFLUSH from the flush coefficient. 2612 */ 2613 if (bio->bi_opf & REQ_PREFLUSH) 2614 cost += ioc->params.lcoefs[LCOEF_FLUSH]; 2615 if ((bio->bi_opf & REQ_FUA) && !bdev_fua(bio->bi_bdev)) 2616 cost += ioc->params.lcoefs[LCOEF_FLUSH]; 2617 2618 /* Can't calculate data cost for empty bio */ 2619 if (!bio->bi_iter.bi_size) 2620 goto out; 2621 2622 switch (bio_op(bio)) { 2623 case REQ_OP_READ: 2624 coef_seqio = ioc->params.lcoefs[LCOEF_RSEQIO]; 2625 coef_randio = ioc->params.lcoefs[LCOEF_RRANDIO]; 2626 coef_page = ioc->params.lcoefs[LCOEF_RPAGE]; 2627 break; 2628 case REQ_OP_ZONE_APPEND: 2629 case REQ_OP_WRITE: 2630 coef_seqio = ioc->params.lcoefs[LCOEF_WSEQIO]; 2631 coef_randio = ioc->params.lcoefs[LCOEF_WRANDIO]; 2632 coef_page = ioc->params.lcoefs[LCOEF_WPAGE]; 2633 break; 2634 default: 2635 goto out; 2636 } 2637 2638 if (iocg->cursor) { 2639 seek_pages = abs(bio->bi_iter.bi_sector - iocg->cursor); 2640 seek_pages >>= IOC_SECT_TO_PAGE_SHIFT; 2641 } 2642 2643 if (!is_merge) { 2644 if (seek_pages > LCOEF_RANDIO_PAGES) { 2645 cost += coef_randio; 2646 } else { 2647 cost += coef_seqio; 2648 } 2649 } 2650 cost += pages * coef_page; 2651 out: 2652 *costp = cost; 2653 } 2654 2655 static u64 calc_vtime_cost(struct bio *bio, struct ioc_gq *iocg, bool is_merge) 2656 { 2657 u64 cost; 2658 2659 calc_vtime_cost_builtin(bio, iocg, is_merge, &cost); 2660 return cost; 2661 } 2662 2663 static void calc_size_vtime_cost_builtin(struct request *rq, struct ioc *ioc, 2664 u64 *costp) 2665 { 2666 unsigned int pages = blk_rq_stats_sectors(rq) >> IOC_SECT_TO_PAGE_SHIFT; 2667 2668 switch (req_op(rq)) { 2669 case REQ_OP_READ: 2670 *costp = pages * ioc->params.lcoefs[LCOEF_RPAGE]; 2671 break; 2672 case REQ_OP_ZONE_APPEND: 2673 case REQ_OP_WRITE: 2674 *costp = pages * ioc->params.lcoefs[LCOEF_WPAGE]; 2675 break; 2676 default: 2677 *costp = 0; 2678 } 2679 } 2680 2681 static u64 calc_size_vtime_cost(struct request *rq, struct ioc *ioc) 2682 { 2683 u64 cost; 2684 2685 calc_size_vtime_cost_builtin(rq, ioc, &cost); 2686 return cost; 2687 } 2688 2689 enum over_budget_action { 2690 action_retry, 2691 action_commit, 2692 action_wait, 2693 action_return, 2694 }; 2695 2696 static enum over_budget_action 2697 iocg_handle_over_budget(struct rq_qos *rqos, struct ioc_gq *iocg, 2698 struct bio *bio, struct ioc_now *now, 2699 struct iocg_wait *wait, bool use_debt, bool ioc_locked, 2700 u64 abs_cost, u64 cost) 2701 { 2702 lockdep_assert_held(&iocg->waitq.lock); 2703 2704 /* 2705 * @iocg must stay activated for debt and waitq handling. Deactivation 2706 * is synchronized against both ioc->lock and waitq.lock and we won't 2707 * get deactivated as long as we're waiting or have debt, so we're good 2708 * if we're activated here. In the unlikely cases that we aren't, just 2709 * issue the IO. 2710 */ 2711 if (unlikely(list_empty(&iocg->active_list))) 2712 return action_commit; 2713 2714 /* 2715 * We're over budget. If @bio has to be issued regardless, remember 2716 * the abs_cost instead of advancing vtime. iocg_kick_waitq() will pay 2717 * off the debt before waking more IOs. 2718 * 2719 * This way, the debt is continuously paid off each period with the 2720 * actual budget available to the cgroup. If we just wound vtime, we 2721 * would incorrectly use the current hw_inuse for the entire amount 2722 * which, for example, can lead to the cgroup staying blocked for a 2723 * long time even with substantially raised hw_inuse. 2724 * 2725 * An iocg with vdebt should stay online so that the timer can keep 2726 * deducting its vdebt and [de]activate use_delay mechanism 2727 * accordingly. We don't want to race against the timer trying to 2728 * clear them and leave @iocg inactive w/ dangling use_delay heavily 2729 * penalizing the cgroup and its descendants. 2730 */ 2731 if (use_debt) { 2732 iocg_incur_debt(iocg, abs_cost, now); 2733 if (iocg_kick_delay(iocg, now)) 2734 blkcg_schedule_throttle(rqos->disk, 2735 (bio->bi_opf & REQ_SWAP) == 2736 REQ_SWAP); 2737 return action_return; 2738 } 2739 2740 /* guarantee that iocgs w/ waiters have maximum inuse */ 2741 if (!iocg->abs_vdebt && iocg->inuse != iocg->active) { 2742 if (!ioc_locked) 2743 return action_retry; 2744 lockdep_assert_held(&iocg->ioc->lock); 2745 propagate_weights(iocg, iocg->active, iocg->active, true, now); 2746 } 2747 2748 /* 2749 * Append self to the waitq and schedule the wakeup timer if we're 2750 * the first waiter. The timer duration is calculated based on the 2751 * current vrate. vtime and hweight changes can make it too short 2752 * or too long. Each wait entry records the absolute cost it's 2753 * waiting for to allow re-evaluation using a custom wait entry. 2754 * 2755 * If too short, the timer simply reschedules itself. If too long, 2756 * the period timer will notice and trigger wakeups. 2757 * 2758 * All waiters are on iocg->waitq and the wait states are 2759 * synchronized using waitq.lock. 2760 */ 2761 init_wait_func(&wait->wait, iocg_wake_fn); 2762 wait->bio = bio; 2763 wait->abs_cost = abs_cost; 2764 wait->committed = false; /* will be set true by waker */ 2765 2766 __add_wait_queue_entry_tail(&iocg->waitq, &wait->wait); 2767 iocg_kick_waitq(iocg, ioc_locked, now); 2768 return action_wait; 2769 } 2770 2771 static void ioc_rqos_throttle(struct rq_qos *rqos, struct bio *bio) 2772 { 2773 struct blkcg_gq *blkg = bio->bi_blkg; 2774 struct ioc *ioc = rqos_to_ioc(rqos); 2775 struct ioc_gq *iocg = blkg_to_iocg(blkg); 2776 struct ioc_now now; 2777 struct iocg_wait wait; 2778 u64 abs_cost, cost, vtime; 2779 bool use_debt, ioc_locked; 2780 enum over_budget_action action; 2781 unsigned long flags; 2782 2783 /* bypass IOs if disabled, still initializing, or for root cgroup */ 2784 if (!ioc->enabled || !iocg || !iocg->level) 2785 return; 2786 2787 /* calculate the absolute vtime cost */ 2788 abs_cost = calc_vtime_cost(bio, iocg, false); 2789 if (!abs_cost) 2790 return; 2791 2792 if (!iocg_activate(iocg, &now)) 2793 return; 2794 2795 /* dataless bios have no meaningful position for seq/rand detection */ 2796 if (bio->bi_iter.bi_size) 2797 iocg->cursor = bio_end_sector(bio); 2798 vtime = atomic64_read(&iocg->vtime); 2799 cost = adjust_inuse_and_calc_cost(iocg, vtime, abs_cost, &now); 2800 2801 /* 2802 * If no one's waiting and within budget, issue right away. The 2803 * tests are racy but the races aren't systemic - we only miss once 2804 * in a while which is fine. 2805 */ 2806 if (!waitqueue_active(&iocg->waitq) && !iocg->abs_vdebt && 2807 time_before_eq64(vtime + cost, now.vnow)) { 2808 iocg_commit_bio(iocg, bio, abs_cost, cost); 2809 return; 2810 } 2811 2812 /* 2813 * We're over budget. This can be handled in two ways. IOs which may 2814 * cause priority inversions are issued regardless and charged against 2815 * @iocg->abs_vdebt as debt. Otherwise, the issuer is blocked on 2816 * @iocg->waitq. Debt handling requires @ioc->lock, waitq handling 2817 * @iocg->waitq.lock. Determine whether debt handling is needed and 2818 * acquire locks accordingly. 2819 */ 2820 use_debt = bio_issue_as_root_blkg(bio) || fatal_signal_pending(current); 2821 ioc_locked = use_debt || READ_ONCE(iocg->abs_vdebt); 2822 retry_lock: 2823 if (ioc_locked) { 2824 spin_lock_irqsave(&iocg->ioc->lock, flags); 2825 spin_lock(&iocg->waitq.lock); 2826 action = iocg_handle_over_budget(rqos, iocg, bio, &now, &wait, 2827 use_debt, ioc_locked, abs_cost, 2828 cost); 2829 spin_unlock(&iocg->waitq.lock); 2830 spin_unlock_irqrestore(&iocg->ioc->lock, flags); 2831 } else { 2832 spin_lock_irqsave(&iocg->waitq.lock, flags); 2833 action = iocg_handle_over_budget(rqos, iocg, bio, &now, &wait, 2834 use_debt, ioc_locked, abs_cost, 2835 cost); 2836 spin_unlock_irqrestore(&iocg->waitq.lock, flags); 2837 } 2838 switch (action) { 2839 case action_retry: 2840 ioc_locked = true; 2841 goto retry_lock; 2842 case action_commit: 2843 iocg_commit_bio(iocg, bio, abs_cost, cost); 2844 return; 2845 case action_return: 2846 return; 2847 case action_wait: 2848 break; 2849 } 2850 2851 while (true) { 2852 set_current_state(TASK_UNINTERRUPTIBLE); 2853 if (wait.committed) 2854 break; 2855 io_schedule(); 2856 } 2857 2858 /* waker already committed us, proceed */ 2859 finish_wait(&iocg->waitq, &wait.wait); 2860 } 2861 2862 static void ioc_rqos_merge(struct rq_qos *rqos, struct request *rq, 2863 struct bio *bio) 2864 { 2865 struct ioc_gq *iocg = blkg_to_iocg(bio->bi_blkg); 2866 struct ioc *ioc = rqos_to_ioc(rqos); 2867 sector_t bio_end = bio_end_sector(bio); 2868 struct ioc_now now; 2869 u64 vtime, abs_cost, cost; 2870 unsigned long flags; 2871 2872 /* bypass if disabled, still initializing, or for root cgroup */ 2873 if (!ioc->enabled || !iocg || !iocg->level) 2874 return; 2875 2876 abs_cost = calc_vtime_cost(bio, iocg, true); 2877 if (!abs_cost) 2878 return; 2879 2880 ioc_now(ioc, &now); 2881 2882 vtime = atomic64_read(&iocg->vtime); 2883 cost = adjust_inuse_and_calc_cost(iocg, vtime, abs_cost, &now); 2884 2885 /* update cursor if backmerging into the request at the cursor */ 2886 if (blk_rq_pos(rq) < bio_end && 2887 blk_rq_pos(rq) + blk_rq_sectors(rq) == iocg->cursor) 2888 iocg->cursor = bio_end; 2889 2890 /* 2891 * Charge if there's enough vtime budget and the existing request has 2892 * cost assigned. 2893 */ 2894 if (rq->bio && rq->bio->bi_iocost_cost && 2895 time_before_eq64(atomic64_read(&iocg->vtime) + cost, now.vnow)) { 2896 iocg_commit_bio(iocg, bio, abs_cost, cost); 2897 return; 2898 } 2899 2900 /* 2901 * Otherwise, account it as debt if @iocg is online, which it should 2902 * be for the vast majority of cases. See debt handling in 2903 * ioc_rqos_throttle() for details. 2904 */ 2905 spin_lock_irqsave(&ioc->lock, flags); 2906 spin_lock(&iocg->waitq.lock); 2907 2908 if (likely(!list_empty(&iocg->active_list))) { 2909 iocg_incur_debt(iocg, abs_cost, &now); 2910 if (iocg_kick_delay(iocg, &now)) 2911 blkcg_schedule_throttle(rqos->disk, 2912 (bio->bi_opf & REQ_SWAP) == REQ_SWAP); 2913 } else { 2914 iocg_commit_bio(iocg, bio, abs_cost, cost); 2915 } 2916 2917 spin_unlock(&iocg->waitq.lock); 2918 spin_unlock_irqrestore(&ioc->lock, flags); 2919 } 2920 2921 static void ioc_rqos_done_bio(struct rq_qos *rqos, struct bio *bio) 2922 { 2923 struct ioc_gq *iocg = blkg_to_iocg(bio->bi_blkg); 2924 2925 if (iocg && bio->bi_iocost_cost) 2926 atomic64_add(bio->bi_iocost_cost, &iocg->done_vtime); 2927 } 2928 2929 static void ioc_rqos_done(struct rq_qos *rqos, struct request *rq) 2930 { 2931 struct ioc *ioc = rqos_to_ioc(rqos); 2932 struct ioc_pcpu_stat *ccs; 2933 u64 on_q_ns, rq_wait_ns, size_nsec; 2934 int pidx, rw; 2935 2936 if (!ioc->enabled || !rq->alloc_time_ns || !rq->start_time_ns) 2937 return; 2938 2939 if (unlikely(rq->rq_flags & RQF_FLUSH_SEQ)) 2940 return; 2941 2942 switch (req_op(rq)) { 2943 case REQ_OP_READ: 2944 pidx = QOS_RLAT; 2945 rw = READ; 2946 break; 2947 case REQ_OP_ZONE_APPEND: 2948 case REQ_OP_WRITE: 2949 pidx = QOS_WLAT; 2950 rw = WRITE; 2951 break; 2952 default: 2953 return; 2954 } 2955 2956 on_q_ns = blk_time_get_ns() - rq->alloc_time_ns; 2957 rq_wait_ns = rq->start_time_ns - rq->alloc_time_ns; 2958 size_nsec = div64_u64(calc_size_vtime_cost(rq, ioc), VTIME_PER_NSEC); 2959 2960 ccs = get_cpu_ptr(ioc->pcpu_stat); 2961 2962 if (on_q_ns <= size_nsec || 2963 on_q_ns - size_nsec <= ioc->params.qos[pidx] * NSEC_PER_USEC) 2964 local_inc(&ccs->missed[rw].nr_met); 2965 else 2966 local_inc(&ccs->missed[rw].nr_missed); 2967 2968 local64_add(rq_wait_ns, &ccs->rq_wait_ns); 2969 2970 put_cpu_ptr(ccs); 2971 } 2972 2973 static void ioc_rqos_queue_depth_changed(struct rq_qos *rqos) 2974 { 2975 struct ioc *ioc = rqos_to_ioc(rqos); 2976 2977 spin_lock_irq(&ioc->lock); 2978 ioc_refresh_params(ioc, false); 2979 spin_unlock_irq(&ioc->lock); 2980 } 2981 2982 static void ioc_rqos_exit(struct rq_qos *rqos) 2983 { 2984 struct ioc *ioc = rqos_to_ioc(rqos); 2985 2986 blkcg_deactivate_policy(rqos->disk, &blkcg_policy_iocost); 2987 2988 spin_lock_irq(&ioc->lock); 2989 ioc->running = IOC_STOP; 2990 spin_unlock_irq(&ioc->lock); 2991 2992 timer_shutdown_sync(&ioc->timer); 2993 free_percpu(ioc->pcpu_stat); 2994 /* blkcg_print_blkgs() gets here from a pd with only RCU held */ 2995 kfree_rcu_mightsleep(ioc); 2996 } 2997 2998 static const struct rq_qos_ops ioc_rqos_ops = { 2999 .throttle = ioc_rqos_throttle, 3000 .merge = ioc_rqos_merge, 3001 .done_bio = ioc_rqos_done_bio, 3002 .done = ioc_rqos_done, 3003 .queue_depth_changed = ioc_rqos_queue_depth_changed, 3004 .exit = ioc_rqos_exit, 3005 }; 3006 3007 static int blk_iocost_init(struct gendisk *disk) 3008 { 3009 struct ioc *ioc; 3010 int i, cpu, ret; 3011 3012 /* The caller holds rq_qos_mutex, which is taken with the queue frozen */ 3013 ioc = kzalloc_obj(*ioc, GFP_NOIO); 3014 if (!ioc) 3015 return -ENOMEM; 3016 3017 ioc->pcpu_stat = alloc_percpu_gfp(struct ioc_pcpu_stat, GFP_NOIO); 3018 if (!ioc->pcpu_stat) { 3019 kfree(ioc); 3020 return -ENOMEM; 3021 } 3022 3023 for_each_possible_cpu(cpu) { 3024 struct ioc_pcpu_stat *ccs = per_cpu_ptr(ioc->pcpu_stat, cpu); 3025 3026 for (i = 0; i < ARRAY_SIZE(ccs->missed); i++) { 3027 local_set(&ccs->missed[i].nr_met, 0); 3028 local_set(&ccs->missed[i].nr_missed, 0); 3029 } 3030 local64_set(&ccs->rq_wait_ns, 0); 3031 } 3032 3033 spin_lock_init(&ioc->lock); 3034 timer_setup(&ioc->timer, ioc_timer_fn, 0); 3035 INIT_LIST_HEAD(&ioc->active_iocgs); 3036 3037 ioc->running = IOC_IDLE; 3038 ioc->vtime_base_rate = VTIME_PER_USEC; 3039 atomic64_set(&ioc->vtime_rate, VTIME_PER_USEC); 3040 seqcount_spinlock_init(&ioc->period_seqcount, &ioc->lock); 3041 ioc->period_at = ktime_to_us(blk_time_get()); 3042 atomic64_set(&ioc->cur_period, 0); 3043 atomic_set(&ioc->hweight_gen, 0); 3044 3045 spin_lock_irq(&ioc->lock); 3046 ioc->autop_idx = AUTOP_INVALID; 3047 ioc_refresh_params_disk(ioc, true, disk); 3048 spin_unlock_irq(&ioc->lock); 3049 3050 /* 3051 * rqos must be added before activation to allow ioc_pd_init() to 3052 * lookup the ioc from q. This means that the rqos methods may get 3053 * called before policy activation completion, can't assume that the 3054 * target bio has an iocg associated and need to test for NULL iocg. 3055 */ 3056 ret = rq_qos_add(&ioc->rqos, disk, RQ_QOS_COST, &ioc_rqos_ops); 3057 if (ret) 3058 goto err_free_ioc; 3059 3060 ret = blkcg_activate_policy(disk, &blkcg_policy_iocost); 3061 if (ret) 3062 goto err_del_qos; 3063 return 0; 3064 3065 err_del_qos: 3066 rq_qos_del(&ioc->rqos); 3067 err_free_ioc: 3068 free_percpu(ioc->pcpu_stat); 3069 kfree(ioc); 3070 return ret; 3071 } 3072 3073 static struct blkcg_policy_data *ioc_cpd_alloc(gfp_t gfp) 3074 { 3075 struct ioc_cgrp *iocc; 3076 3077 iocc = kzalloc_obj(struct ioc_cgrp, gfp); 3078 if (!iocc) 3079 return NULL; 3080 3081 iocc->dfl_weight = CGROUP_WEIGHT_DFL * WEIGHT_ONE; 3082 return &iocc->cpd; 3083 } 3084 3085 static void ioc_cpd_free(struct blkcg_policy_data *cpd) 3086 { 3087 kfree(container_of(cpd, struct ioc_cgrp, cpd)); 3088 } 3089 3090 static struct blkg_policy_data *ioc_pd_alloc(struct gendisk *disk, 3091 struct blkcg *blkcg, gfp_t gfp) 3092 { 3093 int levels = blkcg->css.cgroup->level + 1; 3094 struct ioc_gq *iocg; 3095 3096 iocg = kzalloc_node(struct_size(iocg, ancestors, levels), gfp, 3097 disk->node_id); 3098 if (!iocg) 3099 return NULL; 3100 3101 iocg->pcpu_stat = alloc_percpu_gfp(struct iocg_pcpu_stat, gfp); 3102 if (!iocg->pcpu_stat) { 3103 kfree(iocg); 3104 return NULL; 3105 } 3106 3107 return &iocg->pd; 3108 } 3109 3110 static void ioc_pd_init(struct blkg_policy_data *pd) 3111 { 3112 struct ioc_gq *iocg = pd_to_iocg(pd); 3113 struct blkcg_gq *blkg = pd_to_blkg(&iocg->pd); 3114 struct ioc *ioc = q_to_ioc(blkg->q); 3115 struct ioc_now now; 3116 struct blkcg_gq *tblkg; 3117 unsigned long flags; 3118 3119 ioc_now(ioc, &now); 3120 3121 iocg->ioc = ioc; 3122 atomic64_set(&iocg->vtime, now.vnow); 3123 atomic64_set(&iocg->done_vtime, now.vnow); 3124 atomic64_set(&iocg->active_period, atomic64_read(&ioc->cur_period)); 3125 INIT_LIST_HEAD(&iocg->active_list); 3126 INIT_LIST_HEAD(&iocg->walk_list); 3127 INIT_LIST_HEAD(&iocg->surplus_list); 3128 atomic64_set(&iocg->hweight_cache, 3129 hweight_cache_pack((u32)(atomic_read(&ioc->hweight_gen) - 1), 3130 WEIGHT_ONE, WEIGHT_ONE)); 3131 iocg->hweight_active = WEIGHT_ONE; 3132 iocg->hweight_inuse = WEIGHT_ONE; 3133 3134 init_waitqueue_head(&iocg->waitq); 3135 hrtimer_setup(&iocg->waitq_timer, iocg_waitq_timer_fn, CLOCK_MONOTONIC, HRTIMER_MODE_ABS); 3136 3137 iocg->level = blkg->blkcg->css.cgroup->level; 3138 3139 for (tblkg = blkg; tblkg; tblkg = tblkg->parent) { 3140 struct ioc_gq *tiocg = blkg_to_iocg(tblkg); 3141 iocg->ancestors[tiocg->level] = tiocg; 3142 } 3143 3144 spin_lock_irqsave(&ioc->lock, flags); 3145 weight_updated(iocg, &now); 3146 spin_unlock_irqrestore(&ioc->lock, flags); 3147 } 3148 3149 static void iocg_release(struct rcu_head *rcu) 3150 { 3151 struct blkg_policy_data *pd = 3152 container_of(rcu, struct blkg_policy_data, rcu_head); 3153 struct ioc_gq *iocg = pd_to_iocg(pd); 3154 3155 free_percpu(iocg->pcpu_stat); 3156 kfree(iocg); 3157 } 3158 3159 static void ioc_pd_free(struct blkg_policy_data *pd) 3160 { 3161 struct ioc_gq *iocg = pd_to_iocg(pd); 3162 struct blkcg_gq *blkg = pd_to_blkg(pd); 3163 struct ioc *ioc = iocg->ioc; 3164 unsigned long flags; 3165 3166 if (ioc) { 3167 spin_lock_irqsave(&ioc->lock, flags); 3168 3169 if (!list_empty(&iocg->active_list)) { 3170 struct ioc_now now; 3171 3172 ioc_now(ioc, &now); 3173 propagate_weights(iocg, 0, 0, false, &now); 3174 list_del_init(&iocg->active_list); 3175 } 3176 3177 WARN_ON_ONCE(!list_empty(&iocg->walk_list)); 3178 WARN_ON_ONCE(!list_empty(&iocg->surplus_list)); 3179 3180 spin_unlock_irqrestore(&ioc->lock, flags); 3181 3182 hrtimer_cancel(&iocg->waitq_timer); 3183 } 3184 3185 /* off ->active_iocgs and timer gone, so nothing can re-arm the delay */ 3186 iocg->delay = 0; 3187 iocg->indelay_since = 0; 3188 if (blkg) 3189 blkcg_clear_delay(blkg); 3190 3191 call_rcu(&pd->rcu_head, iocg_release); 3192 } 3193 3194 static void ioc_pd_stat(struct blkg_policy_data *pd, struct seq_file *s) 3195 { 3196 struct ioc_gq *iocg = pd_to_iocg(pd); 3197 struct ioc *ioc = iocg->ioc; 3198 3199 if (!data_race(ioc->enabled)) 3200 return; 3201 3202 if (iocg->level == 0) { 3203 unsigned vp10k = DIV64_U64_ROUND_CLOSEST( 3204 data_race(ioc->vtime_base_rate) * 10000, 3205 VTIME_PER_USEC); 3206 seq_printf(s, " cost.vrate=%u.%02u", vp10k / 100, vp10k % 100); 3207 } 3208 3209 seq_printf(s, " cost.usage=%llu", data_race(iocg->last_stat.usage_us)); 3210 3211 if (blkcg_debug_stats) 3212 seq_printf(s, " cost.wait=%llu cost.indebt=%llu cost.indelay=%llu", 3213 data_race(iocg->last_stat.wait_us), 3214 data_race(iocg->last_stat.indebt_us), 3215 data_race(iocg->last_stat.indelay_us)); 3216 } 3217 3218 static u64 ioc_weight_prfill(struct seq_file *sf, struct blkg_policy_data *pd, 3219 int off) 3220 { 3221 const char *dname = blkg_dev_name(pd->blkg); 3222 struct ioc_gq *iocg = pd_to_iocg(pd); 3223 3224 if (dname && iocg->cfg_weight) 3225 seq_printf(sf, "%s %u\n", dname, iocg->cfg_weight / WEIGHT_ONE); 3226 return 0; 3227 } 3228 3229 3230 static int ioc_weight_show(struct seq_file *sf, void *v) 3231 { 3232 struct blkcg *blkcg = css_to_blkcg(seq_css(sf)); 3233 struct ioc_cgrp *iocc = blkcg_to_iocc(blkcg); 3234 3235 seq_printf(sf, "default %u\n", iocc->dfl_weight / WEIGHT_ONE); 3236 blkcg_print_blkgs(sf, blkcg, ioc_weight_prfill, 3237 &blkcg_policy_iocost, seq_cft(sf)->private, false); 3238 return 0; 3239 } 3240 3241 static ssize_t ioc_weight_write(struct kernfs_open_file *of, char *buf, 3242 size_t nbytes, loff_t off) 3243 { 3244 struct blkcg *blkcg = css_to_blkcg(of_css(of)); 3245 struct ioc_cgrp *iocc = blkcg_to_iocc(blkcg); 3246 struct blkg_conf_ctx ctx; 3247 struct ioc_now now; 3248 struct ioc_gq *iocg; 3249 u32 v; 3250 int ret; 3251 3252 if (!strchr(buf, ':')) { 3253 struct blkcg_gq *blkg; 3254 3255 if (!sscanf(buf, "default %u", &v) && !sscanf(buf, "%u", &v)) 3256 return -EINVAL; 3257 3258 if (v < CGROUP_WEIGHT_MIN || v > CGROUP_WEIGHT_MAX) 3259 return -EINVAL; 3260 3261 spin_lock_irq(&blkcg->lock); 3262 iocc->dfl_weight = v * WEIGHT_ONE; 3263 hlist_for_each_entry(blkg, &blkcg->blkg_list, blkcg_node) { 3264 struct ioc_gq *iocg = blkg_to_iocg(blkg); 3265 3266 if (iocg) { 3267 spin_lock(&iocg->ioc->lock); 3268 ioc_now(iocg->ioc, &now); 3269 weight_updated(iocg, &now); 3270 spin_unlock(&iocg->ioc->lock); 3271 } 3272 } 3273 spin_unlock_irq(&blkcg->lock); 3274 3275 return nbytes; 3276 } 3277 3278 blkg_conf_init(&ctx, buf); 3279 3280 ret = blkg_conf_open_bdev(&ctx); 3281 if (ret) 3282 return ret; 3283 3284 ret = blkg_conf_prep(blkcg, &blkcg_policy_iocost, &ctx); 3285 if (ret) 3286 goto close_bdev; 3287 3288 iocg = blkg_to_iocg(ctx.blkg); 3289 3290 ret = -EINVAL; 3291 3292 if (!strncmp(ctx.body, "default", 7)) { 3293 v = 0; 3294 } else { 3295 if (!sscanf(ctx.body, "%u", &v)) 3296 goto unprep; 3297 if (v < CGROUP_WEIGHT_MIN || v > CGROUP_WEIGHT_MAX) 3298 goto unprep; 3299 } 3300 3301 spin_lock(&iocg->ioc->lock); 3302 iocg->cfg_weight = v * WEIGHT_ONE; 3303 ioc_now(iocg->ioc, &now); 3304 weight_updated(iocg, &now); 3305 spin_unlock(&iocg->ioc->lock); 3306 3307 ret = 0; 3308 3309 unprep: 3310 blkg_conf_unprep(&ctx); 3311 3312 close_bdev: 3313 blkg_conf_close_bdev(&ctx); 3314 3315 return ret ?: nbytes; 3316 } 3317 3318 static u64 ioc_qos_prfill(struct seq_file *sf, struct blkg_policy_data *pd, 3319 int off) 3320 { 3321 const char *dname = blkg_dev_name(pd->blkg); 3322 struct ioc *ioc = pd_to_iocg(pd)->ioc; 3323 3324 if (!dname) 3325 return 0; 3326 3327 spin_lock_irq(&ioc->lock); 3328 seq_printf(sf, "%s enable=%d ctrl=%s rpct=%u.%02u rlat=%u wpct=%u.%02u wlat=%u min=%u.%02u max=%u.%02u\n", 3329 dname, ioc->enabled, ioc->user_qos_params ? "user" : "auto", 3330 ioc->params.qos[QOS_RPPM] / 10000, 3331 ioc->params.qos[QOS_RPPM] % 10000 / 100, 3332 ioc->params.qos[QOS_RLAT], 3333 ioc->params.qos[QOS_WPPM] / 10000, 3334 ioc->params.qos[QOS_WPPM] % 10000 / 100, 3335 ioc->params.qos[QOS_WLAT], 3336 ioc->params.qos[QOS_MIN] / 10000, 3337 ioc->params.qos[QOS_MIN] % 10000 / 100, 3338 ioc->params.qos[QOS_MAX] / 10000, 3339 ioc->params.qos[QOS_MAX] % 10000 / 100); 3340 spin_unlock_irq(&ioc->lock); 3341 return 0; 3342 } 3343 3344 static int ioc_qos_show(struct seq_file *sf, void *v) 3345 { 3346 struct blkcg *blkcg = css_to_blkcg(seq_css(sf)); 3347 3348 blkcg_print_blkgs(sf, blkcg, ioc_qos_prfill, 3349 &blkcg_policy_iocost, seq_cft(sf)->private, false); 3350 return 0; 3351 } 3352 3353 static const match_table_t qos_ctrl_tokens = { 3354 { QOS_ENABLE, "enable=%u" }, 3355 { QOS_CTRL, "ctrl=%s" }, 3356 { NR_QOS_CTRL_PARAMS, NULL }, 3357 }; 3358 3359 static const match_table_t qos_tokens = { 3360 { QOS_RPPM, "rpct=%s" }, 3361 { QOS_RLAT, "rlat=%u" }, 3362 { QOS_WPPM, "wpct=%s" }, 3363 { QOS_WLAT, "wlat=%u" }, 3364 { QOS_MIN, "min=%s" }, 3365 { QOS_MAX, "max=%s" }, 3366 { NR_QOS_PARAMS, NULL }, 3367 }; 3368 3369 static ssize_t ioc_qos_write(struct kernfs_open_file *of, char *input, 3370 size_t nbytes, loff_t off) 3371 { 3372 struct blkg_conf_ctx ctx; 3373 struct request_queue *q; 3374 struct gendisk *disk; 3375 struct ioc *ioc; 3376 u32 qos[NR_QOS_PARAMS]; 3377 bool enable, user; 3378 char *body, *p; 3379 unsigned int memflags; 3380 int ret; 3381 3382 blkg_conf_init(&ctx, input); 3383 3384 ret = blkg_conf_open_bdev(&ctx); 3385 if (ret) 3386 return ret; 3387 /* 3388 * At this point, we haven’t started protecting anything related to QoS, 3389 * so we release q->rq_qos_mutex here, which was first acquired in blkg_ 3390 * conf_open_bdev. Later, we re-acquire q->rq_qos_mutex after freezing 3391 * the queue to maintain the correct locking order. 3392 */ 3393 mutex_unlock(&ctx.bdev->bd_queue->rq_qos_mutex); 3394 3395 memflags = blk_mq_freeze_queue(ctx.bdev->bd_queue); 3396 mutex_lock(&ctx.bdev->bd_queue->rq_qos_mutex); 3397 3398 body = ctx.body; 3399 disk = ctx.bdev->bd_disk; 3400 if (!queue_is_mq(disk->queue)) { 3401 ret = -EOPNOTSUPP; 3402 goto close_bdev; 3403 } 3404 3405 ioc = q_to_ioc(disk->queue); 3406 if (!ioc) { 3407 ret = blk_iocost_init(disk); 3408 if (ret) 3409 goto close_bdev; 3410 ioc = q_to_ioc(disk->queue); 3411 } 3412 3413 blk_mq_quiesce_queue(disk->queue); 3414 3415 spin_lock_irq(&ioc->lock); 3416 memcpy(qos, ioc->params.qos, sizeof(qos)); 3417 enable = ioc->enabled; 3418 user = ioc->user_qos_params; 3419 3420 while ((p = strsep(&body, " \t\n"))) { 3421 substring_t args[MAX_OPT_ARGS]; 3422 char buf[32]; 3423 int tok; 3424 s64 v; 3425 3426 if (!*p) 3427 continue; 3428 3429 switch (match_token(p, qos_ctrl_tokens, args)) { 3430 case QOS_ENABLE: 3431 if (match_u64(&args[0], &v)) 3432 goto einval; 3433 enable = v; 3434 continue; 3435 case QOS_CTRL: 3436 match_strlcpy(buf, &args[0], sizeof(buf)); 3437 if (!strcmp(buf, "auto")) 3438 user = false; 3439 else if (!strcmp(buf, "user")) 3440 user = true; 3441 else 3442 goto einval; 3443 continue; 3444 } 3445 3446 tok = match_token(p, qos_tokens, args); 3447 switch (tok) { 3448 case QOS_RPPM: 3449 case QOS_WPPM: 3450 if (match_strlcpy(buf, &args[0], sizeof(buf)) >= 3451 sizeof(buf)) 3452 goto einval; 3453 if (cgroup_parse_float(buf, 2, &v)) 3454 goto einval; 3455 if (v < 0 || v > 10000) 3456 goto einval; 3457 qos[tok] = v * 100; 3458 break; 3459 case QOS_RLAT: 3460 case QOS_WLAT: 3461 if (match_u64(&args[0], &v)) 3462 goto einval; 3463 qos[tok] = v; 3464 break; 3465 case QOS_MIN: 3466 case QOS_MAX: 3467 if (match_strlcpy(buf, &args[0], sizeof(buf)) >= 3468 sizeof(buf)) 3469 goto einval; 3470 if (cgroup_parse_float(buf, 2, &v)) 3471 goto einval; 3472 if (v < 0) 3473 goto einval; 3474 qos[tok] = clamp_t(s64, v * 100, 3475 VRATE_MIN_PPM, VRATE_MAX_PPM); 3476 break; 3477 default: 3478 goto einval; 3479 } 3480 user = true; 3481 } 3482 3483 if (qos[QOS_MIN] > qos[QOS_MAX]) 3484 goto einval; 3485 3486 if (enable && !ioc->enabled) { 3487 blk_stat_enable_accounting(disk->queue); 3488 blk_queue_flag_set(QUEUE_FLAG_RQ_ALLOC_TIME, disk->queue); 3489 ioc->enabled = true; 3490 } else if (!enable && ioc->enabled) { 3491 blk_stat_disable_accounting(disk->queue); 3492 blk_queue_flag_clear(QUEUE_FLAG_RQ_ALLOC_TIME, disk->queue); 3493 ioc->enabled = false; 3494 } 3495 3496 if (user) { 3497 memcpy(ioc->params.qos, qos, sizeof(qos)); 3498 ioc->user_qos_params = true; 3499 } else { 3500 ioc->user_qos_params = false; 3501 } 3502 3503 ioc_refresh_params(ioc, true); 3504 spin_unlock_irq(&ioc->lock); 3505 3506 if (enable) 3507 wbt_disable_default(disk); 3508 else 3509 wbt_enable_default(disk); 3510 3511 blk_mq_unquiesce_queue(disk->queue); 3512 3513 close_bdev: 3514 q = ctx.bdev->bd_queue; 3515 blkg_conf_close_bdev(&ctx); 3516 blk_mq_unfreeze_queue(q, memflags); 3517 return ret ?: nbytes; 3518 3519 einval: 3520 spin_unlock_irq(&ioc->lock); 3521 blk_mq_unquiesce_queue(disk->queue); 3522 ret = -EINVAL; 3523 goto close_bdev; 3524 } 3525 3526 static u64 ioc_cost_model_prfill(struct seq_file *sf, 3527 struct blkg_policy_data *pd, int off) 3528 { 3529 const char *dname = blkg_dev_name(pd->blkg); 3530 struct ioc *ioc = pd_to_iocg(pd)->ioc; 3531 u64 *u = ioc->params.i_lcoefs; 3532 3533 if (!dname) 3534 return 0; 3535 3536 spin_lock_irq(&ioc->lock); 3537 seq_printf(sf, "%s ctrl=%s model=linear " 3538 "rbps=%llu rseqiops=%llu rrandiops=%llu " 3539 "wbps=%llu wseqiops=%llu wrandiops=%llu " 3540 "flushiops=%llu\n", 3541 dname, ioc->user_cost_model ? "user" : "auto", 3542 u[I_LCOEF_RBPS], u[I_LCOEF_RSEQIOPS], u[I_LCOEF_RRANDIOPS], 3543 u[I_LCOEF_WBPS], u[I_LCOEF_WSEQIOPS], u[I_LCOEF_WRANDIOPS], 3544 u[I_LCOEF_FLUSHIOPS]); 3545 spin_unlock_irq(&ioc->lock); 3546 return 0; 3547 } 3548 3549 static int ioc_cost_model_show(struct seq_file *sf, void *v) 3550 { 3551 struct blkcg *blkcg = css_to_blkcg(seq_css(sf)); 3552 3553 blkcg_print_blkgs(sf, blkcg, ioc_cost_model_prfill, 3554 &blkcg_policy_iocost, seq_cft(sf)->private, false); 3555 return 0; 3556 } 3557 3558 static const match_table_t cost_ctrl_tokens = { 3559 { COST_CTRL, "ctrl=%s" }, 3560 { COST_MODEL, "model=%s" }, 3561 { NR_COST_CTRL_PARAMS, NULL }, 3562 }; 3563 3564 static const match_table_t i_lcoef_tokens = { 3565 { I_LCOEF_RBPS, "rbps=%u" }, 3566 { I_LCOEF_RSEQIOPS, "rseqiops=%u" }, 3567 { I_LCOEF_RRANDIOPS, "rrandiops=%u" }, 3568 { I_LCOEF_WBPS, "wbps=%u" }, 3569 { I_LCOEF_WSEQIOPS, "wseqiops=%u" }, 3570 { I_LCOEF_WRANDIOPS, "wrandiops=%u" }, 3571 { I_LCOEF_FLUSHIOPS, "flushiops=%u" }, 3572 { NR_I_LCOEFS, NULL }, 3573 }; 3574 3575 static ssize_t ioc_cost_model_write(struct kernfs_open_file *of, char *input, 3576 size_t nbytes, loff_t off) 3577 { 3578 struct blkg_conf_ctx ctx; 3579 struct request_queue *q; 3580 unsigned int memflags; 3581 struct ioc *ioc; 3582 u64 u[NR_I_LCOEFS]; 3583 bool user; 3584 char *body, *p; 3585 int ret; 3586 3587 blkg_conf_init(&ctx, input); 3588 3589 ret = blkg_conf_open_bdev(&ctx); 3590 if (ret) 3591 return ret; 3592 3593 body = ctx.body; 3594 q = bdev_get_queue(ctx.bdev); 3595 if (!queue_is_mq(q)) { 3596 ret = -EOPNOTSUPP; 3597 goto close_bdev; 3598 } 3599 3600 ioc = q_to_ioc(q); 3601 if (!ioc) { 3602 ret = blk_iocost_init(ctx.bdev->bd_disk); 3603 if (ret) 3604 goto close_bdev; 3605 ioc = q_to_ioc(q); 3606 } 3607 3608 memflags = blk_mq_freeze_queue(q); 3609 blk_mq_quiesce_queue(q); 3610 3611 spin_lock_irq(&ioc->lock); 3612 memcpy(u, ioc->params.i_lcoefs, sizeof(u)); 3613 user = ioc->user_cost_model; 3614 3615 ret = -EINVAL; 3616 3617 while ((p = strsep(&body, " \t\n"))) { 3618 substring_t args[MAX_OPT_ARGS]; 3619 char buf[32]; 3620 int tok; 3621 u64 v; 3622 3623 if (!*p) 3624 continue; 3625 3626 switch (match_token(p, cost_ctrl_tokens, args)) { 3627 case COST_CTRL: 3628 match_strlcpy(buf, &args[0], sizeof(buf)); 3629 if (!strcmp(buf, "auto")) 3630 user = false; 3631 else if (!strcmp(buf, "user")) 3632 user = true; 3633 else 3634 goto unlock; 3635 continue; 3636 case COST_MODEL: 3637 match_strlcpy(buf, &args[0], sizeof(buf)); 3638 if (strcmp(buf, "linear")) 3639 goto unlock; 3640 continue; 3641 } 3642 3643 tok = match_token(p, i_lcoef_tokens, args); 3644 if (tok == NR_I_LCOEFS) 3645 goto unlock; 3646 if (match_u64(&args[0], &v)) 3647 goto unlock; 3648 u[tok] = v; 3649 user = true; 3650 } 3651 3652 if (user) { 3653 memcpy(ioc->params.i_lcoefs, u, sizeof(u)); 3654 ioc->user_cost_model = true; 3655 } else { 3656 ioc->user_cost_model = false; 3657 } 3658 ioc_refresh_params(ioc, true); 3659 3660 ret = 0; 3661 3662 unlock: 3663 spin_unlock_irq(&ioc->lock); 3664 3665 blk_mq_unquiesce_queue(q); 3666 blk_mq_unfreeze_queue(q, memflags); 3667 3668 close_bdev: 3669 blkg_conf_close_bdev(&ctx); 3670 return ret ?: nbytes; 3671 } 3672 3673 static struct cftype ioc_files[] = { 3674 { 3675 .name = "weight", 3676 .flags = CFTYPE_NOT_ON_ROOT, 3677 .seq_show = ioc_weight_show, 3678 .write = ioc_weight_write, 3679 }, 3680 { 3681 .name = "cost.qos", 3682 .flags = CFTYPE_ONLY_ON_ROOT, 3683 .seq_show = ioc_qos_show, 3684 .write = ioc_qos_write, 3685 }, 3686 { 3687 .name = "cost.model", 3688 .flags = CFTYPE_ONLY_ON_ROOT, 3689 .seq_show = ioc_cost_model_show, 3690 .write = ioc_cost_model_write, 3691 }, 3692 {} 3693 }; 3694 3695 static struct blkcg_policy blkcg_policy_iocost = { 3696 .dfl_cftypes = ioc_files, 3697 .cpd_alloc_fn = ioc_cpd_alloc, 3698 .cpd_free_fn = ioc_cpd_free, 3699 .pd_alloc_fn = ioc_pd_alloc, 3700 .pd_init_fn = ioc_pd_init, 3701 .pd_free_fn = ioc_pd_free, 3702 .pd_stat_fn = ioc_pd_stat, 3703 }; 3704 3705 static int __init ioc_init(void) 3706 { 3707 return blkcg_policy_register(&blkcg_policy_iocost); 3708 } 3709 3710 static void __exit ioc_exit(void) 3711 { 3712 blkcg_policy_unregister(&blkcg_policy_iocost); 3713 } 3714 3715 module_init(ioc_init); 3716 module_exit(ioc_exit); 3717