같은 Root Complex라고 같은 링크를 공유하지는 않습니다
장치 BDF, Root Port·switch 경로, 협상된 링크 속도·폭을 먼저 남깁니다. 같은 Root Complex 아래라는 표기만으로 두 endpoint가 같은 x2 링크나 같은 SoC 내부 arbitration 경로를 공유한다고 가정하지 않습니다. CPU의 완료 처리와 메모리 경로에서도 간섭할 수 있습니다.
fio 버전과 job 파일의 rw, bs, iodepth, numjobs, ioengine, direct, 대상·파일 시스템·CPU 배치를 기록합니다. NIC도 방향·패킷 크기·전송률과 CPU 배치를 맞춥니다. Storage 단독, NIC 단독, 동시 부하를 같은 시간 구간으로 비교하고, 후속 시험은 한 변수만 바꿉니다. 이 글에서는 실제 부하를 실행하거나 장치 설정을 바꾸지 않았습니다.
Direct 쓰기에 buffered writeback 설명을 그대로 붙이지 않습니다
fio 문서에서 direct=1은 보통 O_DIRECT를 쓰는 비버퍼 I/O입니다. 반대로 buffered 쓰기에서는 page cache의 dirtying과 writeback이 개입합니다. 읽기·direct 쓰기·buffered 쓰기를 서로 다른 조건으로 비교해야 합니다.
Linux VM 문서는 background flusher가 쓰기 시작하는 dirty 임계치와 데이터를 쓰는 태스크가 직접 writeback에 참여하는 임계치를 구별합니다. buffered 쓰기의 dirty page 증가·writeback·메모리 압력을 조사할 수 있지만, 지연이 관측됐다는 이유로 이 설정을 먼저 변경하는 것은 원인 검증이 아닙니다.
D-state 시간과 fio clat는 같은 시계가 아닙니다
fio 요청 준비·제출 → 커널·장치 요청 처리 → 완료 통지·태스크 실행 → fio가 완료를 회수 구간별 시각을 따로 대조
fio 출력 설명은 slat, clat, lat를 구분합니다. 비동기 엔진의 clat는 제출 처리 뒤 fio가 완료를 회수할 때까지를 포함하므로 장치 내부 서비스 시간 그 자체가 아닙니다. 태스크의 D-state 체류 시간도 별도 지표입니다. 평균 외에 같은 조건의 p50·p95·p99·최대값, 처리량과 오류를 함께 비교합니다.
관측 구간마다 원인 후보를 좁힙니다
- CPU·IRQ: 같은 구간의
/proc/interrupts·/proc/softirqs증분과 실제 IRQ affinity, CPU 부하를 봅니다. IRQ 증가만으로 저장장치 완료 지연의 원인을 확정하지 않습니다. Managed IRQ의 affinity는 커널이 관리하며 사용자 공간의/proc인터페이스로 임의 변경할 수 없습니다. - Block 완료: 대상 장치의 요청 발행·완료와 태스크 wakeup·실행 시각을 대조합니다. 요청 자체가 늦었는지 완료 뒤 스케줄링·회수가 늦었는지 분리합니다.
- 메모리·I/O 압력: PSI의 stall 정보와 태스크별 delay accounting은 대기 범위를 좁히는 자료입니다. 어느 것도 PCIe 링크 경합을 직접 측정하는 카운터는 아닙니다.
- PCIe·SoC: 실제 공유 링크, 속도·폭 변화, 오류, 제공되는 interconnect·memory-controller 카운터를 확인합니다. DMA 경로와 완료 통지 경로를 혼동하지 않습니다.
한 변수만 바꾼 재시험에서 어떤 구간이 먼저 길어지는지 재현하는 것이 중요합니다. 상관관계가 보인다는 것과 특정 중재기·큐가 원인이라는 것은 별도의 결론입니다.
원자료의 10ms를 검증된 원인으로 바꾸지 않습니다
Trinadh Kumar의 사례에 언급된 약 10ms는 원시 trace와 재현 설정을 여기서 검증한 측정값이 아닙니다. 이 글은 보존 원고 #565와 공개 도구·커널 문서를 대조한 진단 구조이며 그 사례의 원인을 확정하거나 사용자 시스템의 병목을 진단한 결과가 아닙니다.
English summary. Separate device service, kernel completion and task scheduling. D-state time, fio completion latency and PSI stalls are different observations. Shared Root Complex membership alone does not prove a shared-link bottleneck.