SCSI(4)

명칭
SCSI, CAM - CAM SCSI 하부조직

서식
controller scbus0 controller scbus1 at ahc0 controller scbus3 at ahc1 bus 0 controller scbus2 at ahc1 bus 1 device cd0 device ch0 device da0 device pass0 device pt0 device sa0 device ch1 at scbus0 target 4 unit 0 options CAMDEBUG options CAM_DEBUG_BUS=-1 options CAM_DEBUG_TARGET=-1 options CAM_DEBUG_LUN=-1 options CAM_DEBUG_FLAGS=CAM_DEBUG_INFO|CAM_DEBUG_CDB options CAM_MAX_HIGHPOWER=4 options SCSI_NO_SENSE_STRINGS options SCSI_NO_OP_STRINGS options SCSI_DELAY=8000

해설
CAM SCSI 하부조직은, 각종의 SCSI 디바이스를 제어하는 드라이버나, 호스트 어댑터 드라이버를 경유해 다르다 SCSI 호스트 어댑터를 이용하는 드라이버를 실장하기 위한 , 균질로 모듈화된 시스템을 제공합니다. 시스템이 SCSI 버스를 프로브 해, 발견한 디바이스를 적절한 드라이버에 아탓치 합니다. pass(4) 드라이버가 커널에 짜넣어지고 있으면, 모든 SCSI 디바이스가 아탓치 됩니다.

커널의 설정
CAM SCSI 하부조직용으로 일반적인 커널 설정 옵션이 몇개인가 있습니다:

CAMDEBUG
    이 옵션은, CAM 디버그용의 printf 코드를 유효하게 합니다. 실제로는, 이 옵션만으로는 디버그 정보는 출력되지 않습니다. 출력하기 위해서는 추가 설정이 필요합니다. 자세한 것은 아래와 같이를 참조해 주세요.

CAM_MAX_HIGHPOWER=4
    동시 사용할 수 있는 "high power" 명령의 최대수를 설정합니다. "high power" 명령란, 다른 명령에 비해, 실행하는데보다 많은 전력을 필요로 하는 커멘드입니다. 그 일례는 SCSI START UNIT 명령입니다 (현재로서는 "high power" 의 낙인이 찍히고 있는 유일한 명령입니다). SCSI 디스크를 기동하려면 , 통상의 디스크 조작에 비해 꽤 큰 전력을 소비합니다. 이 옵션으로, 컴퓨터의 전원에 부하를 너무 걸지 않고 "high power" 명령을 동시에 몇개(살)까지 발행할 수 있는지를 지정할 수 있습니다.

SCSI_NO_SENSE_STRINGS
    SCSI Additional Sense Code 와 Additional Sense Code Qualifier 의 조에 대한 해설문을 모두 제거합니다. 이 문장은 정말로 큰 텍스트 데이타베이스이므로, 제거하면, 커널의 사이즈를 조금 삭감할 수 있습니다. 이 옵션은, 주로 부트 플로피나, 다른 디스크 공간 혹은 메모리 공간이 작은 환경에서 필요합니다. 다른 환경에서도, 많은 경우는 이 옵션을 유효하게 해야 합니다. SCSI 의 에러 메세지의 해석을 빨리 하게 되기 때문입니다. 커널을 불필요하게 팽창 ("kernel bloat")시키는 일(뿐)만에 열중하지 않고, 당신의 커널에 해설문을 남기지 않게 합시다!

SCSI_NO_OP_STRINGS
    SCSI opcode 의 해설문을 모두 무효로 합니다. 이 옵션은, 전술한 sense 캐릭터 라인과 경우와 같이, 주로 커널 사이즈가 중요한 부트 플로피와 같은 환경에서 도움이 됩니다. 통상의 사용 환경에서 이 옵션을 유효하게 하는 것은 추천 되지 않습니다. SCSI 의 장해의 디버그를 늦추기 때문입니다.

SCSI_DELAY=8000
    SCSI 의 버스가 안정될 때까지의 지연 ("bus settle delay")입니다. CAM 의 경우, 밀리 세컨드 단위로 지정합니다. 이전의 SCSI 층에서 사용되고 있던 초단위가 아닙니다. 커널은 부트시에 버스 리셋트를 각 SCSI 버스에 보내, 각 디바이스가 전송 네고시에이션이나 그 외의 설정을 디폴트 상태에 자기 자신으로 리셋트 하도록(듯이) 통지합니다. 대부분의 SCSI 디바이스는, 버스 리셋트로부터 복귀하는데, 어느 정도의 시간을 필요로 합니다. 최근의 디스크는 100ms 정도의 단보람 시간 밖에 필요로 하지 않습니다만, 낡고 늦은 디바이스는 좀 더 긴 시간을 필요로 할지도 모릅니다. SCSI_DELAY (을)를 지정하지 않으면, 디폴트에서는 2 초가 됩니다. SCSI_DELAY 의 최소치는 "100", 즉 100ms 입니다. 유일 특수한 케이스는 SCSI_DELAY 에 0 을 지정했을 경우로,"가능한 한 작은 값" 을 의미합니다. 이 경우, SCSI_DELAY (은)는 100ms 에 리셋트 됩니다.

모든 디바이스 및 SCSI 버스는 부트시의 할당을 서포트하고 있으므로, 상위의 번호의 디바이스 및 콘트롤러를 설정할 필요는 없습니다; device da0 (은)는 임의의 번호의 디스크 드라이버에 대해서 충분한 기술입니다.

디바이스는, 특정의 디바이스 유니트로서 인식된다 wired (속박 된다)인가, 그 다음에 유효한 미사용 유니트로서 인식된다 counted (열거할 수 있다)의 어느 쪽인지입니다.

커널내의 드라이버가 디바이스를 속박 하지 않게 설정하려면 , device ch0 (와)과 같은 설정행을 기술해, 첸쟈드라이바를 짜넣어 주세요.

유니트를 속박 하려면 , device ch1 at scbus0 target 4 unit 0 (와)과 같은 설정행을 기술해, 첸쟈 1 을 SCSI 버스 0 상의 SCSI ID 4, SCSI 논리 유니트 0 의 첸쟈에 할당합니다. 각 SCSI 버스를 지정한 콘트롤러에 속박 하려면 , controller scbus0 at ahc0 (와)과 같이 설정행을 기술합니다. 이것은, SCSI 버스 0 을 ahc 드라이버를 이용하는 최초의 유니트에 할당합니다. 복수의 버스를 서포트하는 콘트롤러의 경우, 특정의 버스를 controller scbus3 at ahc1 bus 1 의 형식에서 지정할 수 있습니다. 이것은, SCSI 버스 1 을 ahc1 디바이스상에서 2 번째에 프로브 된 버스에 할당합니다.

wired 디바이스와 counted 디바이스가 혼재하고 있는 경우, 그 디바이스 타입에 대한 최초의 비 wired 유니트로부터 세기 시작합니다. 즉, wired 디스크 device da1 (이)가 있으면(자), 최초의 비 wired 디스크는 da2 (으)로서 인식되게 됩니다.

어댑터
이 시스템에서는, 많은 종류가 다른 어댑터에 공통의 디바이스 드라이버를 사용하는 것이 가능합니다. 어댑터는 상위층으로부터 요구를 받아, SCSI 버스와 시스템의 사이의 모든 IO 를 실행합니다. 전송의 최대 사이즈는 어댑터에 의해 지배됩니다. 대부분의 어댑터가 한 번의 조작으로 64KB 를 전송 할 수 있습니다만, 많은 어댑터는 좀 더 대량으로 전송 할 수 있을지도 모릅니다.

타겟 모드
몇개의 어댑터는, 타겟 모드 (을)를 서포트하고 있습니다. 이 모드에서는, 시스템을 하나의 디바이스로서 조작하는 것이 가능해져, 다른 시스템이 발행한 조작에 응답하게 됩니다. 타겟 모드는, 언제 구카의 어댑터로 서포트되고 있습니다만, 이 버젼의 CAM SCSI 하부조직에서는 아직 완전하지는 않습니다.

관련 파일
다른 SCSI 디바이스의 엔트리를 참조해 주세요.

진단
커널이 options CAMDEBUG 첨부로 컴파일 되고 있는 경우, XPT_DEBUG CCB 를 이용하면, 임의의 지정한 디바이스에 관해서, 다양한 양의 트레이스 정보를 취득 가능하게 됩니다. 트레이스되어 있지 않은 디바이스는 트레이스 정보를 생성하지 않습니다. 현재는 4 개의 디버그 플래그를 온으로 할 수 있습니다:

CAM_DEBUG_INFO
    해당하는 디바이스 (군)에 대해 일반적인 정보의 printf 출력이 가능하게 됩니다.

CAM_DEBUG_TRACE
    함수 레벨에서의 명령 플로우(flow)의 트레이스가 가능하게 됩니다. 즉, 함수의 입구와 출구에서 커널의 printf 출력이 발생합니다.

CAM_DEBUG_SUBTRACE
    함수 내부에서의 디버그 출력이 가능하게 됩니다.

CAM_DEBUG_CDB
    특정의 디바이스 (군)에 송신된 모든 SCSI 명령을 커널이 인자하게 됩니다.

이러한 플래그 가운데, 특히 CAM_DEBUG_TRACE (와)과 CAM_DEBUG_SUBTRACE (은)는 방대한 양의 커널의 printf 출력을 발생하기 때문에, 별로 유익하지는 않습니다. CAM_DEBUG_INFO 의 레벨로 로그 출력되는 것은 많지는 않습니다 것으로, 이것도 그만큼 유익하지는 않습니다. 가장 유익한 디버그 플래그는 CAM_DEBUG_CDB 플래그입니다. 이하의 커널 옵션을 사용해, 커널 설정 파일로부터 디버그를 유효하게 할 수 있습니다:

CAMDEBUG
    CAM 의 디버그를 유효하게 합니다. 이 옵션없이는, 유저 랜드로부터 camcontrol(8) (을)를 경유해 디버그를 유효하게 할 수도 있습니다.

CAM_DEBUG_FLAGS
    위에 말한 것 같은 각종의 디버그 플래그를, 커널 설정 파일로 설정하는 것이 가능하게 됩니다. 플래그의 논리합을 취하면, 복수의 디버그 레벨에서의 printf 출력을 볼 수도 있습니다.

CAM_DEBUG_BUS
    디버그의 대상으로 하는 버스를 지정합니다. 모든 버스를 디버그 하려면 , 이 값을 -1 로 설정합니다.

CAM_DEBUG_TARGET
    디버그의 대상으로 하는 타겟을 지정합니다. 모든 타겟을 디버그 하려면 , 이 값을 -1 로 설정합니다.

CAM_DEBUG_LUN
    디버그의 대상으로 하는 논리 장치 번호를 지정합니다. 모든 논리 장치 번호를 디버그 하려면 , 이 값을 -1 로 설정합니다.

어느 버스, 타겟, 혹은 논리 장치 번호를 지정하는 경우에는, 상술한 3 개의 버스/타겟/논리 장치 번호의 옵션을 모두 지정하는 것이 필수가 됩니다. 와일드 카드를 사용하면, 대부분의 기기에 대해 디버그를 유효하게 할 수가 있습니다.

CAMDEBUG 옵션을 설정 파일에 포함하고 있으면, camcontrol(8) 유틸리티를 사용해, 기동중에 printf 디버그를 유효하게 할 수도 있습니다. 자세한 것은 camcontrol(8) (을)를 참조해 주세요.

관련 항목
aha(4), ahb(4), ahc(4), bt(4), cd(4), ch(4), da(4), pass(4), pt(4), sa(4), xpt(4), camcontrol(8)

역사
CAM SCSI 하부조직은 FreeBSD 3.0 그리고 처음으로 등장했습니다.

저자
CAM SCSI 하부조직은 Justin Gibbs 와 Kenneth Merry 에 의해 쓰여졌습니다.