Function report |
Source Code:block\blk-iocost.c |
Create Date:2022-07-28 17:48:33 |
| Last Modify:2020-03-12 14:18:49 | Copyright©Brick |
| home page | Tree |
| Annotation kernel can get tool activity | Download SCCT | Chinese |
Name:ioc_timer_fn
Proto:static void ioc_timer_fn(struct timer_list *timer)
Type:void
Parameter:
| Type | Parameter | Name |
|---|---|---|
| struct timer_list * | timer |
| 1346 | nr_surpluses = 0 , nr_shortages = 0 , nr_lagging = 0 |
| 1354 | ioc_lat_stat(ioc, missed_ppm, & rq_wait_pct) |
| 1357 | spin_lock_irq( & lock) |
| 1361 | period_vtime = vnow - vtime starttime |
| 1362 | If WARN_ON_ONCE(!period_vtime) Then |
| 1363 | spin_unlock_irq( & lock) |
| 1364 | Return |
| 1383 | iocg_kick_waitq(iocg, & now) |
| 1384 | iocg_kick_delay(iocg, & now, 0) |
| 1385 | Else if was iocg idle this period? Then |
| 1387 | last_inuse = inuse |
| 1392 | spin_unlock( & lock) |
| 1394 | commit_active_weights(ioc) |
| 1405 | vdone = atomic64_read( & done_vtime) |
| 1407 | current_hweight(iocg, & hw_active, & hw_inuse) |
| 1425 | Else if time_before64(last_vtime, vtime) Then vusage = vtime - last_vtime |
| 1427 | Else vusage = 0 |
| 1430 | last_vtime += vusage |
| 1436 | vusage = max - return maximum of two values of the same or compatible types*@x: first value*@y: second value(vusage, vtime - vdone) |
| 1439 | If vusage Then |
| 1440 | usage = DIV64_U64_ROUND_UP(vusage * hw_inuse, period_vtime) |
| 1444 | Else |
| 1445 | usage = 0 |
| 1452 | has_surplus = false |
| 1460 | atomic64_add(delta, & done_vtime) |
| 1461 | last_vtime += delta |
| 1464 | has_surplus = true |
| 1465 | nr_surpluses++ |
| 1473 | Else |
| 1490 | Else |
| 1492 | nr_shortages++ |
| 1496 | If Not nr_shortages || Not nr_surpluses Then Go to skip_surplus_transfers |
| 1502 | nr_valid = 0 |
| 1504 | If Not has_surplus Then Continue |
| 1508 | When i < NR_USAGE_SLOTS cycle |
| 1514 | If nr_valid < MIN_VALID_USAGES Then Continue |
| 1517 | current_hweight(iocg, & hw_active, & hw_inuse) |
| 1519 | If Not new_hwi Then Continue |
| 1525 | TRACE_IOCG_PATH(inuse_giveaway, iocg, & now, inuse, new_inuse, hw_inuse, new_hwi) |
| 1531 | skip_surplus_transfers : |
| 1532 | commit_active_weights(ioc) |
| 1541 | If rq_wait_pct > RQ_WAIT_BUSY_PCT || missed_ppm[generic data direction definitions ] > ppm_rthr || missed_ppm[WRITE] > ppm_wthr Then |
| 1544 | saturation history = max - return maximum of two values of the same or compatible types*@x: first value*@y: second value(saturation history , 0) |
| 1545 | saturation history ++ |
| 1546 | Else if rq_wait_pct <= RQ_WAIT_BUSY_PCT * UNBUSY_THR_PCT / 100 && missed_ppm[generic data direction definitions ] <= ppm_rthr * UNBUSY_THR_PCT / 100 && missed_ppm[WRITE] <= ppm_wthr * UNBUSY_THR_PCT / 100 Then |
| 1550 | If nr_shortages && Not nr_lagging Then |
| 1556 | Else |
| 1557 | saturation history = 0 |
| 1562 | If saturation history > 0 || saturation history < 0 && Not nr_lagging Then |
| 1563 | vrate = atomic64_read( & vtime_rate) |
| 1567 | If rq_wait_pct > RQ_WAIT_BUSY_PCT Then vrate_min = VRATE_MIN |
| 1583 | Else |
| 1586 | adj_pct = vrate adjust percentages indexed by ioc->busy_level. We adjust up on* vtime credit shortage and down on device saturation.[idx] |
| 1588 | If saturation history > 0 Then adj_pct = 100 - adj_pct |
| 1597 | trace_iocost_ioc_vrate_adj(ioc, vrate, & missed_ppm, rq_wait_pct, nr_lagging, nr_shortages, nr_surpluses) |
| 1601 | atomic64_set( & vtime_rate, vrate) |
| 1602 | inuse_margin_vtime = DIV64_U64_ROUND_UP(period_us * vrate * INUSE_MARGIN_PCT, 100) |
| 1604 | Else if saturation history != prev_busy_level || nr_lagging Then |
| 1610 | ioc_refresh_params(ioc, false) |
| 1616 | atomic64_inc( & c'd each period ) |
| 1619 | If Not list_empty - tests whether a list is empty*@head: the list to test. Then |
| 1620 | ioc_start_period(ioc, & now) |
| 1621 | Else |
| 1622 | saturation history = 0 |
| 1627 | spin_unlock_irq( & lock) |
| Source code conversion tool public plug-in interface | X |
|---|---|
| Support c/c++/esqlc/java Oracle/Informix/Mysql Plug-in can realize: logical Report Code generation and batch code conversion |