Skip to content

Commit bd01fa9

Browse files
Zhu Yanjunbjzhang
authored andcommitted
net: rds: exchange of 8K and 1M pool
Before the commit 490ea59 ("RDS: IB: move FMR code to its own file"), when the dirty_count is greater than 9/10 of max_items of 8K pool, 1M pool is used, Vice versa. After the commit 490ea59 ("RDS: IB: move FMR code to its own file"), the above is removed. When we make the following tests. Server: rds-stress -r 1.1.1.16 -D 1M Client: rds-stress -r 1.1.1.14 -s 1.1.1.16 -D 1M The following will appear. " connecting to 1.1.1.16:4000 negotiated options, tasks will start in 2 seconds Starting up..header from 1.1.1.166:4001 to id 4001 bogus .. tsks tx/s rx/s tx+rx K/s mbi K/s mbo K/s tx us/c rtt us cpu % 1 0 0 0.00 0.00 0.00 0.00 0.00 -1.00 1 0 0 0.00 0.00 0.00 0.00 0.00 -1.00 1 0 0 0.00 0.00 0.00 0.00 0.00 -1.00 1 0 0 0.00 0.00 0.00 0.00 0.00 -1.00 1 0 0 0.00 0.00 0.00 0.00 0.00 -1.00 ... " So this exchange between 8K and 1M pool is added back. Fixes: commit 490ea59 ("RDS: IB: move FMR code to its own file") Signed-off-by: Zhu Yanjun <yanjun.zhu@oracle.com> Acked-by: Santosh Shilimkar <santosh.shilimkar@oracle.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 7594a50 commit bd01fa9

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

net/rds/ib_fmr.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,17 @@ struct rds_ib_mr *rds_ib_alloc_fmr(struct rds_ib_device *rds_ibdev, int npages)
4444
else
4545
pool = rds_ibdev->mr_1m_pool;
4646

47+
if (atomic_read(&pool->dirty_count) >= pool->max_items / 10)
48+
queue_delayed_work(rds_ib_mr_wq, &pool->flush_worker, 10);
49+
50+
/* Switch pools if one of the pool is reaching upper limit */
51+
if (atomic_read(&pool->dirty_count) >= pool->max_items * 9 / 10) {
52+
if (pool->pool_type == RDS_IB_MR_8K_POOL)
53+
pool = rds_ibdev->mr_1m_pool;
54+
else
55+
pool = rds_ibdev->mr_8k_pool;
56+
}
57+
4758
ibmr = rds_ib_try_reuse_ibmr(pool);
4859
if (ibmr)
4960
return ibmr;

net/rds/ib_rdma.c

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -454,9 +454,6 @@ struct rds_ib_mr *rds_ib_try_reuse_ibmr(struct rds_ib_mr_pool *pool)
454454
struct rds_ib_mr *ibmr = NULL;
455455
int iter = 0;
456456

457-
if (atomic_read(&pool->dirty_count) >= pool->max_items_soft / 10)
458-
queue_delayed_work(rds_ib_mr_wq, &pool->flush_worker, 10);
459-
460457
while (1) {
461458
ibmr = rds_ib_reuse_mr(pool);
462459
if (ibmr)

0 commit comments

Comments
 (0)