ceph luminous版本限制osd的内存使用

引言

ceph自从到了L版本以后,L版本的启用,对性能本身有了极大的提高,一直对这个比较不放心的就是内存的占用,刚开始的时候记得大量dd就可以把内存搞崩掉,这个应该是内部的设计逻辑需要更多的内存的占用

最近在做ARM版本的服务器的测试,机器为36盘位的机器,内存需要自然多,但是36盘位的机器,按之前想法是4G预留,那得需要144G内存了,这个还没有算迁移的时候的内存消耗,而很多时候,我们并不需要速度,只需要稳定就好

测试环境说明

测试环境比较简单,一台36盘位的arm机器,一台X86机器,通过万兆相连,设置集群为副本1,然后再X86上面通

限制前后对比

我们先按默认的来一组测试

用读取命令进行测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
rados  -p rbd  -t 64  bench 300  seq  --run-name  4Mt16
···
2019-09-03 15:19:20.478841 min lat: 0.188154 max lat: 0.658198 avg lat: 0.227437
sec Cur ops started finished avg MB/s cur MB/s last lat(s) avg lat(s)
20 63 5620 5557 1111.24 1124 0.223682 0.227437
21 63 5901 5838 1111.84 1124 0.232894 0.2274
22 63 6179 6116 1111.84 1112 0.210126 0.227447
23 63 6459 6396 1112.19 1120 0.209931 0.227353
24 63 6742 6679 1113.01 1132 0.210041 0.227428
25 63 7023 6960 1113.44 1124 0.447199 0.227417
26 63 7302 7239 1113.54 1116 0.213757 0.227367
27 63 7585 7522 1114.19 1132 0.222248 0.227416
28 63 7870 7807 1115.08 1140 0.198665 0.227351
29 63 8148 8085 1114.97 1112 0.222645 0.227402
30 63 8430 8367 1115.4 1128 0.205243 0.227394
31 63 8707 8644 1115.16 1108 0.22508 0.227397
32 63 8987 8924 1115.31 1120 0.198234 0.227326
33 63 9267 9204 1115.41 1120 0.232074 0.227447
34 63 9551 9488 1115.99 1136 0.230373 0.227413
35 63 9829 9766 1115.88 1112 0.214755 0.227405
36 63 10107 10044 1115.77 1112 0.233391 0.227403
37 63 10390 10327 1116.18 1132 0.223244 0.227412
38 63 10673 10610 1116.6 1132 0.221128 0.22742
···

通过top看下内存占用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Tasks: 526 total,   1 running, 237 sleeping,   0 stopped,   0 zombie
%Cpu(s): 1.6 us, 1.5 sy, 0.0 ni, 95.3 id, 1.5 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem : 13316204+total, 31199616 free, 10079264+used, 1169792 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 21086208 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
43967 ceph 20 0 4176384 3.1g 26624 S 1.3 2.4 0:08.79 ceph-osd
43890 ceph 20 0 4116992 3.0g 26688 S 1.0 2.4 0:08.69 ceph-osd
43753 ceph 20 0 4091712 3.0g 26752 S 2.3 2.4 0:08.88 ceph-osd
43873 ceph 20 0 4160000 3.0g 26688 S 2.0 2.4 0:08.77 ceph-osd
43998 ceph 20 0 4275776 3.0g 26688 S 2.3 2.4 0:08.91 ceph-osd
43716 ceph 20 0 4128960 3.0g 26688 S 2.3 2.3 0:08.95 ceph-osd
43899 ceph 20 0 3911232 3.0g 26688 S 1.7 2.3 0:08.44 ceph-osd
44022 ceph 20 0 4133120 3.0g 26752 S 2.0 2.3 0:09.29 ceph-osd
43617 ceph 20 0 4100608 2.9g 26688 S 2.6 2.3 0:09.13 ceph-osd
43868 ceph 20 0 4110016 2.9g 26688 S 2.6 2.3 0:08.70 ceph-osd
43792 ceph 20 0 4095552 2.9g 26752 S 2.3 2.3 0:09.02 ceph-osd
43985 ceph 20 0 4090368 2.9g 26624 S 2.3 2.3 0:08.84 ceph-osd
43707 ceph 20 0 4177472 2.9g 26624 S 2.3 2.3 0:08.79 ceph-osd
44028 ceph 20 0 4084288 2.9g 26624 S 2.3 2.3 0:08.93 ceph-osd
43995 ceph 20 0 4092480 2.8g 26688 S 2.3 2.2 0:08.95 ceph-osd
43852 ceph 20 0 4054528 2.8g 26752 S 3.6 2.2 0:08.75 ceph-osd
44038 ceph 20 0 3966528 2.8g 26688 S 2.6 2.2 0:08.51 ceph-osd
43755 ceph 20 0 4092096 2.8g 26752 S 3.0 2.2 0:09.10 ceph-osd
43718 ceph 20 0 4045376 2.8g 26688 S 1.3 2.2 0:08.84 ceph-osd
43901 ceph 20 0 3931648 2.7g 26688 S 1.7 2.2 0:08.67 ceph-osd
43880 ceph 20 0 4028992 2.7g 26688 S 2.6 2.1 0:08.82 ceph-osd
43897 ceph 20 0 3978752 2.7g 26624 S 2.3 2.1 0:08.59 ceph-osd
43858 ceph 20 0 4019776 2.7g 26560 S 1.3 2.1 0:08.89 ceph-osd

可以看到内存占用还是很可观的,我128G内存,基本要吃空了,内存需要的太大,还出现了无法分配内存的情况,我们限制下我们的内存

限制osd内存的参数
默认值为

osd_memory_target = 4294967296

我们限制到1G

osd_memory_target = 1073741824

设置好了后重启下所有的osd

再来一轮测试

同样的命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2019-09-03 15:28:41.369259 min lat: 0.189981 max lat: 0.88615 avg lat: 0.227472
sec Cur ops started finished avg MB/s cur MB/s last lat(s) avg lat(s)
40 63 11232 11169 1116.67 1116 0.221146 0.227472
41 63 11513 11450 1116.85 1124 0.22655 0.227467
42 63 11794 11731 1117.01 1124 0.213789 0.227451
43 63 12073 12010 1116.98 1116 0.21521 0.227447
44 63 12353 12290 1117.05 1120 0.232574 0.227455
45 63 12632 12569 1117.02 1116 0.217199 0.227449
46 63 12917 12854 1117.52 1140 0.211747 0.227425
47 63 13194 13131 1117.31 1108 0.229418 0.227473
48 63 13476 13413 1117.52 1128 0.229639 0.227456
49 63 13756 13693 1117.57 1120 0.228479 0.22745
50 63 14041 13978 1118 1140 0.21689 0.227463
51 63 14316 14253 1117.64 1100 0.23947 0.227468
52 63 14599 14536 1117.92 1132 0.215251 0.227452
53 63 14880 14817 1118.03 1124 0.227617 0.227461
54 63 15160 15097 1118.05 1120 0.224964 0.227449
55 63 15442 15379 1118.22 1128 0.219148 0.227451
56 63 15721 15658 1118.18 1116 0.223736 0.227459
57 63 16001 15938 1118.21 1120 0.23183 0.227468
58 63 16282 16219 1118.3 1124 0.217697 0.227465
59 63 16566 16503 1118.6 1136 0.217804 0.227465

查看修改后的内存占用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
top - 15:29:10 up  4:54,  6 users,  load average: 1.88, 2.74, 2.25
Tasks: 506 total, 1 running, 239 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.2 us, 0.9 sy, 0.0 ni, 97.4 id, 0.0 wa, 0.0 hi, 0.4 si, 0.0 st
KiB Mem : 13316204+total, 12275264+free, 9211264 used, 1198144 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 11264793+avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
48575 ceph 20 0 908544 262144 26688 S 2.0 0.2 0:09.71 ceph-osd
48547 ceph 20 0 904448 252800 26752 S 1.0 0.2 0:09.36 ceph-osd
48480 ceph 20 0 902336 247552 26624 S 1.3 0.2 0:09.11 ceph-osd
48485 ceph 20 0 906048 242048 26688 S 1.7 0.2 0:09.38 ceph-osd
48423 ceph 20 0 901312 241984 26688 S 1.3 0.2 0:09.62 ceph-osd
48534 ceph 20 0 896576 234752 26688 S 1.3 0.2 0:09.22 ceph-osd
48395 ceph 20 0 902656 231360 26688 S 2.0 0.2 0:08.96 ceph-osd
48474 ceph 20 0 899584 225920 26624 S 1.3 0.2 0:09.07 ceph-osd
48369 ceph 20 0 891456 223232 26688 S 1.3 0.2 0:09.31 ceph-osd
48375 ceph 20 0 899648 222016 26624 S 1.7 0.2 0:08.72 ceph-osd
48365 ceph 20 0 885312 220928 26688 S 1.3 0.2 0:09.06 ceph-osd
48421 ceph 20 0 899200 218944 26688 S 1.7 0.2 0:09.31 ceph-osd
48478 ceph 20 0 889344 218496 26880 S 1.3 0.2 0:09.46 ceph-osd
48347 ceph 20 0 879104 218112 26688 S 1.7 0.2 0:08.52 ceph-osd
48515 ceph 20 0 891456 215680 26688 S 2.0 0.2 0:09.21 ceph-osd
48465 ceph 20 0 884224 214336 26688 S 1.7 0.2 0:08.82 ceph-osd
48560 ceph 20 0 892480 214144 26624 S 1.3 0.2 0:08.87 ceph-osd
48552 ceph 20 0 900992 213952 26752 S 1.7 0.2 0:09.32 ceph-osd
48599 ceph 20 0 890432 213760 26624 S 2.0 0.2 0:09.19 ceph-osd
48613 ceph 20 0 882176 213056 26752 S 1.0 0.2 0:09.12 ceph-osd
48430 ceph 20 0 893440 212672 26688 S 1.7 0.2 0:09.18 ceph-osd
48503 ceph 20 0 885312 211456 26688 S 2.3 0.2 0:09.52 ceph-osd
48444 ceph 20 0 889408 211200 26752 S 2.0 0.2 0:09.60 ceph-osd
48635 ceph 20 0 898624 210944 26688 S 2.0 0.2 0:09.26 ceph-osd
48526 ceph 20 0 898624 210752 26816 S 2.6 0.2 0:09.20 ceph-osd
48491 ceph 20 0 898368 210304 26816 S 2.3 0.2 0:09.57 ceph-osd

可以看到内存控的好好的,并且在这个场景下面,我们的性能并没有太多的损失,基本一致的,因为我的环境是单万兆的,输出的网络带宽是小于底层磁盘可以提供的带宽的,这个情况下磁盘的占用也就没那么满

这个也是我在做配置的时候推荐的一点,各项资源不要打的那么满,对于带宽场景来说,多留几个磁盘的输出冗余,那么在出现一些异常的时候,底层也不会影响到那么大

总结

本篇通过一个参数的介绍,讲述了osd的内存的占用的控制,一般情况来说,默认的参数已经足够好了,当然你在很确定你修改的参数会影响什么的情况下,可以根据需要做一些调整,如果在你的IO模型下面,你调整了都看不到效果,那还是不动为好

我们手上有高性能的arm,就是上面的这款测试用到的,有32个processor,内存最大可以支持到

1
2
Maximum Capacity: 512 GB
Number Of Devices: 16

盘位的机箱我们有能力自己设计,也就是可以根据需要进行定制,有需要的可以找我

变更记录

Why Who When
创建 武汉-运维-磨渣 2018-09-03