페이징

jiaLEE·2022년 8월 10일
2

속도이슈로 인해 페이징을 보완하자고 의견이 나왔다.
근데 속도과 페이징이 무슨 연관이 있는거지??
이번 기회에 페이징 그리고 성능과의 관계에 대해서도 알아보자!

회사에서 말한 페이징은 db 페이징 처리(우리가 웹사이트에서 보는 페이징)를 통해 항상 모든 데이터를 가져오는 게 아니라 일부의 데이터만을 가지고 와서 db의 과부화를 막음으로 속도를 보완하자는 이야기였다.. 껄껄

아래는 페이징은 운영체제기술의 페이징이다. 같은 페이징이지만 전혀 다른점! 인지하자.

페이징 기법, 왜 나타난거지?

컴퓨터의 메모리는 한정적이기에 가상 메모리를 연결해서 사용하며 메인 메모리에서 가상메모리의 프로세스들을 가지고 와서 실행한다. 이때 메인메모리의 남은 크기와 가지고 오려는 프로세스의 크기가 다양한 크기로 존재하게 될 경우, 비효율적으로 메인 메모리를 사용하게 된다. 이것을 "외부 단편화" 라고 칭하며 효율적으로 메모리를 사용하기 위해 페이징을 하게 된다.

그렇다면 페이징이란?

고정분할 방식으로 메모리를 분할하여 가상주소를 물리 주소로 변환하는 방법이다.

🤷🏻‍♀️ 이게 무슨말이지?..

단편화를 최소화하기 위해 메인메모리와 가상메모리를 같은 크기로 분할해 가지고 와서 할당한다.

  • 가상메모리는 하나의 분할된 영역을 page(페이지) - 논리주소
  • 물리메모리는 하나의 분활된 여역을 Frame(프레임) - 물리주소(실제의 주소)

페이지와 프레임의 크기는 같기때문에 단편화(자투리 공간)를 줄여서 메모리를 효율적으로 사용할 수 있다.

즉, 맨 처음 언급했듯이 고정분할 방식(고정된 크기로)으로 메모리를 분할하여 가상주소를 물리 주소로 변환하는 방법이다.

이때 가상메모리에서 어떤 페이지를 가지고 왔고 어떤 프레임에 넣었는지에 대한 기록표가 필요한데 이걸 페이지 사상 테이블(page table)에 담는다.
각 각의 row는 페이지에 대한 정보를 기억한다. (페이지를 기억하는게 아님)


가상메모리의 페이지를 주기억장치에 올려서 사용하고 다 사용하면 교체하는 식으로 계속해서 가상메모리를 읽어오는데 이걸 "스와핑"이라고 한다.

여기서 "페이지의 크기가 작다" 라는 건 무엇을 뜻할까?

  • 내부단편화(짜투리공간)가 적게 나타난다.

  • 페이지 사상 테이블(page table)이 커진다. : 크기가 작으니 더 많은 row가 쌓인다.

  • 페이지 부재(가장 필요한 데이터가 없는 상태)가 크다. -> 페이지의 용량이 작으니까 교체 할일이 많다. -> 성능감소 -> 스레싱

  • 스레싱(thrashing) : 하드디스크의 입출력이 너무 ㅁ낳아져서 잦은 페이지의 부재로 마치 작업이 멈춘것 같은 상태를 말한다.

그래서? 페이징이랑 성능최적화랑 무슨 상관이야?

위에서 페이지의 크기가 너무 작을 경우, 스레싱이 발생될 수도 있다고 언급했다.

페이징은 크게 offset 기반 방식과 cursor 기반 방식 이렇게 존재한다.

offset은 페이지단위로 응답하는 형태이고
cursor방식은 마지막으로 응답된 DB를 기준으로 다음 DB를 내보내는 형태이다.

알맞은 크기의 페이지로 설정해도 offset방식으로 페이징을 하였다면
아래의 예시처럼 성능 저하가 생길 수 있다.

예를 들어) 상품을 불러오는 페이지에서 내가 5페이지를 클릭했을때 전체 행을 다 확인한 후, 5페이지의 상품들을 가지고 온다. 그렇기때문에 뒷 페이지로 갈수록 성능저하가 온다. (앞 행들을 불러오지않더라고 결국 다 봐야하기 때문에)

이런 성능저하를 방지하기 위해 TLB, 인덱싱 등등이 있다.

  • TLB: 가상 주소-실주소 변환 정보를 저장하는 하드웨어 캐시

성능개선을 위한 방법은 업무를 실제로 해보고 좋은 방법들에 대해 정리해볼 계획이다!

참고:
커서 기반 페이지네이션 (Cursor-based Pagination) 구현하기 (velog.io)
https://jhnyang.tistory.com/290
최희준교수의-컴퓨터 일반, [홀인원 1.03.07] 페이징(Paging) 기법

0개의 댓글