Vlákno názorů k článku Porovnání systémů Linux a FreeBSD (4) od freza - > Existuje sice i rozíení PCI pro 64bitové...

  • Článek je starý, nové názory již nelze přidávat.
  • 5. 12. 2003 4:09

    freza (neregistrovaný)

    > Existuje sice i rozíení PCI pro 64bitové adresování,
    > nicmén to je jednak pomalejí

    Pokud myslite DAC (dual address cycle) tak to skutecne
    pomalejsi je (o jeden adresni cyklus, coz je dokonale
    zanedbatelne). 64bitova PCI samozrejme umi 64bitove
    adresy nativne.

    > Na PCI neexistuje ádný DMA adi podobn, jako teba na
    > ISA; na PCI si kadé zaízení dlá adresaci pamti samo.
    > Tato technika se nazývá Bus-master.

    Ne. Bus mastering znamena ze zarizeni muze aktivne
    prevzit kontrolu nad sbernici (na nekterych
    sbernicich dokonce preemptovat probihajici
    transakci). Tohle je detail.

    > FreeBSD 5 má tyto nedostatky odstranny ovladae
    > zaízení mají sjednocený pístup k DMA pomocí funkcí
    > bus_dmamap_load a bus_dmamap_unload. Synchronizaci
    > s cachemi procesoru musí speciáln provádt pomocí
    > funkce bus_dmamap_sync.

    Doplnil bych ze rozhrani bus_dma(9) bylo na FreeBSD5
    preneseno z NetBSD, kde se objevilo ve verzi 1.3.
    Vas popis je dosti neuplny, zajemcum doporucuji
    manualove stranky na {free,net}bsd.org

    > Nutno upozornit na celkem závaný problém, který
    > tento pístup má zatímco na Linuxu jsou struktury
    > jádra alokovány vdy v ásti pamti pístupné pro DMA,
    > na FreeBSD tomu tak nemusí být me tedy docházet k
    > výraznému zpomalování zpsobenému kopírováním dat
    > do bounce-buffer napíklad pi prací se síovými
    > packety, pokud struktura popisující packet není
    > náhodou alokována v dolních 4G. Na architekturách
    > s IOMMU tento problém nenastane.

    Neznam implementaci ve FreeBSD, na NetBSD a v
    principu ani na FreeBSD to ale neni pravda. Veskera
    pamet u ktere se ocekava DMA prenos (jako sitove
    pakety) by mela byt alokovana pomoci bus_dmamem_alloc. Tato funkce provede alokaci v
    souladu s podmikami diktovanymi typem sbernice
    (tj. dma tagem).

  • 5. 12. 2003 16:50

    Mikuláš Patočka (neregistrovaný)

    Poslední připomínka ohledně alokace síťových packetů --- tato alokace je dělána v m_get, odsud se dostane do mb_pop_cont, odsud do kmem_alloc a odtud do vm_page_alloc (FreeBSD 5.2-BETA). Takže se alokuje úplně normálně pomocí běžného alokátoru stránek a na alokaci v dolní části paměti se nebere zřetel. Nebo je to jinak?

    Jinak si ani dost dobře nedokážu představit, jak by se měla v době syscallu write na socketu alokovat paměť pomocí bus_dmamem_alloc, když například vůbec není jasné, na kterou síťovou kartu ten packet půjde.

  • 6. 12. 2003 23:14

    freza (neregistrovaný)

    Pravda, popletl jsem to. bus_dmamem_alloc se pouziva jenom pro alokaci kontrolnich bloku.

    U odesilani to jiste neni dost dobre mozne, myslel jsem prijem, ale zda se ze ani tam se to nedela.