지금까지 raid의 캐쉬크기나 그런 것을 대충 감으로 설정 했는데,
김경민님의 댓글을 읽고 생각을 다시 하게 되었습니다.
감사드립니다.
아무런 근거없는 판단이고 생각이므로, 필터링 해서 읽으셨으면 합니다.
미리 결론을 지으면 아래와 같습니다.
읽기 캐쉬 : 60분의 read 용량
쓰기 캐쉬 : 2-3분 정도의 write 용량
전체 캐쉬 : 읽기와 쓰기중 max 값의 2배.
===
리눅스의 iostat에서 보여지는 Read_Blk/s나 Wrtn_Blk/s가 초당 처리되는 바이트를 의미한다고 합니다.
http://kldp.org/node/26908
초당 얼마나 많은 i/o 요청을 하는가 : tps, r/s, w/s - 전체, read, write io request
초당 전송량 : r/w 전송양입니다. -k 옵션이 없을때는 블락기준이며(Blk_read/s Blk_wrtn/s)
초당 전송량 : r/w 전송양입니다. -k 옵션이 없을때는 블락기준이며(Blk_read/s Blk_wrtn/s)
이를 byte 로 바꾸러면 512 byte 를 곱하면 됩니다.
-k 옵션이 있으면 바이트로 나옵니다. (rkB/s, wkB/s )
r/w 비율 : i/o request, 전송량에서 read 와 write 비율을 보면 주로 읽기중심인지 쓰기중심인지 알 수 있을 것입니다.
r/w 비율 : i/o request, 전송량에서 read 와 write 비율을 보면 주로 읽기중심인지 쓰기중심인지 알 수 있을 것입니다.
===
레이드를 선택하기전에 먼저 iostat -k를 해봐야 합니다.
(1) 2CPU 서버 Case
2CPU 서버는 Wrtn가 초당 1.8mb. read가 19.81로 쓰기쪽이 압도적인 비율로 높습니다.
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 113.55 19.81 1805.31 55337379 5043118347
1분동안 누적되는 wrtn 용량은 read가 1.2메가 정도이고, write가 108메가 였습니다.
처음에 read/write의 비율을 25:75로 했었는데, 읽는 쪽에서 지연현상이 많이 생겨서
50:50으로 바꿨더니, 전체적으로 성능이 좋아졌습니다.
그런 경험으로 추정해 볼 때,
read의 경우에는 실제 보다 많이 여유롭게 60분 정도로 하면 72메가 정도를 쓰는 것이 되겠네요.
write의 경우 지연 때문에 결국 DWC를 살려서 disk의 캐쉬용량(64메가 정도)을 쓰도록 했습니다.
전원이 날라가면 데이터도 날라가지만, 속도지연보다는 그게 더 나은거라 생각합니다.
대충 추정해보면, 2분정도 용량(216메가 정도)이 들어가야 여유로울 것 같습니다.
결론 : 2CPU의 경우 256mb cache는 부족하다.
물론 판단의 문제가 있습니다.
OS와 데이터를 1개의 볼륨으로 잡았기 때문에 cache 데이터가 효율적으로 쓰이지 못했을 수 있습니다.
(2) DB서버 (부하가 좀 심한 것)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 4.37 76.21 57.91 1475289 1121016
sdb 388.89 9975.24 310.63 193092005 6012848
읽는 것이 10mb, 쓰는 것은 310k로 읽는 것 중심의 서버 입니다.
대부분의 DB서버가 읽기 보다 쓰기가 월등한데, 이 DB 서버는 읽기가 압도적입니다.
메모리가 부족해서 swap도 쓰는 서버구요.
읽는 것은 1분에 600메가. 쓰는 것은 18메가.
캐쉬의 용량이 512mb인 3ware이고, 읽고 쓰는 캐쉬 비율의 조정이 안되니 50:50이라고 추정 됩니다.
그런데, sdb는 삼성 840 프로. 캐쉬가 많이 있는 SSD 입니다.
성능은 아주 쾌적한데, 캐쉬를 1G까지 늘려주면 더 좋을 것 같은 괜한 생각이 듭니다.
(3) 웹서버 (트래픽 60mbps)
db는 없고, 웹서버만 있는 장비인데, 60mbps 정도가 꾸준히 나가는 HP DL160G6이고,
raid는 P212/256mb 입니다.
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.67 0.55 4.64 1523258 12975756
이상하게 disk io가 낮습니다. 디스크는 SAS 300G 2개를 Raid 1으로 엮었구요.
웹사이트의 모든 프로그램이 모두 다 캐쉬에 들어가 있어서 그런 것일까요?
사용량이 너무 작아서 화가 나는 장비로, raid 설치후에 성능개선이 아주 현저했습니다.
나중에 vm 올려서 개발용이나 다른 목적으로 써야 할 것 같습니다.
캐쉬용량이 256mb면 넘치고도 또~ 넘칩니다.
(4) 웹서버 (트래픽 1mbps)
이것도 DB없이, 웹만 서비스하는 서버이고, 웹 트래픽은 1mbps 입니다.
슈마 6016T 장비로, Areca-1220(256mb)를 레이드카드로 쓰고 있습니다.
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sdb 0.43 0.63 30.51 379897 18459304
sda 5.78 0.43 47.98 259130 29024228
위에 (3)번과 달리 disk는 보통의 sata 입니다.
read는 (3)과 비슷하고, write는 10배쯤 높지만, 그래봐야 1분에 3메가도 안됩니다.
그냥 256메가 캐쉬의 늙은 raid 카드로도 부족하지 않을 것 같습니다.
(5) db 서버 (보통수준의 부하)
IBM x3550m3에 5014(256mb cache)를 장착하고 있으며, 10k SAS 디스크 4개를 raid 10으로 묶었습니다.
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 15.12 11.93 203.16 2579124 43913612
쓰기가 0.2mb로 3분 해봐야 36메가. 좀 많이 작네요.
256mb 캐쉬의 5014로 충분하고 또 충분할 것 같습니다.
5015로 바꾸려고 했었던 마음을 접어야 하겠네요.
===
DB서버에 장착할 경우
512mb의 델 PERC 710과 1기가의 710P를 놓고 판단할 때, 무조건 710P 입니다.
가격차이가 별로 안나거든요.
웹서버에 장착할 경우에는, 싼 710을 무조건 선택합니다.
캐쉬가 많아봐야 별거 없을 것 같거든요.
===
근거 없는 글의 이유는 관련된 자료가 구글이나 어디에나 없기 때문입니다.
지난 3달간 20개쯤의 raid를 서로 상황이 다른 서버에 넣고 빼고 했습니다.
그 결론을 대충 지어봐야 다음에 raid 선택을 할 때 기준이 되기에 추정한 겁니다.
좋은 raid card 쓰고 싶고, 더 빠른 클럭의 카드 가지고 싶지만, 가성비 생각해야죠.
7.5만의 areca-1220(256), 17만의 IBM ServeRaid 5014 (no BBU) 이러한 늙은 것으로도
raid card 없는 것보다 성능을 2배는 올리는 것이 가능 했습니다.
도입한지 2년이 넘은 웹서버 (DB가 없는 것) 정도는 areca-1220급으로 충분 합니다.
DB가 팡팡 돌아가서 iostat -k에서 10m 이상이 나온다면 삼성 840프로나 인텔 520 SSD 끼우고 raid도 1G짜리는 써줘야 합니다.
그 중간에는 뭘 쓰던, 심각한 성능차이는 나올거 같지 않구요.
- to be continue -
..
¿©À¯°¡ µÈ´Ù¸é.. ¿ª½Ã ´Ù´ÙÀͼ±Àϱî¿ä? ^^
µà¾ó POC¿Í 1G ÀÌ»óÀÇ 1333MHz ÀÌ»óÀÇ ·¥.
°®Ãâ¼ö¸¸ ÀÖ´Ù¸é.