新聞中心
在Linux中,文件I/O操作會消耗大量的CPU資源和內存,因此在高負載環(huán)境下,它可能會成為系統(tǒng)性能的瓶頸。為了優(yōu)化系統(tǒng)性能,Linux O DirectIO技術應運而生。本文將對該技術進行簡要介紹。

一、概述
Linux O DirectIO 技術原理是:在進行文件操作時,利用異步I/O(O)接口來代替直接的同步I/O操作方式,通過利用Linux內核中的Direct IO(DirectIO)接口,直接將數(shù)據(jù)從硬盤讀取到應用程序的內存空間,從而避免了數(shù)據(jù)從內核空間到用戶空間的拷貝,減少了CPU和內存的消耗,提高了系統(tǒng)磁盤I/O性能。
二、Direct IO
Direct IO是一種繞過文件系統(tǒng)緩存的數(shù)據(jù)讀寫方式,即直接將數(shù)據(jù)讀取到應用程序的內存空間,或將應用程序中的數(shù)據(jù)直接寫入硬盤中。與之相對的,非Direct IO的方式是將數(shù)據(jù)先讀入文件系統(tǒng)緩存,再從緩存中讀取,或將數(shù)據(jù)寫入緩存中,再由緩存寫入硬盤。
使用Direct IO的優(yōu)點是:
1、減少了CPU和內存的占用。由于避免了數(shù)據(jù)緩存到內存中,因此減少了CPU和內存的使用。
2、提高了IO性能。由于數(shù)據(jù)直接從磁盤讀取,而不是先緩存到內存中,IO性能得到了提升。
使用Direct IO的缺點是:
1、數(shù)據(jù)讀寫效率的不穩(wěn)定。因為數(shù)據(jù)直接從磁盤讀取,而磁盤的讀寫速度較慢,因此在一些情況下,使用Direct IO的讀寫效率會比非Direct IO的方式低。
2、不支持緩存。由于繞過了文件系統(tǒng)緩存,因此無法利用文件系統(tǒng)的緩存機制。在一些情況下,這可能會降低系統(tǒng)的整體性能。
三、Linux O
O是指操作系統(tǒng)提供的異步I/O接口,可以用來實現(xiàn)異步的文件讀寫操作。Linux中,O接口可以通過libo庫調用。
O的優(yōu)點是:
1、高效的I/O操作。 O在進行I/O操作時,會將I/O請求放入內核完成隊列中,內核處理完I/O請求后再通知用戶程序,從而實現(xiàn)異步的I/O操作,提高了系統(tǒng)I/O性能。
2、多線程并行。 O允許多個I/O請求同時發(fā)起,從而實現(xiàn)系統(tǒng)I/O多線程并行操作,提高了整體系統(tǒng)的處理性能。
四、Linux O DirectIO 技術
Linux O DirectIO 技術結合了O和Direct IO技術,將數(shù)據(jù)直接從磁盤讀取到應用程序中,避免了數(shù)據(jù)從內核空間到用戶空間的拷貝,減少了CPU和內存的占用,提高了系統(tǒng)磁盤I/O性能。但是,使用該技術需要注意一些問題:
1、文件對齊。 Direct IO要求讀寫的數(shù)據(jù)大小必須是磁盤I/O塊大小的整數(shù)倍,否則會導致讀寫性能下降。
2、內存對齊。 Direct IO要求讀寫內存的地址必須是內存I/O塊大小的整數(shù)倍,否則會導致讀寫性能下降。
3、數(shù)據(jù)量控制。 Direct IO要求一次讀寫的數(shù)據(jù)量不能大于系統(tǒng)可用內存的一半,否則會導致系統(tǒng)性能下降。
五、
Linux O DirectIO技術通過利用異步I/O接口和直接IO接口,實現(xiàn)了數(shù)據(jù)直接從磁盤讀取到應用程序中,避免了CPU和內存的浪費,提高了系統(tǒng)磁盤IO性能。但是,使用該技術需要注意一些限制條件,避免出現(xiàn)性能問題。
成都網(wǎng)站建設公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設、網(wǎng)站制作、網(wǎng)頁設計及定制高端網(wǎng)站建設服務!
linux python connect 對同一個端口可以建立多少個
如果是tcp client用同一個本地端口去連不同的兩個服務器ip,連第二個時就會提示端口已被占用。但服務器的監(jiān)聽端口,可以accept多次,建立多個socket;我的問題是服務器一個端口為什么能建立多個連接而客戶端卻不行呢?
TCP server 可以,TCP client 也可以。一個套接字只能建立一個連接,無論對于 server 還是 client。
注意報錯消息是:
(EISCONN) Transport endpoint is already connected
man 2 connect 說得很清楚了:
Generally, connection-based protocol sockets may successfully connect() only once; connectionless protocol sockets may use connect() multiple times to change their association.
就是說,TCP 套接字最多只能調用 connect 一次。那么,你的監(jiān)聽套接字調用 connect 了幾次?
來點有意思的。
一個套接字不能連接兩次,并不代表一個本地地址不能用兩次,看!****加粗文字**加粗文字**
>>> import socket
>>> s = socket.socket()
# since Linux 3.9, 見 man 7 socket
>>> s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
>>> s2 = socket.socket()
>>> s2.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
>>> s.bind((‘127.0.0.1’, 12345))
>>> s2.bind((‘127.0.0.1’, 12345))
# 都可以使用同一本地地址來連接哦
>>> s.connect((‘127.0.0.1’, 80))
>>> s2.connect((‘127.0.0.1’, 4321))
>>> netstat -npt | grep 12345
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 127.0.0.1:127.0.0.1:ESTABLISHED 18284/python3
tcp 0 127.0.0.1:127.0.0.1:ESTABLISHED 4568/python3
tcp 0 127.0.0.1:127.0.0.1:ESTABLISHED –
tcp 0 127.0.0.1:127.0.0.1:ESTABLISHED 4568/python3
你們這些有女友的都弱爆了啦
更新:大家來玩 TCP: 一個人也可以建立 TCP 連接呢 – 依云’s Blog
2023年08月19日回答 · 2023年08月19日更新
依云21.1k 聲望
答案對人有幫助,有參考價值1答案沒幫助,是錯誤的答案,答非所問
內核是以一個(著名的)5元信息組來標識不同的socket的:源地址、源端口、目的地址、目的端口、協(xié)議號。任何一個不同,都不叫“同一個socket”。
2023年08月20日回答
sched_yield80 聲望
答案對人有幫助,有參考價值0答案沒幫助,是錯誤的答案,答非所問
首先,TCP鏈接是可靠的端對端的鏈接,每個TCP鏈接由4個要素組成:2組IP地址(本地和遠端),2組端口地址(本地和遠端)。其中如果需要跟端口信息綁定時,都需要調用bind函數(shù),如果server端針對2個同樣的IP、端口組進行同樣的綁定時,第2次同樣是不成功的。
2023年08月16日回答
charliecui2.4k 聲望
答案對人有幫助,有參考價值0答案沒幫助,是錯誤的答案,答非所問
有個相關的問題: ftp的數(shù)據(jù)傳輸,服務器會用20端口主動連接客戶端,如果兩個客戶端同時在一下載東西,那ftp 服務器能用20端口去連接兩個ip ?(這時ftp的服務器其實是tcp里的客戶端)
2023年08月16日回答
編輯
hyanleo163 聲望
+1
能啊,看我的實驗。
依云 · 2023年08月19日
不管是服務器還是客戶端,建立TCP鏈接,同一個端口都只能使用一次。
這句話其實是**錯的**!
對于TCP協(xié)議,要成功建立一個新的鏈接,需要保證新鏈接四個要素組合體的唯一性:客戶端的IP、客戶端的port、服務器端的IP、服務器端的port。也就是說,服務器端的同一個IP和port,可以和同一個客戶端的多個不同端口成功建立多個TCP鏈接(與多個不同的客戶端當然也可以),只要保證【Server IP + Server Port + Client IP + Client Port】這個組合唯一不重復即可。
> netstat -a -n -p tcp |grep 9999
tcp.0.0.1:.0.0.1:9999 ESTABLISHED 2701/nc
tcp.0.0.1:.0.0.1:9999 ESTABLISHED 2752/nc
上述結果127.0.0.1:9999中9999端口成功建立兩個TCP鏈接,也就可以理解。
**客戶端**發(fā)送TCP鏈接請求的端口,也就是后續(xù)建立TCP鏈接使用的端口,所以一旦TCP鏈接建立,端口就被占用,無法再建立第二個鏈接。
而**服務器端**有兩類端口:偵聽端口 和 后續(xù)建立TCP鏈接的端口。其中偵聽端口只負責偵聽客戶端發(fā)送來的TCP鏈接請求,不用作建立TCP鏈接使用,一旦偵聽到有客戶端發(fā)送TCP鏈接請求,就分配一個端口(一般隨機分配,且不會重復)用于建立TCP鏈接,而不是所說的服務器一個端口能建立多個連接。
上述描述也比較片面,客戶端如何請求及建立鏈接,服務器端如何偵聽及是否分配新隨機端口等…應該都可以在應用層面進行控制,所以上述描述可以作為建立TCP鏈接的一種方式,僅供參考。
一些英文的參考:
How do multiple clients connect simultaneously to one port, say 80, on a server?
TCP : two different sockets sharing a port?
提升linux下tcp服務器并發(fā)連接數(shù)限制:30:23
1、修改用戶進程可打開文件數(shù)限制
在Linux平臺上,無論編寫客戶端程序還是服務端程序,在進行高并發(fā)TCP連接處理時,更高的并發(fā)數(shù)量都要受到系統(tǒng)對用戶單一進程同時可打開文件數(shù)量的限制(這是因為系統(tǒng)為每個TCP連接都要創(chuàng)建一個socket句柄,每個socket句柄同時也是一個文件句柄)??墒褂胾limit命令查看系統(tǒng)允許當前用戶進程打開的文件數(shù)限制:
$ ulimit -n
這表示當前用戶的每個進程最多允許同時打開1024個文件,這1024個文件中還得除去每個進程必然打開的標準輸入,標準輸出,標準錯誤,服務器監(jiān)聽 socket,進程間通訊的unix域socket等文件,那么剩下的可用于客戶端socket連接的文件數(shù)就只有大概=1014個左右。也就是說缺省情況下,基于Linux的通訊程序最多允許同時1014個TCP并發(fā)連接。
對于想支持更高數(shù)量的TCP并發(fā)連接的通訊處理程序,就必須修改Linux對當前用戶的進程同時打開的文件數(shù)量的軟限制(soft limit)和硬限制(hardlimit)。其中軟限制是指Linux在當前系統(tǒng)能夠承受的范圍內進一步限制用戶同時打開的文件數(shù);硬限制則是根據(jù)系統(tǒng)硬件資源狀況(主要是系統(tǒng)內存)計算出來的系統(tǒng)最多可同時打開的文件數(shù)量。通常軟限制小于或等于硬限制。
修改上述限制的最簡單的辦法就是使用ulimit命令:
$ ulimit -n
上述命令中,在中指定要設置的單一進程允許打開的更大文件數(shù)。如果系統(tǒng)回顯類似于“Operation notpermitted”之類的話,說明上述限制修改失敗,實際上是因為在中指定的數(shù)值超過了Linux系統(tǒng)對該用戶打開文件數(shù)的軟限制或硬限制。因此,就需要修改Linux系統(tǒng)對用戶的關于打開文件數(shù)的軟限制和硬限制。
之一步,修改/etc/security/limits.conf文件,在文件中添加如下行:
speng soft nofile 10240
speng hard nofile 10240
其中speng指定了要修改哪個用戶的打開文件數(shù)限制,可用’*’號表示修改所有用戶的限制;soft或hard指定要修改軟限制還是硬限制;10240則指定了想要修改的新的限制值,即更大打開文件數(shù)(請注意軟限制值要小于或等于硬限制)。修改完后保存文件。
第二步,修改/etc/pam.d/login文件,在文件中添加如下行:
session required /lib/security/pam_limits.so
這是告訴Linux在用戶完成系統(tǒng)登錄后,應該調用pam_limits.so模塊來設置系統(tǒng)對該用戶可使用的各種資源數(shù)量的更大限制(包括用戶可打開的更大文件數(shù)限制),而pam_limits.so模塊就會從/etc/security/limits.conf文件中讀取配置來設置這些限制值。修改完后保存此文件。
第三步,查看Linux系統(tǒng)級的更大打開文件數(shù)限制,使用如下命令:
$ cat /proc/sys/fs/file-max
這表明這臺Linux系統(tǒng)最多允許同時打開(即包含所有用戶打開文件數(shù)總和)12158個文件,是Linux系統(tǒng)級硬限制,所有用戶級的打開文件數(shù)限制都不應超過這個數(shù)值。通常這個系統(tǒng)級硬限制是Linux系統(tǒng)在啟動時根據(jù)系統(tǒng)硬件資源狀況計算出來的更佳的更大同時打開文件數(shù)限制,如果沒有特殊需要,不應該修改此限制,除非想為用戶級打開文件數(shù)限制設置超過此限制的值。修改此硬限制的方法是修改/etc/rc.local腳本,在腳本中添加如下行:
echo> /proc/sys/fs/file-max
這是讓Linux在啟動完成后強行將系統(tǒng)級打開文件數(shù)硬限制設置為22158。修改完后保存此文件。
完成上述步驟后重啟系統(tǒng),一般情況下就可以將Linux系統(tǒng)對指定用戶的單一進程允許同時打開的更大文件數(shù)限制設為指定的數(shù)值。如果重啟后用 ulimit- n命令查看用戶可打開文件數(shù)限制仍然低于上述步驟中設置的更大值,這可能是因為在用戶登錄腳本/etc/profile中使用ulimit-n命令已經將用戶可同時打開的文件數(shù)做了限制。由于通過ulimit-n修改系統(tǒng)對用戶可同時打開文件的更大數(shù)限制時,新修改的值只能小于或等于上次ulimit-n 設置的值,因此想用此命令增大這個限制值是不可能的。所以,如果有上述問題存在,就只能去打開/etc/profile腳本文件,在文件中查找是否使用了 ulimit-n限制了用戶可同時打開的更大文件數(shù)量,如果找到,則刪除這行命令,或者將其設置的值改為合適的值,然后保存文件,用戶退出并重新登錄系統(tǒng)即可。
通過上述步驟,就為支持高并發(fā)TCP連接處理的通訊處理程序解除關于打開文件數(shù)量方面的系統(tǒng)限制。
2、修改網(wǎng)絡內核對TCP連接的有關限制
在Linux上編寫支持高并發(fā)TCP連接的客戶端通訊處理程序時,有時會發(fā)現(xiàn)盡管已經解除了系統(tǒng)對用戶同時打開文件數(shù)的限制,但仍會出現(xiàn)并發(fā)TCP連接數(shù)增加到一定數(shù)量時,再也無法成功建立新的TCP連接的現(xiàn)象。出現(xiàn)這種現(xiàn)在的原因有多種。
之一種原因可能是因為Linux網(wǎng)絡內核對本地端口號范圍有限制。此時,進一步分析為什么無法建立TCP連接,會發(fā)現(xiàn)問題出在connect()調用返回失敗,查看系統(tǒng)錯誤提示消息是“Can’t assign requestedaddress”。同時,如果在此時用tcpdump工具監(jiān)視網(wǎng)絡,會發(fā)現(xiàn)根本沒有TCP連接時客戶端發(fā)SYN包的網(wǎng)絡流量。這些情況說明問題在于本地Linux系統(tǒng)內核中有限制。其實,問題的根本原因在于Linux內核的TCP/IP協(xié)議實現(xiàn)模塊對系統(tǒng)中所有的客戶端TCP連接對應的本地端口號的范圍進行了限制(例如,內核限制本地端口號的范圍為1024~32768之間)。當系統(tǒng)中某一時刻同時存在太多的TCP客戶端連接時,由于每個TCP客戶端連接都要占用一個唯一的本地端口號(此端口號在系統(tǒng)的本地端口號范圍限制中),如果現(xiàn)有的TCP客戶端連接已將所有的本地端口號占滿,則此時就無法為新的TCP客戶端連接分配一個本地端口號了,因此系統(tǒng)會在這種情況下在connect()調用中返回失敗,并將錯誤提示消息設為“Can’t assignrequested address”。有關這些控制邏輯可以查看Linux內核源代碼,以linux2.6內核為例,可以查看tcp_ipv4.c文件中如下函數(shù):
static int tcp_v4_hash_connect(struct sock *sk)
請注意上述函數(shù)中對變量sysctl_local_port_range的訪問控制。變量sysctl_local_port_range的初始化則是在tcp.c文件中的如下函數(shù)中設置:
void __init tcp_init(void)
內核編譯時默認設置的本地端口號范圍可能太小,因此需要修改此本地端口范圍限制。
之一步,修改/etc/sysctl.conf文件,在文件中添加如下行:
net.ipv4.ip_local_port_range =
這表明將系統(tǒng)對本地端口范圍限制設置為1024~65000之間。請注意,本地端口范圍的最小值必須大于或等于1024;而端口范圍的更大值則應小于或等于65535。修改完后保存此文件。
第二步,執(zhí)行sysctl命令:
$ sysctl -p
如果系統(tǒng)沒有錯誤提示,就表明新的本地端口范圍設置成功。如果按上述端口范圍進行設置,則理論上單獨一個進程最多可以同時建立60000多個TCP客戶端連接。
第二種無法建立TCP連接的原因可能是因為Linux網(wǎng)絡內核的IP_TABLE防火墻對更大跟蹤的TCP連接數(shù)有限制。此時程序會表現(xiàn)為在 connect()調用中阻塞,如同死機,如果用tcpdump工具監(jiān)視網(wǎng)絡,也會發(fā)現(xiàn)根本沒有TCP連接時客戶端發(fā)SYN包的網(wǎng)絡流量。由于 IP_TABLE防火墻在內核中會對每個TCP連接的狀態(tài)進行跟蹤,跟蹤信息將會放在位于內核內存中的conntrackdatabase中,這個數(shù)據(jù)庫的大小有限,當系統(tǒng)中存在過多的TCP連接時,數(shù)據(jù)庫容量不足,IP_TABLE無法為新的TCP連接建立跟蹤信息,于是表現(xiàn)為在connect()調用中阻塞。此時就必須修改內核對更大跟蹤的TCP連接數(shù)的限制,方法同修改內核對本地端口號范圍的限制是類似的:
之一步,修改/etc/sysctl.conf文件,在文件中添加如下行:
net.ipv4.ip_conntrack_max = 10240
這表明將系統(tǒng)對更大跟蹤的TCP連接數(shù)限制設置為10240。請注意,此限制值要盡量小,以節(jié)省對內核內存的占用。
第二步,執(zhí)行sysctl命令:
$ sysctl -p
如果系統(tǒng)沒有錯誤提示,就表明系統(tǒng)對新的更大跟蹤的TCP連接數(shù)限制修改成功。如果按上述參數(shù)進行設置,則理論上單獨一個進程最多可以同時建立10000多個TCP客戶端連接。
3、使用支持高并發(fā)網(wǎng)絡I/O的編程技術
在Linux上編寫高并發(fā)TCP連接應用程序時,必須使用合適的網(wǎng)絡I/O技術和I/O事件分派機制。
可用的I/O技術有同步I/O,非阻塞式同步I/O(也稱反應式I/O),以及異步I/O。在高TCP并發(fā)的情形下,如果使用同步I/O,這會嚴重阻塞程序的運轉,除非為每個TCP連接的I/O創(chuàng)建一個線程。但是,過多的線程又會因系統(tǒng)對線程的調度造成巨大開銷。因此,在高TCP并發(fā)的情形下使用同步I /O 是不可取的,這時可以考慮使用非阻塞式同步I/O或異步I/O。非阻塞式同步I/O的技術包括使用select(),poll(),epoll等機制。異步I/O的技術就是使用AIO。
從I/O事件分派機制來看,使用select()是不合適的,因為它所支持的并發(fā)連接數(shù)有限(通常在1024個以內)。如果考慮性能,poll()也是不合適的,盡管它可以支持的較高的TCP并發(fā)數(shù),但是由于其采用“輪詢”機制,當并發(fā)數(shù)較高時,其運行效率相當?shù)停⒖赡艽嬖贗/O事件分派不均,導致部分 TCP連接上的I/O出現(xiàn)“饑餓”現(xiàn)象。而如果使用epoll或AIO,則沒有上述問題(早期 Linux內核的AIO技術實現(xiàn)是通過在內核中為每個I/O請求創(chuàng)建一個線程來實現(xiàn)的,這種實現(xiàn)機制在高并發(fā)TCP連接的情形下使用其實也有嚴重的性能問題。但在最新的Linux內核中,AIO的實現(xiàn)已經得到改進)。
linux的相關問題
1 test -d
文件測試
test命令也可以用于檢查文件的狀態(tài)
e 文件存在則為真
r 文件存在并且可讀則為真
w 文件存在并且可寫則為真
x 文件存在并且可執(zhí)行則為真
s 文件存在并且至少有一個字符則為真
d 文件存在并且為目錄則為真
f 文件存在并且為普通文件則為真
c 文件存在并且為字符型文件則為真
b 文件存在并且為塊特殊文件則為真
a并且 -o或者 !非
2 能為myfile1更新時間的命令____touch
3 linux中的歸檔解檔命令____tar
4 編譯是優(yōu)先級的取值范圍是:______,默認的優(yōu)先級是____
中進程的優(yōu)先極是由進程的nice值決定的,值越小,優(yōu)先級越高
5 linux中標準設備文件有哪些.分別用什么符號表示.
—
主設備號設備類型
次設備號=文件名簡要說明
0 未命名設備(例如:掛載的非設備)
0 = 未空設備號保留
1 char 內存設備
1 = /dev/mem 直接存取物理內存
2 = /dev/kmem 存取經過內核虛擬之后的內存
3 = /dev/null 空設備。任何寫入都將被直接丟棄,任何讀取都將得到EOF。
4 = /dev/port 存取 I/O 端口
5 = /dev/zero 零字節(jié)源,只能讀取到無限多的零字節(jié)。
7 = /dev/full 滿設備。任何寫入都將失敗,并把errno設為ENOSPC以表示沒有剩余空間。
8 = /dev/random 隨機數(shù)發(fā)生器。完全由用戶的輸入來產生隨機數(shù)。
如果用戶停止所有動作,則停止產生新的隨機數(shù)。
9 = /dev/urandom 更快,但是不夠安全的隨機數(shù)發(fā)生器。盡可能由用戶的輸入來產生隨機數(shù),
如果用戶停止所有動作,則把已經產生的隨機數(shù)做為種子來產生新的隨機數(shù)。
10 = /dev/aio 異步 I/O 通知接口
11 = /dev/kmsg 任何對該文件的寫入都將作為 printk 的輸出
1 block RAM disk
0 = /dev/ram0 第1個 RAM disk (initrd只能使用ram0)
1 = /dev/ram1 第2個 RAM disk
…
200 = /dev/ram200 第200個 RAM disk
4 char TTY(終端)設備
0 = /dev/tty0 當前虛擬控制臺
1 = /dev/tty1 第1個虛擬控制臺
…
63 = /dev/tty63 第63個虛擬控制臺
4 block 如果根文件系統(tǒng)以是以只讀方式掛載的,那么就不可能創(chuàng)建真正的設備節(jié)點,
此時就使用該設備作為動態(tài)分配的主(major)設備的別名
0 = /dev/root
5 char 其他 TTY 設備
0 = /dev/tty 當前 TTY 設備
1 = /dev/console 系統(tǒng)控制臺
2 = /dev/ptmx 所有 PTY master 的復用器
7 char 虛擬控制臺捕捉設備(這些設備既允許讀也允許寫)
0 = /dev/vcs 當前虛擬控制臺(vc)的文本內容
1 = /dev/vcs1 tty1 的文本內容
…
63 = /dev/vcs63 tty63 的文本內容
128 = /dev/vcsa 當前虛擬控制臺(vc)的文本/屬性內容
129 = /dev/vcsa1 tty1 的文本/屬性內容
…
191 = /dev/vcsa63 tty63 的文本/屬性內容代碼:
7 block 回環(huán)設備(用一個普通的磁盤文件來模擬一個塊設備)
對回環(huán)設備的綁定由 mount(8) 或 losetup(8) 處理
0 = /dev/loop0 第1個回環(huán)設備
1 = /dev/loop1 第2個回環(huán)設備
…
8 block SCSI 磁盤(0-15)
0 = /dev/sda 第1個 SCSI 磁盤(整個磁盤)
16 = /dev/sdb 第2個 SCSI 磁盤(整個磁盤)
32 = /dev/sdc 第3個 SCSI 磁盤(整個磁盤)
…
240 = /dev/sdp 第16個 SCSI 磁盤(整個磁盤)
分區(qū)表示方法如下(以第3個 SCSI 磁盤為例)
33 = /dev/sdc1 第1個分區(qū)
34 = /dev/sdc2 第2個分區(qū)
…
47 = /dev/sdc15 第15個分區(qū)
對于Linux/i386來說,分區(qū)1-4是主分區(qū),5-15是邏輯分區(qū)。
9 block Metadisk(RAID)設備
0 = /dev/md0 第1組 metadisk
1 = /dev/md1 第2組 metadisk
…
metadisk 驅動用于將同一個文件系統(tǒng)分割到多個物理磁盤上。
10 char 非串口鼠標,各種雜項設備和特性
1 = /dev/psaux PS/2鼠標
131 = /dev/temperature 機器內部溫度
134 = /dev/apm_bios APM(高級電源管理) BIOS
135 = /dev/rtc 實時時鐘(Real Time Clock)
144 = /dev/nvram 非易失配置 RAM
162 = /dev/bus 系統(tǒng)管理總線(System Management Bus)
164 = /dev/ipmo Intel的智能平臺管理(Intelligent Platform Management)接口
173 = /dev/ipmikcs 智能平臺管理(Intelligent Platform Management)接口
175 = /dev/agpgart AGP圖形地址重映射表(Graphics Address Remapping Table)
182 = /dev/perfctr 性能監(jiān)視計數(shù)器
183 = /dev/hwrng 通用硬件隨機數(shù)發(fā)生器
184 = /dev/cpu/microcode CPU微代碼更新接口
186 = /dev/atomicps 進程狀態(tài)數(shù)據(jù)的原子快照
188 = /dev/buios Bus(系統(tǒng)管理總線) BIOS
200 = /dev/net/tun TAP/TUN 網(wǎng)絡設備(TAP/TUN以軟件的方式實現(xiàn)了網(wǎng)絡設備)
TAP模擬了以太網(wǎng)幀(第二層),TUN模擬了IP包(第三層)。
202 = /dev/emd/ctl 增強型 Metadisk RAID (EMD) 控制器
220 = /dev/mptctl Message passing technology (MPT) control
223 = /dev/input/uinput 用戶層輸入設備驅動支持
227 = /dev/mcelog X86_64 Machine Check Exception driver
228 = /dev/hpet HPET driver
229 = /dev/fuse Fuse(用戶空間的虛擬文件系統(tǒng))
231 = /dev/snapshot 系統(tǒng)內存快照
232 = /dev/kvm 基于內核的虛構機(基于AMD SVM和Intel VT硬件虛擬技術)
11 block SCSI CD-ROM 設備
0 = /dev/scd0 第1個 SCSI CD-ROM
1 = /dev/scd1 第2個 SCSI CD-ROM
…代碼:
13 char 核心輸入設備
32 = /dev/input/mouse0 第1個鼠標
33 = /dev/input/mouse1 第2個鼠標
…
62 = /dev/input/mouse30 第31個鼠標
63 = /dev/input/mice 所有鼠標的統(tǒng)一
64 = /dev/input/event0 第1個事件隊列
65 = /dev/input/event1 第2個事件隊列
…
95 = /dev/input/event1 第32個事件隊列
21 char 通用 SCSI 設備(通常是SCSI光驅)
0 = /dev/sg0 第1個通用 SCSI 設備
1 = /dev/sg1 第2個通用 SCSI 設備
…
29 char 通用幀緩沖(frame buffer)設備
0 = /dev/fb0 第1個幀緩沖設備
1 = /dev/fb1 第2個幀緩沖設備
…
31 = /dev/fb31 第32個幀緩沖設備
30 char iBCS-2 兼容設備
0 = /dev/socksys 套接字訪問接口
1 = /dev/spx SVR3 本地 X 接口
32 = /dev/inet/ip 網(wǎng)絡訪問接口
33 = /dev/inet/icmp
34 = /dev/inet/ggp
35 = /dev/inet/ipip
36 = /dev/inet/tcp
37 = /dev/inet/egp
38 = /dev/inet/pup
39 = /dev/inet/udp
40 = /dev/inet/idp
41 = /dev/inet/rawip
此外,iBCS-2 還需要下面的連接必須存在
/dev/ip -> /dev/inet/ip
/dev/icmp -> /dev/inet/icmp
/dev/ggp -> /dev/inet/ggp
/dev/ipip -> /dev/inet/ipip
/dev/tcp -> /dev/inet/tcp
/dev/egp -> /dev/inet/egp
/dev/pup -> /dev/inet/pup
/dev/udp -> /dev/inet/udp
/dev/idp -> /dev/inet/idp
/dev/rawip -> /dev/inet/rawip
/dev/inet/arp -> /dev/inet/udp
/dev/inet/rip -> /dev/inet/udp
/dev/nfsd -> /dev/socksys
/dev/X0R -> /dev/null代碼:
36 char Netlink 支持
0 = /dev/route 路由, 設備更新, kernel to user
3 = /dev/fwmonitor Firewall packet 復制
59 char sf 防火墻模塊
0 = /dev/firewall 與 sf 內核模塊通信
65 block SCSI 磁盤(16-31)
0 = /dev/sdq 第17個 SCSI 磁盤(整個磁盤)
16 = /dev/sdr 第18個 SCSI 磁盤(整個磁盤)
32 = /dev/sds 第19個 SCSI 磁盤(整個磁盤)
…
240 = /dev/sdaf 第32個 SCSI 磁盤(整個磁盤)
66 block SCSI 磁盤(32-47)
0 = /dev/sdag 第33個 SCSI 磁盤(整個磁盤)
16 = /dev/sdah 第34個 SCSI 磁盤(整個磁盤)
32 = /dev/sdai 第35個 SCSI 磁盤(整個磁盤)
…
240 = /dev/sdav 第48個 SCSI 磁盤(整個磁盤)
89 char I2C 總線接口
0 = /dev/i2c-0 第1個 I2C 適配器
1 = /dev/i2c-1 第2個 I2C 適配器
…
98 block 用戶模式下的虛擬塊設備(分區(qū)處理方式與 SCSI 磁盤相同)
0 = /dev/ubda 第1個用戶模式塊設備
16 = /dev/udbb 第2個用戶模式塊設備
…
103 block 審計(Audit)設備
0 = /dev/audit 審計(Audit)設備
char Unix98 PTY master
這些設備不應當存在設備節(jié)點,而應當通過 /dev/ptmx 接口訪問。
char Unix98 PTY slave
這些設備節(jié)點是自動生成的(伴有適當?shù)臋嘞藓湍J?,不能手動創(chuàng)建。
方法是通過使用適當?shù)?mount 選項(通常是:mode=0620,gid=)
將 devpts 文件系統(tǒng)掛載到 /dev/pts 目錄即可。
0 = /dev/pts/0 第1個 Unix98 PTY slave
1 = /dev/pts/1 第2個 Unix98 PTY slave
…代碼:
153 block Enhanced Metadisk RAID (EMD) 存儲單元(分區(qū)處理方式與 SCSI 磁盤相同)
0 = /dev/emd/0 第1個存儲單元
1 = /dev/emd/0p1 第1個存儲單元的第1個分區(qū)
2 = /dev/emd/0p2 第1個存儲單元的第2個分區(qū)
…
15 = /dev/emd/0p15 第1個存儲單元的第15個分區(qū)
16 = /dev/emd/1 第2個存儲單元
32 = /dev/emd/2 第3個存儲單元
…
240 = /dev/emd/15 第16個存儲單元
180 char USB 字符設備
96 = /dev/u/hiddev0 第1個USB人機界面設備(鼠標/鍵盤/游戲桿/手寫版等人操作計算機的設備)
…
111 = /dev/u/hiddev15 第16個USB人機界面設備
180 block USB 塊設備(U盤之類)
0 = /dev/uba 第1個USB 塊設備
8 = /dev/ubb 第2個USB 塊設備
16 = /dev/ubc 第3個USB 塊設備
…
192 char 內核 profiling 接口
0 = /dev/profile Profiling 控制設備
1 = /dev/profile0 CPU 0 的 Profiling 設備
2 = /dev/profile1 CPU 1 的 Profiling 設備
…
193 char 內核事件跟蹤接口
0 = /dev/trace 跟蹤控制設備
1 = /dev/trace0 CPU 0 的跟蹤設備
2 = /dev/trace1 CPU 1 的跟蹤設備
…
195 char Nvidia 圖形設備(比如顯卡)
0 = /dev/nvidia0 第1個 Nvidia 卡
1 = /dev/nvidia1 第2個 Nvidia 卡
…
255 = /dev/nvidiactl Nvidia 卡控制設備
202 char 特定于CPU模式的寄存器(model-specific register,MSR)
0 = /dev/cpu/0/msr CPU 0 的 MSRs
1 = /dev/cpu/1/msr CPU 1 的 MSRs
…
203 char CPU CPUID 信息
0 = /dev/cpu/0/cpuid CPU 0 的 CPUID
1 = /dev/cpu/1/cpuid CPU 1 的 CPUID
…代碼:
===================================================================
這部分詳細說明一些應該或可能存在于 /dev 目錄之外的文件。
鏈接更好使用與這里完全相同的格式(絕對路徑或相對路徑)。
究竟是使用硬鏈接(hard)還是軟連接(symbolic)取決于不同的設備。
必須的鏈接
必須在所有的系統(tǒng)上都存在這些連接:
鏈接 目標 鏈接類型 簡要說明
/dev/fd /proc/self/fd symbolic 文件描述府
/dev/stdin fd/0 symbolic 標準輸入文件描述府
/dev/stdout fd/1 symbolic 標準輸出文件描述符
/dev/stderr fd/2 symbolic 標準錯誤文件描述符
/dev/nfsd socksys symbolic 僅為 iBCS-2 所必須
/dev/X0R null symbolic 僅為 iBCS-2 所必須
/dev/X0R 是 —
推薦的鏈接
推薦在所有的系統(tǒng)上都存在這些連接:
鏈接 目標 鏈接類型 簡要說明
/dev/core /proc/kcore symbolic 為了向后兼容
/dev/ramdisk ram0 symbolic 為了向后兼容
/dev/ftape qft0 symbolic 為了向后兼容
/dev/bttv0 video0 symbolic 為了向后兼容
/dev/radio radio0 symbolic 為了向后兼容
/dev/i2o* /dev/i2o/* symbolic 為了向后兼容
/dev/scd? sr? hard 代替 SCSI CD-ROM 的名字
本地定義的鏈接
下面的鏈接很可能需要根據(jù)機器的實際硬件配置創(chuàng)建其中的一部分甚至全部。
這些鏈接僅僅是為了迎合習慣用法,它們既非必須也非推薦。
鏈接 目標 鏈接類型 簡要說明
/dev/mouse mouse port symbolic 當前鼠標
/dev/tape tape device symbolic 當前磁帶
/dev/cdrom CD-ROM device symbolic 當前CD-ROM
/dev/cdwriter CD-writer symbolic 當前CD-writer
/dev/scanner scanner symbolic 當前掃描儀
/dev/modem modem port symbolic 當前調制解調器
/dev/root root device symbolic 當前根文件系統(tǒng)所在設備
/dev/swap swap device symbolic 當前swap所在設備
/dev/modem 不應當用于能夠同時支持呼入和呼出的modem,因為往往會導致鎖文件問題。
如果存在 /dev/modem ,那么它應當指向一個恰當?shù)闹?TTY 設備。
對于SCSI設備,
/dev/tape 和 /dev/cdrom 應該分別指向”cooked”設備 /dev/st* 和 /dev/sr* ;
而 /dev/cdwriter 和 /dev/scanner 應當分別指向恰當?shù)?/dev/sg* 。
/dev/mouse 可以指向一個主串行 TTY 設備、一個硬件鼠標、
或者一個對應鼠標驅動程序的套接字(例如 /dev/gpmdata)。
套接字和管道
持久套接字和命名管道可以存在于 /dev 中。常見的有:
/dev/printer socket lpd 本地套接字
/dev/log socket syslog 本地套接字
/dev/gpmdata socket gpm 鼠標多路復用器(multiplexer)
/dev/gpmctl socket (LFS-LiveCD中出現(xiàn))
/dev/initctl fifo pipe init 監(jiān)聽它并從中獲取信息(用戶與 init 進程交互的通道)
掛載點
以下名稱被保留用于掛載特殊的文件系統(tǒng)。
這些特殊的文件系統(tǒng)只提供內核界面而不提供標準的設備節(jié)點。
/dev/pts devpts PTY slave 文件系統(tǒng)
/dev/shm tmpfs 提供對 POSIX 共享內存的直接訪問
linux aio directio的介紹就聊到這里吧,感謝你花時間閱讀本站內容,更多關于linux aio directio,Linux AIO DirectIO 技術簡介,linux python connect 對同一個端口可以建立多少個,linux的相關問題的信息別忘了在本站進行查找喔。
香港云服務器機房,創(chuàng)新互聯(lián)(www.cdcxhl.com)專業(yè)云服務器廠商,回大陸優(yōu)化帶寬,安全/穩(wěn)定/低延遲.創(chuàng)新互聯(lián)助力企業(yè)出海業(yè)務,提供一站式解決方案。香港服務器-免備案低延遲-雙向CN2+BGP極速互訪!
分享題目:LinuxAIODirectIO技術簡介(linuxaiodirectio)
瀏覽路徑:http://www.5511xx.com/article/dpcejei.html


咨詢
建站咨詢
