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