Platform Thread vs Virtual Thread의 AI I/O 블로킹 효율 비교
·
java
Platform Thread Platform Thread는 운영체제의 1:1 스레드 매핑 방식을 선택했습니다. 여기서 1:1 매핑이란 사용자 영역에 존재하는 JVM에서 생성된 스레드가 커널 영역의 스레드와 1대1 형태로 매핑된것을 말하며 스레드 스케줄링의 통제권을 운영체제 커널에 전적으로 위임 했다는 뜻 입니다. 이 방식을 선택 한 이유는 지금의 CPU는 멀티코어 환경으로 CPU의 성능을 최대로 사용하기 위함 입니다 OS 스케줄러가 TCB를 직접 관리 하면서 CPU의 멀티코어 자원에 자바 스레드를 골고루 분산 배치 해 물리적으로 동시에 연산이 가능하게 합니다. 초창기 자바는 1:N 매핑 방식을 사용했습니다 이 방식의 한계는 1개의 OS 스레드가 JVM의 여러 스레드를 관리 하는 방식으로 만약 하나의 스레..
RAG(검색증강생성)를 위한 코사인 유사도(Cosine Similarity) 고속 연산
·
java
요구사항유저의 질문 벡터와 가장 유사한 데이터 Top 5를 추출하는 고속 벡터 연산 알고리즘 구현반복문 언롤링 및 프리미티브 배열 최적화를 통해 연산 속도 극대화.구현 사항OpenAi의 text-embedding-3-small 을 사용해 사용자의 질문 및 기본 지식 세팅시 Vector 배열 추출기본 지식을 넣을 API 구축카테고리 설정으로 모든 정보를 다 뒤지는게 아닌 특정 카테고리 데이터만 서치외부 API를 사용해서 얻은 지식 벡터 데이터는 postgresql 에 저장사용자의 질문 API 구축사용자의 질문에 대해 유사도 Top5 추출 기능pgvector 기반 DB내 Top5 추출반복문 언롤링 및 프리미티브 배열 최적화를 통한 고속 벡터 연산 알고리즘 사용해 Top5 추출 InMemoryVectorRow..
Thread-Per-Connection 소켓 폭발 및 락 병목 스레드 덤프 분석
·
java
요구 사항멀티스레드 소켓 채팅 서버에 k6로 대량 동시 연결을 인입시켜 Thread-Per-Connection 구조의 한계를 확인한다.최초 목표는 3,000개 동시 연결이었고, 한계 지점을 확인하기 위해 최대 10,000개 연결까지 부하를 증가시켰다.그 과정에서 스레드 생성 폭발로 인한 OOM 또는 native thread 생성 실패 상황을 재현한다.AI 응답 대기 시간 동안 `synchronized` 락에 묶여 병목이 발생한 스레드 상태를 `jstack` 덤프로 추출해 원인을 격리한다. 문제 사항메모리 고갈 (OOM):고동시성 트래픽 유입 시 Thread-Per-Connection 구조에서는 연결 수에 비례해 플랫폼 스레드가 증가한다.플랫폼 스레드는 Java Heap 안에만 존재하는 것이 아니라 OS ..
Wrapper 객체 오버헤드 프로파일링 & 소켓 버퍼 벤치마크
·
java
요구사항수백만 개의 AI 대화 임베딩 데이터(실수형 벡터)를 자바 Double[], double[] 배열에 적재 해 각각의 힙 메모리 점유율 및 소켓 전송 시 CPU 캐시 미스 비용 비교 분석 문제 정의double Primitive Type, Double Wrapper Type 을 각각 물리적 메모리를 얼마나 사용하는지, 하드웨어 레벨에서 어떤 성능 차이를 나타내는지 검증하고, 기록 해보자 공통 구성VECTOR_COUNT (메모리에 적재할 대화 문장의 개수) = 100_000DIMENSION (대화 문장 1개의 실수형 숫자 개수) = 768 PrimitiveEmbeddingMemoryTestpublic class PrimitiveEmbeddingMemoryTest { private static f..