CUPS 처리 시 많은 양의 사본을 인쇄하는 데 시간이 오래 걸리는 이유는 무엇입니까?

CUPS 처리 시 많은 양의 사본을 인쇄하는 데 시간이 오래 걸리는 이유는 무엇입니까?

21페이지(양면) 컬러 PDF 문서를 40부 인쇄해야 합니다. "인쇄"를 클릭한 후 프린터가 인쇄를 시작할 때까지 40분이 걸렸습니다.

복사본을 인쇄하면 훨씬 빠르게 시작됩니다. 복사량이 많을수록 인쇄를 누른 후 인쇄가 시작될 때까지의 지연 시간이 길어지는 것 같습니다. 왜 그럴까요? CUPS가 840페이지 문서를 프린터로 보내고 있습니까? 프린터가 파일을 받아들이고 복사본을 만드는 방법을 "알아야" 하지 않습니까?

답변1

프린터가 파일을 받아들이고 복사본을 만드는 방법을 "알아야" 하지 않습니까?

이를 위해서는 프린터에 a) 전체 문서를 저장하고 b) 인쇄 작업의 단일 페이지를 전체 해상도로 렌더링할 수 있는 충분한 메모리가 있어야 합니다. 이러한 내용이 사실이라 하더라도 CUPS는 프린터에 그렇게 하라고 지시해야 합니다. CUPS가 프린터에서 이 작업을 수행할 수 있는지 확신할 수 없는 경우 CUPS는 개별 페이지 840개의 인쇄 작업을 프린터로 보냅니다.

또 다른 가능성은 사본을 인쇄하는 것입니다.정리되지 않은즉, 먼저 첫 번째 양면 페이지를 40부 인쇄한 다음 두 번째 양면 페이지를 40부 인쇄하는 식으로 진행됩니다. 이렇게 하려면 사용자가 문서의 각 복사본을 수동으로 모아야 하므로 페이지가 많으면 짜증나고 오류가 발생하기 쉽습니다. 이래서 카피가 있는거구나정리됨(즉, 복사본 #1의 모든 페이지를 먼저 인쇄한 다음 복사본 #2의 모든 페이지를 인쇄하는 등) 가능할 때마다 이것이 최신 프린터 드라이버의 기본 설정인 경우가 많습니다.

답변2

내가 아는 한 이것이 GhostScript의 비효율성의 원인입니다.

오래된 Raspberry Pi 1에서 EcoTank 잉크젯 프린터로 100개의 단일 페이지 PDF 문서를 보냈습니다. Pi의 GNU/Linux는 프린터가 데이터 수신을 시작 top하고 명령이 다음을 수행 하기 전에 오랜 시간 동안 psCPU의 거의 100%를 차지합니다 .

gs -dQUIET -dPARANOIDSAFER -dNOPAUSE -dBATCH -dNOINTERPOLATE -dNOMEDIAATTRS -dShowAcroForm -sstdout=%stderr -sOutputFile=%stdout -sDEVICE=cups -r360x360 -dDEVICEWIDTHPOINTS=595 -dDEVICEHEIGHTPOINTS=841 -dcupsBitsPerColor=8 -dcupsColorOrder=0 -dcupsColorSpace=0 -dcupsCompression=1 -scupsPageSizeName=A4 -I/usr/share/cups/fonts -c <</.HWMargins[8.400000 8.400000 8.400024 8.399963] /Margins[0 0]>>setpagedevice -f -_

/usr/bin/gs입력을 캡처한 스크립트로 일시적으로 대체하려고 시도했을 때 CUPS가 100페이지 PDF 파일을 생성했음을 확인하고( 를 사용하여 pdftopdf) GhostScript에 이를 래스터화하도록 요청했습니다.

즉, CUPS에서는 100페이지를 비트맵으로 변환하려면 GhostScript가 필요합니다. CUPS는 GhostScript에 한 페이지만 변환하고 그 결과를 프린터로 100번 보내도록 요청할 수 있다는 사실을 모르는 것 같고, GhostScript도 그렇게 할 수 있다는 사실을 모르는 것 같습니다.그것은첫 번째 페이지만 렌더링하고 결과를 100번 반복합니다. CUPS가 100페이지 분량의 PDF 파일을 만들기 때문에 GhostScript가 여기서 더 나은 작업을 수행할 수 있습니다.했다말해재사용이전 페이지의 개체를 100번이나 다시 렌더링하지만 GhostScript는 개체를 다시 렌더링하는 데 많은 CPU를 소비하지 않고는 그렇게 할 만큼 똑똑하지 않습니다.

(아니요, /usr/bin/gs페이지에서 실제 GhostScript를 호출하고 결과를 100번 반복하는 스크립트를 바꾸는 것은 작동하지 않습니다. CUPS가 추가 복사본을 허용하려면 바이너리 헤더에 대한 낮은 수준의 변경이 필요합니다.)

100개의 개별 인쇄 작업을 생성하는 경우

for i in {1..100}; do lp doc.pdf; done

그런 다음 훨씬 빠르게 인쇄를 시작하지만 Pi가 페이지를 다시 렌더링하는 동안 각 복사본 사이에 약간의 지연이 있습니다. 20개의 인쇄 작업을 생성하면 각각 5개씩 복사됩니다.

for i in {1..20}; do lp -n 5 doc.pdf; done

gs실행되는 동안 각 5개의 배치 사이에는 긴 지연이 있습니다. CUPS는 gs첫 번째 작업이 완료되기 전에 다음 작업 실행을 시작할 만큼 충분히 발전하지 않은 것 같습니다 .

CUPS 또는 GhostScript 소스 코드에 대해 더 많은 작업을 수행하면 이러한 상황을 인식하고 계산을 더 많이 재사용할 수 있습니다. 불행하게도 이러한 추가 개발은 단지 기다리거나 프린터를 직접 구동하는 소프트웨어와 기계를 연결하여 CUPS를 우회하는 것보다 더 많은 시간을 소비하게 됩니다.

관련 정보