본문 바로가기

전체 글28

[번역] An O(1) algorithm for implementing the LFU cache eviction scheme An O(1) algorithm for implementing the LFU cache eviction scheme Prof. Ketan Shah, Anirban Mitra, Dhruv Matani August 16, 2010 원문 (참고): Go 구현 Abstract 캐시 제거 알고리즘은 애플리케이션에서 사용하는 데이터를 캐싱하여 실행 속도를 높이기 위해 캐시를 사용하는 운영 체제, 데이터베이스 및 기타 시스템에서 널리 사용됩니다. 다음과 같은 많은 정책이 있습니다. MRU(가장 최근 사용), MFU(가장 자주 사용), LRU(가장 최근 사용), LFU(가장 적게 사용) 등 다양한 정책이 있으며, 각각 장단점이 있으므로 특정 시나리오에 따라 사용됩니다. 지금까지 가장 널리 사용되는 알고리즘은 O(1)의.. 2023. 3. 11.
[번역] TIME_WAIT Coping with the TCP TIME-WAIT state on busy Linux servers Vincent Bernat 2014. 2. 25. The license CC BY-NC-SA 3.0 원문 Linux 4.12 이후에는 더 이상 존재하지 않는 net.ipv4.tcp_tw_recycle 을 활성화하지 마세요. 대부분의 경우 TIME_WAIT 소켓은 무해합니다. 그렇지 않은 경우 권장 솔루션에 대한 요약으로 이동하세요. Linux 커널 문서는 net.ipv4.tcp_tw_recycle 및 net.ipv4.tcp_tw_reuse의 기능에 대해 그다지 도움이 되지 않습니다. 이러한 문서 부족으로 인해 수많은 튜닝 가이드에서 이 두 설정을 모두 1로 설정하여 TIME-WAIT 상태의 항목 수를 .. 2023. 3. 6.
이더스캔 분석 2 - 트랜잭션 Overview 페이지 이더스캔 분석 1 -블록 페이지 지난 시간에는 블록 페이지에 대한 분석을 했었다. 이번에는 트랜잭션 페이지에 있는 데이터들을 살펴보려 한다. 블록 페이지와는 다르게 트랜잭션 페이지는 여러 페이지로 나누어져 있다. 크게 Overview, Internal Txs, Logs, State, Comments로 나눌 수 있는데 오늘은 Overview 페이지를 다룬다. 먼저 바로 채워줄 수 있는 필드를 알기 위해 ethclient에서 해당 트랜잭션 데이터를 가져와보자. { "type": "0x2", "nonce": "0x17e", "gasPrice": null, "maxPriorityFeePerGas": "0x1c03a180", "maxFeePerGas": "0x4f0238e10", "gas": "0x44eea", .. 2023. 3. 5.
[신화] 프로크루스테스 다마스테스는 그리스 신화에 등장하는 도적이다. 그는 다른 도적과는 달리, 지나가는 나그네들에게 극진한 대접을 했다고 한다. 그의 집에는 두 개의 침대가 있었다고 하는데 하나는 크기가 큰 침대이고, 하나는 크기가 작은 침대였다. 그는 키가 큰 손님은 크기가 작은 침대에 재우는데 침대에서 삐져나온 부분을 잘라 죽음에 이르게 했고, 키가 작은 손님은 크기가 큰 침대에 눕혀 침대에 크기에 맞을 때 까지 사람을 늘려 죽음에 이르게 했다고 한다. 이런 기행때문에 그에게는 '잡아 늘이는 자', 또는 '두드려서 펴는 자' 라는 뜻의 프로크루스테스라는 별명이 붙었다. 그의 최후 또한 흥미로운데, 그는 테세우스에게도 똑같은 방법으로 살인을 하려다가 본인이 행하던 방법으로 죽음에 이르게 된다. 자신의 기준에 딱 맞지 않고,.. 2023. 3. 2.
이더스캔 분석 1 - 블록 페이지 이더스캔 분석 2 - 트랜잭션 Overview 페이지 이더리움 기반에서 개발을 한다면 이더스캔을 한 번쯤은 이용해보았을 것이다. 제공하는 데이터가 풍부하여 디버깅에 많은 도움을 준다. 트랜잭션에서 발생한 이벤트들을 직접 가져와 파싱하는 과정은 꽤 번거로운데, 이더스캔에서는 바로 눈으로 볼 수 있다. 이더스캔에서 보여주는 데이터들은 어디서 어떤걸 얻고, 어떻게 가공되어서 우리에게 보여지고 있을까? 이 값들을 분석하려면 각 필드들이 어떤 역할을 하는지 알고 있어야 하기 때문에, 이를 분석해보는 것은 의미 있는 일이지 않을까 싶다. '이더스캔 분석'에서는 Go언어와 go-ethereum에 속한 ethclient 라이브러리를 이용할 것이다. 그리고 원하는 데이터를 구하는 과정은 기록하지만 DB에 저장하는 과정은.. 2023. 2. 26.
MTU (Maximum Transmission Unit) MTU란 단어는 네트워크 기초를 공부하다보면 한번쯤은 접하게 되는 용어이며, 특정 네트워크 계층에서 전송할 수 있는 최대 크기를 의미한다. 데이터 링크 계층인 이더넷에서 MTU가 몇일까 생각해보면 보통은 1500이란 값을 떠올린다. 이는 기본 MTU 값으로 정해져 있기 때문인데, 초기 네트워크 인터페이스 카드에는 많은 양의 프레임(바이트)을 포함할 수 있는 큰 버퍼가 없었기 때문에 당시에는 1500바이트가 "괜찮은" 것처럼 보였다고 한다. 하지만 현대에 와서는 네트워크 속도가 빨라지고 전송해야 할 데이터의 크기도 급속하게 증가하고 있기 때문에 1500바이트란 값이 작다고 느껴질 수 있다. 큰 데이터를 잘게 잘라서 여러 번 보내는 것보다는 큰 덩어리로 적게 보내는 것이 더 빠른것은 당연한 결과일 것이다. .. 2023. 2. 26.