Wikipedia에는 11 개의 캐시 교체 알고리즘이 나와 있습니다. 개발할 애플리케이션에 대해 거의 아무것도 모른다고 가정하면 "기본"캐시 교체 알고리즘으로 무엇을 사용해야합니까?
OS 과정에서 올바르게 기억한다면 LRU가 가장 일반적인 캐시 교체 알고리즘입니다. 하지만 내가 틀렸을 수도 있습니다.
또한 이것은 일반적으로 주 메모리가 저렴하고 풍부하기 때문에 캐시 크기에 대해 너무 걱정할 필요가 없기 때문에 약간의 학문적 인 질문입니다.
Wikipedia에는 11 개의 캐시 교체 알고리즘이 나와 있습니다. 개발할 애플리케이션에 대해 거의 아무것도 모른다고 가정하면 "기본"캐시 교체 알고리즘으로 무엇을 사용해야합니까?
OS 과정에서 올바르게 기억한다면 LRU가 가장 일반적인 캐시 교체 알고리즘입니다. 하지만 내가 틀렸을 수도 있습니다.
또한 이것은 일반적으로 주 메모리가 저렴하고 풍부하기 때문에 캐시 크기에 대해 너무 걱정할 필요가 없기 때문에 약간의 학문적 인 질문입니다.
답변:
가장 좋은 대답은 그것이 달려 있다는 것입니다. 내 경험에는 캐싱 알고리즘을 선택하는 데 많은 요소가 있습니다.
고려해야 할 요소
모든 다른 요소를 고려한 후에는이를 가장 잘 처리하는 캐시 알고리즘을 찾아야합니다. 예를 들어 많은 쓰기, 일부 다시 쓰기, 최근에 쓴 데이터 읽기 및 일종의 회전 미디어가있는 응용 프로그램이 있다고 가정합니다. 이 경우 일종의 하이브리드 캐싱 알고리즘이 필요합니다. 쓰기 데이터를 처리하려면 WOW (Wise order of Writes) 및 디스크에서 읽은 데이터에 대한 LRU 알고리즘과 같은 것이 필요할 수 있습니다. 그 이유는 디스크 액세스 비용이 매우 비싸고 WOW 알고리즘을 사용하면 데이터를보다 효율적으로 쓸 수 있고 LRU는 자주 액세스하는 데이터를 항상 캐시에 보관하기 때문입니다.
매우 빠른 액세스 시간을 갖는 SSD 디스크가 있다고 가정하면 디스크 액세스가 비교적 저렴하기 때문에 LRU 알고리즘을 선택하는 것이 좋습니다.
정말 말하고 싶은 것은 "최고의"답변이 없다는 것입니다. 가장 좋은 대답은 자신에게 적용되는 요소를 알고이를 처리하는 알고리즘을 선택하는 것입니다.
알고리즘을 찾는 방법
시스템을 프로파일하십시오. 일반적으로 메모리 액세스에 대한 통계를 유지하는 코드를 추가해야합니다. 프로파일 링을 통해 가장 중요한 요소를 확인할 수 있습니다.
과거에는 일정 기간 동안 모든 메모리 액세스를 추적하는 코드를 추가했습니다. 그런 다음 나중에 패턴을 찾습니다. 다시 읽기, 다시 쓰기, 순차적 액세스, 임의 액세스 등을 찾습니다.
중요한 것을 식별 한 후에는 어떤 유형의 처리가 가장 적합한 지 확인하기 위해 모든 다른 유형의 캐싱 알고리즘을 살펴 봐야합니다.
개발하려는 애플리케이션에 대해 거의 아무것도 모른다고 가정하면 실제로 캐시 시스템을 선택하고 구현하기 전에 이에 대해 더 많이 알아야합니다. 다시 말해서, 기본 구현은 없습니다 : 일부는 어떤 목적에는 좋고 다른 것은 전혀 나쁩니다 .
예를 들어, Least Recent Used 및 Least Frequently Used라는 두 가지 구현 만 수행하십시오. 어느 것을 먼저 사용할 것인지 결정하는 방법은 무엇입니까?
LRU는 사용자가 가장 최근 항목에 더 자주 액세스하고 이전 항목으로 돌아 가지 않거나 거의 반환하지 않을 것이라고 확신 할 때 좋습니다. 예 : 전자 메일 클라이언트의 일반적인 사용법. 대부분의 경우 사용자는 최신 메일에 지속적으로 액세스합니다. 그들은 읽고, 연기하고, 몇 분, 몇 시간, 며칠 후에 다시 돌아옵니다. 2 년 전에받은 메일을 검색 할 수 있지만 지난 2 시간 동안받은 메일에 액세스하는 것보다 덜 자주 발생합니다.
반면에 LRU는 사용자가 일부 항목을 다른 항목보다 훨씬 자주 액세스하는 상황에서는 의미가 없습니다. 예 : 나는 좋아하는 음악을 자주 듣습니다. 400 곡에서 적어도 일주일에 한 번 같은 5 곡을들을 수 있지만, 매년 100 번까지 좋아하지 않습니다. 많은. 이 경우 LFU가 훨씬 더 적합합니다.
두 가지 구현 만 수행하면 어느 것이 더 나은지 또는 응용 프로그램에 대한 충분한 정보가 없는지에 대해 생각하고 싶지 않을 때 사용할 수있는 "기본"알고리즘이 없다는 것을 알 수 있습니다. 그것은 기본적으로, 당신이 그것에 대해 아무것도 모르는 경우 미적분학의 결과를 찾기 위해 두 숫자를 더하거나 빼거나 곱하거나 나눠야하는지 묻는 것과 같습니다.
위키 백과로만 선택을 제한해야하는 이유는 무엇입니까? ACM Digital Library 와 같은 리서치 데이터베이스에 액세스하면 더 많은 알고리즘을 찾을 수 있습니다. 또한 특허를 어지럽히는 것에 대해서도 알고 있어야합니다. 예를 들어 ARC는 좋은 알고리즘이지만 불행히도 특허를 받았습니다.
완벽한 캐시 알고리즘은 없습니다. 항상 매우 잘못 작동하는 사례를 찾을 수 있습니다.
따라서 가장 나쁜 동작을 결정하기 위해 캐시되는 문제를 아는 것이 중요합니다.
또한 캐시 하는 데 필요한 시간과 캐시 할 수있는 시간을 고려해야합니다.