일부 네트워크 IO를 수행하는 Linux 프로그램이 있다고 상상해 보세요. 프로그램 실행은 결정적이지 않습니다. 스레드 예약 방법, 운영 체제에서 제공하는 임의의 값, 커널 IO 처리 방법, 특정 코드 조각을 실행하는 데 걸리는 시간에 따라 다른 결과가 생성됩니다. , 메모리 크기는 CPU 캐시에 있습니다.
프로그램이 항상 정확히 동일하게 동작하도록 docker run을 구성할 수 있습니까? 실행하기 전에 임의의 시드를 지정하고 정확히 동일한 커널 일정, 동일한 CPU 캐시를 갖습니까? 모든 입력이 정확히 동시에 제공된다는 점을 고려하면.
오늘날에는 불가능할 수도 있지만 이러한 종류의 결정론적 작업을 구현하는 데에는 어떤 제한이 있습니까?
답변1
도커 컨테이너는 다른 네임스페이스를 가진 프로세스일 뿐이며 시스템의 다른 프로세스(특히 스레드 및 I/O 예약)와 똑같이 실행됩니다. 따라서 표준 프로세스를 수행할 수 없으면 Docker 컨테이너에서도 수행할 수 없습니다.