日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
LinuxAIODirectIO技術(shù)簡介(linuxaiodirectio)

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

一、概述

Linux O DirectIO 技術(shù)原理是:在進(jìn)行文件操作時(shí),利用異步I/O(O)接口來代替直接的同步I/O操作方式,通過利用Linux內(nèi)核中的Direct IO(DirectIO)接口,直接將數(shù)據(jù)從硬盤讀取到應(yīng)用程序的內(nèi)存空間,從而避免了數(shù)據(jù)從內(nèi)核空間到用戶空間的拷貝,減少了CPU和內(nèi)存的消耗,提高了系統(tǒng)磁盤I/O性能。

二、Direct IO

Direct IO是一種繞過文件系統(tǒng)緩存的數(shù)據(jù)讀寫方式,即直接將數(shù)據(jù)讀取到應(yīng)用程序的內(nèi)存空間,或?qū)?yīng)用程序中的數(shù)據(jù)直接寫入硬盤中。與之相對的,非Direct IO的方式是將數(shù)據(jù)先讀入文件系統(tǒng)緩存,再從緩存中讀取,或?qū)?shù)據(jù)寫入緩存中,再由緩存寫入硬盤。

使用Direct IO的優(yōu)點(diǎn)是:

1、減少了CPU和內(nèi)存的占用。由于避免了數(shù)據(jù)緩存到內(nèi)存中,因此減少了CPU和內(nèi)存的使用。

2、提高了IO性能。由于數(shù)據(jù)直接從磁盤讀取,而不是先緩存到內(nèi)存中,IO性能得到了提升。

使用Direct IO的缺點(diǎn)是:

1、數(shù)據(jù)讀寫效率的不穩(wěn)定。因?yàn)閿?shù)據(jù)直接從磁盤讀取,而磁盤的讀寫速度較慢,因此在一些情況下,使用Direct IO的讀寫效率會(huì)比非Direct IO的方式低。

2、不支持緩存。由于繞過了文件系統(tǒng)緩存,因此無法利用文件系統(tǒng)的緩存機(jī)制。在一些情況下,這可能會(huì)降低系統(tǒng)的整體性能。

三、Linux O

O是指操作系統(tǒng)提供的異步I/O接口,可以用來實(shí)現(xiàn)異步的文件讀寫操作。Linux中,O接口可以通過libo庫調(diào)用。

O的優(yōu)點(diǎn)是:

1、高效的I/O操作。 O在進(jìn)行I/O操作時(shí),會(huì)將I/O請求放入內(nèi)核完成隊(duì)列中,內(nèi)核處理完I/O請求后再通知用戶程序,從而實(shí)現(xiàn)異步的I/O操作,提高了系統(tǒng)I/O性能。

2、多線程并行。 O允許多個(gè)I/O請求同時(shí)發(fā)起,從而實(shí)現(xiàn)系統(tǒng)I/O多線程并行操作,提高了整體系統(tǒng)的處理性能。

四、Linux O DirectIO 技術(shù)

Linux O DirectIO 技術(shù)結(jié)合了O和Direct IO技術(shù),將數(shù)據(jù)直接從磁盤讀取到應(yīng)用程序中,避免了數(shù)據(jù)從內(nèi)核空間到用戶空間的拷貝,減少了CPU和內(nèi)存的占用,提高了系統(tǒng)磁盤I/O性能。但是,使用該技術(shù)需要注意一些問題:

1、文件對齊。 Direct IO要求讀寫的數(shù)據(jù)大小必須是磁盤I/O塊大小的整數(shù)倍,否則會(huì)導(dǎo)致讀寫性能下降。

2、內(nèi)存對齊。 Direct IO要求讀寫內(nèi)存的地址必須是內(nèi)存I/O塊大小的整數(shù)倍,否則會(huì)導(dǎo)致讀寫性能下降。

3、數(shù)據(jù)量控制。 Direct IO要求一次讀寫的數(shù)據(jù)量不能大于系統(tǒng)可用內(nèi)存的一半,否則會(huì)導(dǎo)致系統(tǒng)性能下降。

五、

Linux O DirectIO技術(shù)通過利用異步I/O接口和直接IO接口,實(shí)現(xiàn)了數(shù)據(jù)直接從磁盤讀取到應(yīng)用程序中,避免了CPU和內(nèi)存的浪費(fèi),提高了系統(tǒng)磁盤IO性能。但是,使用該技術(shù)需要注意一些限制條件,避免出現(xiàn)性能問題。

成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!

linux python connect 對同一個(gè)端口可以建立多少個(gè)

如果是tcp client用同一個(gè)本地端口去連不同的兩個(gè)服務(wù)器ip,連第二個(gè)時(shí)就會(huì)提示端口已被占用。但服務(wù)器的監(jiān)聽端口,可以accept多次,建立多個(gè)socket;我的問題是服務(wù)器一個(gè)端口為什么能建立多個(gè)連接而客戶端卻不行呢?

TCP server 可以,TCP client 也可以。一個(gè)套接字只能建立一個(gè)連接,無論對于 server 還是 client。

注意報(bào)錯(cuò)消息是:

(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 套接字最多只能調(diào)用 connect 一次。那么,你的監(jiān)聽套接字調(diào)用 connect 了幾次?

來點(diǎn)有意思的。

一個(gè)套接字不能連接兩次,并不代表一個(gè)本地地址不能用兩次,看!****加粗文字**加粗文字**

>>> 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: 一個(gè)人也可以建立 TCP 連接呢 – 依云’s Blog

2023年08月19日回答 · 2023年08月19日更新

依云21.1k 聲望

答案對人有幫助,有參考價(jià)值1答案沒幫助,是錯(cuò)誤的答案,答非所問

內(nèi)核是以一個(gè)(著名的)5元信息組來標(biāo)識不同的socket的:源地址、源端口、目的地址、目的端口、協(xié)議號。任何一個(gè)不同,都不叫“同一個(gè)socket”。

2023年08月20日回答

sched_yield80 聲望

答案對人有幫助,有參考價(jià)值0答案沒幫助,是錯(cuò)誤的答案,答非所問

首先,TCP鏈接是可靠的端對端的鏈接,每個(gè)TCP鏈接由4個(gè)要素組成:2組IP地址(本地和遠(yuǎn)端),2組端口地址(本地和遠(yuǎn)端)。其中如果需要跟端口信息綁定時(shí),都需要調(diào)用bind函數(shù),如果server端針對2個(gè)同樣的IP、端口組進(jìn)行同樣的綁定時(shí),第2次同樣是不成功的。

2023年08月16日回答

charliecui2.4k 聲望

答案對人有幫助,有參考價(jià)值0答案沒幫助,是錯(cuò)誤的答案,答非所問

有個(gè)相關(guān)的問題: ftp的數(shù)據(jù)傳輸,服務(wù)器會(huì)用20端口主動(dòng)連接客戶端,如果兩個(gè)客戶端同時(shí)在一下載東西,那ftp 服務(wù)器能用20端口去連接兩個(gè)ip ?(這時(shí)ftp的服務(wù)器其實(shí)是tcp里的客戶端)

2023年08月16日回答

編輯

hyanleo163 聲望

+1

能啊,看我的實(shí)驗(yàn)。

依云 · 2023年08月19日

不管是服務(wù)器還是客戶端,建立TCP鏈接,同一個(gè)端口都只能使用一次。

這句話其實(shí)是**錯(cuò)的**!

對于TCP協(xié)議,要成功建立一個(gè)新的鏈接,需要保證新鏈接四個(gè)要素組合體的唯一性:客戶端的IP、客戶端的port、服務(wù)器端的IP、服務(wù)器端的port。也就是說,服務(wù)器端的同一個(gè)IP和port,可以和同一個(gè)客戶端的多個(gè)不同端口成功建立多個(gè)TCP鏈接(與多個(gè)不同的客戶端當(dāng)然也可以),只要保證【Server IP + Server Port + Client IP + Client Port】這個(gè)組合唯一不重復(fù)即可。

> 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

上述結(jié)果127.0.0.1:9999中9999端口成功建立兩個(gè)TCP鏈接,也就可以理解。

**客戶端**發(fā)送TCP鏈接請求的端口,也就是后續(xù)建立TCP鏈接使用的端口,所以一旦TCP鏈接建立,端口就被占用,無法再建立第二個(gè)鏈接。

而**服務(wù)器端**有兩類端口:偵聽端口 和 后續(xù)建立TCP鏈接的端口。其中偵聽端口只負(fù)責(zé)偵聽客戶端發(fā)送來的TCP鏈接請求,不用作建立TCP鏈接使用,一旦偵聽到有客戶端發(fā)送TCP鏈接請求,就分配一個(gè)端口(一般隨機(jī)分配,且不會(huì)重復(fù))用于建立TCP鏈接,而不是所說的服務(wù)器一個(gè)端口能建立多個(gè)連接。

上述描述也比較片面,客戶端如何請求及建立鏈接,服務(wù)器端如何偵聽及是否分配新隨機(jī)端口等…應(yīng)該都可以在應(yīng)用層面進(jìn)行控制,所以上述描述可以作為建立TCP鏈接的一種方式,僅供參考。

一些英文的參考:

How do multiple clients connect simultaneously to one port, say 80, on a server?

TCP : two different sockets sharing a port?

提升linux下tcp服務(wù)器并發(fā)連接數(shù)限制:30:23

1、修改用戶進(jìn)程可打開文件數(shù)限制

在Linux平臺上,無論編寫客戶端程序還是服務(wù)端程序,在進(jìn)行高并發(fā)TCP連接處理時(shí),更高的并發(fā)數(shù)量都要受到系統(tǒng)對用戶單一進(jìn)程同時(shí)可打開文件數(shù)量的限制(這是因?yàn)橄到y(tǒng)為每個(gè)TCP連接都要?jiǎng)?chuàng)建一個(gè)socket句柄,每個(gè)socket句柄同時(shí)也是一個(gè)文件句柄)??墒褂胾limit命令查看系統(tǒng)允許當(dāng)前用戶進(jìn)程打開的文件數(shù)限制:

$ ulimit -n

這表示當(dāng)前用戶的每個(gè)進(jìn)程最多允許同時(shí)打開1024個(gè)文件,這1024個(gè)文件中還得除去每個(gè)進(jìn)程必然打開的標(biāo)準(zhǔn)輸入,標(biāo)準(zhǔn)輸出,標(biāo)準(zhǔn)錯(cuò)誤,服務(wù)器監(jiān)聽 socket,進(jìn)程間通訊的unix域socket等文件,那么剩下的可用于客戶端socket連接的文件數(shù)就只有大概=1014個(gè)左右。也就是說缺省情況下,基于Linux的通訊程序最多允許同時(shí)1014個(gè)TCP并發(fā)連接。

對于想支持更高數(shù)量的TCP并發(fā)連接的通訊處理程序,就必須修改Linux對當(dāng)前用戶的進(jìn)程同時(shí)打開的文件數(shù)量的軟限制(soft limit)和硬限制(hardlimit)。其中軟限制是指Linux在當(dāng)前系統(tǒng)能夠承受的范圍內(nèi)進(jìn)一步限制用戶同時(shí)打開的文件數(shù);硬限制則是根據(jù)系統(tǒng)硬件資源狀況(主要是系統(tǒng)內(nèi)存)計(jì)算出來的系統(tǒng)最多可同時(shí)打開的文件數(shù)量。通常軟限制小于或等于硬限制。

修改上述限制的最簡單的辦法就是使用ulimit命令:

$ ulimit -n

上述命令中,在中指定要設(shè)置的單一進(jìn)程允許打開的更大文件數(shù)。如果系統(tǒng)回顯類似于“Operation notpermitted”之類的話,說明上述限制修改失敗,實(shí)際上是因?yàn)樵谥兄付ǖ臄?shù)值超過了Linux系統(tǒng)對該用戶打開文件數(shù)的軟限制或硬限制。因此,就需要修改Linux系統(tǒng)對用戶的關(guān)于打開文件數(shù)的軟限制和硬限制。

之一步,修改/etc/security/limits.conf文件,在文件中添加如下行:

speng soft nofile 10240

speng hard nofile 10240

其中speng指定了要修改哪個(gè)用戶的打開文件數(shù)限制,可用’*’號表示修改所有用戶的限制;soft或hard指定要修改軟限制還是硬限制;10240則指定了想要修改的新的限制值,即更大打開文件數(shù)(請注意軟限制值要小于或等于硬限制)。修改完后保存文件。

第二步,修改/etc/pam.d/login文件,在文件中添加如下行:

session required /lib/security/pam_limits.so

這是告訴Linux在用戶完成系統(tǒng)登錄后,應(yīng)該調(diào)用pam_limits.so模塊來設(shè)置系統(tǒng)對該用戶可使用的各種資源數(shù)量的更大限制(包括用戶可打開的更大文件數(shù)限制),而pam_limits.so模塊就會(huì)從/etc/security/limits.conf文件中讀取配置來設(shè)置這些限制值。修改完后保存此文件。

第三步,查看Linux系統(tǒng)級的更大打開文件數(shù)限制,使用如下命令:

$ cat /proc/sys/fs/file-max

這表明這臺Linux系統(tǒng)最多允許同時(shí)打開(即包含所有用戶打開文件數(shù)總和)12158個(gè)文件,是Linux系統(tǒng)級硬限制,所有用戶級的打開文件數(shù)限制都不應(yīng)超過這個(gè)數(shù)值。通常這個(gè)系統(tǒng)級硬限制是Linux系統(tǒng)在啟動(dòng)時(shí)根據(jù)系統(tǒng)硬件資源狀況計(jì)算出來的更佳的更大同時(shí)打開文件數(shù)限制,如果沒有特殊需要,不應(yīng)該修改此限制,除非想為用戶級打開文件數(shù)限制設(shè)置超過此限制的值。修改此硬限制的方法是修改/etc/rc.local腳本,在腳本中添加如下行:

echo> /proc/sys/fs/file-max

這是讓Linux在啟動(dòng)完成后強(qiáng)行將系統(tǒng)級打開文件數(shù)硬限制設(shè)置為22158。修改完后保存此文件。

完成上述步驟后重啟系統(tǒng),一般情況下就可以將Linux系統(tǒng)對指定用戶的單一進(jìn)程允許同時(shí)打開的更大文件數(shù)限制設(shè)為指定的數(shù)值。如果重啟后用 ulimit- n命令查看用戶可打開文件數(shù)限制仍然低于上述步驟中設(shè)置的更大值,這可能是因?yàn)樵谟脩舻卿浤_本/etc/profile中使用ulimit-n命令已經(jīng)將用戶可同時(shí)打開的文件數(shù)做了限制。由于通過ulimit-n修改系統(tǒng)對用戶可同時(shí)打開文件的更大數(shù)限制時(shí),新修改的值只能小于或等于上次ulimit-n 設(shè)置的值,因此想用此命令增大這個(gè)限制值是不可能的。所以,如果有上述問題存在,就只能去打開/etc/profile腳本文件,在文件中查找是否使用了 ulimit-n限制了用戶可同時(shí)打開的更大文件數(shù)量,如果找到,則刪除這行命令,或者將其設(shè)置的值改為合適的值,然后保存文件,用戶退出并重新登錄系統(tǒng)即可。

通過上述步驟,就為支持高并發(fā)TCP連接處理的通訊處理程序解除關(guān)于打開文件數(shù)量方面的系統(tǒng)限制。

2、修改網(wǎng)絡(luò)內(nèi)核對TCP連接的有關(guān)限制

在Linux上編寫支持高并發(fā)TCP連接的客戶端通訊處理程序時(shí),有時(shí)會(huì)發(fā)現(xiàn)盡管已經(jīng)解除了系統(tǒng)對用戶同時(shí)打開文件數(shù)的限制,但仍會(huì)出現(xiàn)并發(fā)TCP連接數(shù)增加到一定數(shù)量時(shí),再也無法成功建立新的TCP連接的現(xiàn)象。出現(xiàn)這種現(xiàn)在的原因有多種。

之一種原因可能是因?yàn)長inux網(wǎng)絡(luò)內(nèi)核對本地端口號范圍有限制。此時(shí),進(jìn)一步分析為什么無法建立TCP連接,會(huì)發(fā)現(xiàn)問題出在connect()調(diào)用返回失敗,查看系統(tǒng)錯(cuò)誤提示消息是“Can’t assign requestedaddress”。同時(shí),如果在此時(shí)用tcpdump工具監(jiān)視網(wǎng)絡(luò),會(huì)發(fā)現(xiàn)根本沒有TCP連接時(shí)客戶端發(fā)SYN包的網(wǎng)絡(luò)流量。這些情況說明問題在于本地Linux系統(tǒng)內(nèi)核中有限制。其實(shí),問題的根本原因在于Linux內(nèi)核的TCP/IP協(xié)議實(shí)現(xiàn)模塊對系統(tǒng)中所有的客戶端TCP連接對應(yīng)的本地端口號的范圍進(jìn)行了限制(例如,內(nèi)核限制本地端口號的范圍為1024~32768之間)。當(dāng)系統(tǒng)中某一時(shí)刻同時(shí)存在太多的TCP客戶端連接時(shí),由于每個(gè)TCP客戶端連接都要占用一個(gè)唯一的本地端口號(此端口號在系統(tǒng)的本地端口號范圍限制中),如果現(xiàn)有的TCP客戶端連接已將所有的本地端口號占滿,則此時(shí)就無法為新的TCP客戶端連接分配一個(gè)本地端口號了,因此系統(tǒng)會(huì)在這種情況下在connect()調(diào)用中返回失敗,并將錯(cuò)誤提示消息設(shè)為“Can’t assignrequested address”。有關(guān)這些控制邏輯可以查看Linux內(nèi)核源代碼,以linux2.6內(nèi)核為例,可以查看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ù)中設(shè)置:

void __init tcp_init(void)

內(nèi)核編譯時(shí)默認(rèn)設(shè)置的本地端口號范圍可能太小,因此需要修改此本地端口范圍限制。

之一步,修改/etc/sysctl.conf文件,在文件中添加如下行:

net.ipv4.ip_local_port_range =

這表明將系統(tǒng)對本地端口范圍限制設(shè)置為1024~65000之間。請注意,本地端口范圍的最小值必須大于或等于1024;而端口范圍的更大值則應(yīng)小于或等于65535。修改完后保存此文件。

第二步,執(zhí)行sysctl命令:

$ sysctl -p

如果系統(tǒng)沒有錯(cuò)誤提示,就表明新的本地端口范圍設(shè)置成功。如果按上述端口范圍進(jìn)行設(shè)置,則理論上單獨(dú)一個(gè)進(jìn)程最多可以同時(shí)建立60000多個(gè)TCP客戶端連接。

第二種無法建立TCP連接的原因可能是因?yàn)長inux網(wǎng)絡(luò)內(nèi)核的IP_TABLE防火墻對更大跟蹤的TCP連接數(shù)有限制。此時(shí)程序會(huì)表現(xiàn)為在 connect()調(diào)用中阻塞,如同死機(jī),如果用tcpdump工具監(jiān)視網(wǎng)絡(luò),也會(huì)發(fā)現(xiàn)根本沒有TCP連接時(shí)客戶端發(fā)SYN包的網(wǎng)絡(luò)流量。由于 IP_TABLE防火墻在內(nèi)核中會(huì)對每個(gè)TCP連接的狀態(tài)進(jìn)行跟蹤,跟蹤信息將會(huì)放在位于內(nèi)核內(nèi)存中的conntrackdatabase中,這個(gè)數(shù)據(jù)庫的大小有限,當(dāng)系統(tǒng)中存在過多的TCP連接時(shí),數(shù)據(jù)庫容量不足,IP_TABLE無法為新的TCP連接建立跟蹤信息,于是表現(xiàn)為在connect()調(diào)用中阻塞。此時(shí)就必須修改內(nèi)核對更大跟蹤的TCP連接數(shù)的限制,方法同修改內(nèi)核對本地端口號范圍的限制是類似的:

之一步,修改/etc/sysctl.conf文件,在文件中添加如下行:

net.ipv4.ip_conntrack_max = 10240

這表明將系統(tǒng)對更大跟蹤的TCP連接數(shù)限制設(shè)置為10240。請注意,此限制值要盡量小,以節(jié)省對內(nèi)核內(nèi)存的占用。

第二步,執(zhí)行sysctl命令:

$ sysctl -p

如果系統(tǒng)沒有錯(cuò)誤提示,就表明系統(tǒng)對新的更大跟蹤的TCP連接數(shù)限制修改成功。如果按上述參數(shù)進(jìn)行設(shè)置,則理論上單獨(dú)一個(gè)進(jìn)程最多可以同時(shí)建立10000多個(gè)TCP客戶端連接。

3、使用支持高并發(fā)網(wǎng)絡(luò)I/O的編程技術(shù)

在Linux上編寫高并發(fā)TCP連接應(yīng)用程序時(shí),必須使用合適的網(wǎng)絡(luò)I/O技術(shù)和I/O事件分派機(jī)制。

可用的I/O技術(shù)有同步I/O,非阻塞式同步I/O(也稱反應(yīng)式I/O),以及異步I/O。在高TCP并發(fā)的情形下,如果使用同步I/O,這會(huì)嚴(yán)重阻塞程序的運(yùn)轉(zhuǎn),除非為每個(gè)TCP連接的I/O創(chuàng)建一個(gè)線程。但是,過多的線程又會(huì)因系統(tǒng)對線程的調(diào)度造成巨大開銷。因此,在高TCP并發(fā)的情形下使用同步I /O 是不可取的,這時(shí)可以考慮使用非阻塞式同步I/O或異步I/O。非阻塞式同步I/O的技術(shù)包括使用select(),poll(),epoll等機(jī)制。異步I/O的技術(shù)就是使用AIO。

從I/O事件分派機(jī)制來看,使用select()是不合適的,因?yàn)樗С值牟l(fā)連接數(shù)有限(通常在1024個(gè)以內(nèi))。如果考慮性能,poll()也是不合適的,盡管它可以支持的較高的TCP并發(fā)數(shù),但是由于其采用“輪詢”機(jī)制,當(dāng)并發(fā)數(shù)較高時(shí),其運(yùn)行效率相當(dāng)?shù)?,并可能存在I/O事件分派不均,導(dǎo)致部分 TCP連接上的I/O出現(xiàn)“饑餓”現(xiàn)象。而如果使用epoll或AIO,則沒有上述問題(早期 Linux內(nèi)核的AIO技術(shù)實(shí)現(xiàn)是通過在內(nèi)核中為每個(gè)I/O請求創(chuàng)建一個(gè)線程來實(shí)現(xiàn)的,這種實(shí)現(xiàn)機(jī)制在高并發(fā)TCP連接的情形下使用其實(shí)也有嚴(yán)重的性能問題。但在最新的Linux內(nèi)核中,AIO的實(shí)現(xiàn)已經(jīng)得到改進(jìn))。

linux的相關(guān)問題

1 test -d

文件測試

test命令也可以用于檢查文件的狀態(tài)

e 文件存在則為真

r 文件存在并且可讀則為真

w 文件存在并且可寫則為真

x 文件存在并且可執(zhí)行則為真

s 文件存在并且至少有一個(gè)字符則為真

d 文件存在并且為目錄則為真

f 文件存在并且為普通文件則為真

c 文件存在并且為字符型文件則為真

b 文件存在并且為塊特殊文件則為真

a并且 -o或者 !非

2 能為myfile1更新時(shí)間的命令____touch

3 linux中的歸檔解檔命令____tar

4 編譯是優(yōu)先級的取值范圍是:______,默認(rèn)的優(yōu)先級是____

中進(jìn)程的優(yōu)先極是由進(jìn)程的nice值決定的,值越小,優(yōu)先級越高

5 linux中標(biāo)準(zhǔn)設(shè)備文件有哪些.分別用什么符號表示.

主設(shè)備號設(shè)備類型

次設(shè)備號=文件名簡要說明

0 未命名設(shè)備(例如:掛載的非設(shè)備)

0 = 未空設(shè)備號保留

1 char 內(nèi)存設(shè)備

1 = /dev/mem 直接存取物理內(nèi)存

2 = /dev/kmem 存取經(jīng)過內(nèi)核虛擬之后的內(nèi)存

3 = /dev/null 空設(shè)備。任何寫入都將被直接丟棄,任何讀取都將得到EOF。

4 = /dev/port 存取 I/O 端口

5 = /dev/zero 零字節(jié)源,只能讀取到無限多的零字節(jié)。

7 = /dev/full 滿設(shè)備。任何寫入都將失敗,并把errno設(shè)為ENOSPC以表示沒有剩余空間。

8 = /dev/random 隨機(jī)數(shù)發(fā)生器。完全由用戶的輸入來產(chǎn)生隨機(jī)數(shù)。

如果用戶停止所有動(dòng)作,則停止產(chǎn)生新的隨機(jī)數(shù)。

9 = /dev/urandom 更快,但是不夠安全的隨機(jī)數(shù)發(fā)生器。盡可能由用戶的輸入來產(chǎn)生隨機(jī)數(shù),

如果用戶停止所有動(dòng)作,則把已經(jīng)產(chǎn)生的隨機(jī)數(shù)做為種子來產(chǎn)生新的隨機(jī)數(shù)。

10 = /dev/aio 異步 I/O 通知接口

11 = /dev/kmsg 任何對該文件的寫入都將作為 printk 的輸出

1 block RAM disk

0 = /dev/ram0 第1個(gè) RAM disk (initrd只能使用ram0)

1 = /dev/ram1 第2個(gè) RAM disk

200 = /dev/ram200 第200個(gè) RAM disk

4 char TTY(終端)設(shè)備

0 = /dev/tty0 當(dāng)前虛擬控制臺

1 = /dev/tty1 第1個(gè)虛擬控制臺

63 = /dev/tty63 第63個(gè)虛擬控制臺

4 block 如果根文件系統(tǒng)以是以只讀方式掛載的,那么就不可能創(chuàng)建真正的設(shè)備節(jié)點(diǎn),

此時(shí)就使用該設(shè)備作為動(dòng)態(tài)分配的主(major)設(shè)備的別名

0 = /dev/root

5 char 其他 TTY 設(shè)備

0 = /dev/tty 當(dāng)前 TTY 設(shè)備

1 = /dev/console 系統(tǒng)控制臺

2 = /dev/ptmx 所有 PTY master 的復(fù)用器

7 char 虛擬控制臺捕捉設(shè)備(這些設(shè)備既允許讀也允許寫)

0 = /dev/vcs 當(dāng)前虛擬控制臺(vc)的文本內(nèi)容

1 = /dev/vcs1 tty1 的文本內(nèi)容

63 = /dev/vcs63 tty63 的文本內(nèi)容

128 = /dev/vcsa 當(dāng)前虛擬控制臺(vc)的文本/屬性內(nèi)容

129 = /dev/vcsa1 tty1 的文本/屬性內(nèi)容

191 = /dev/vcsa63 tty63 的文本/屬性內(nèi)容代碼:

7 block 回環(huán)設(shè)備(用一個(gè)普通的磁盤文件來模擬一個(gè)塊設(shè)備)

對回環(huán)設(shè)備的綁定由 mount(8) 或 losetup(8) 處理

0 = /dev/loop0 第1個(gè)回環(huán)設(shè)備

1 = /dev/loop1 第2個(gè)回環(huán)設(shè)備

8 block SCSI 磁盤(0-15)

0 = /dev/sda 第1個(gè) SCSI 磁盤(整個(gè)磁盤)

16 = /dev/sdb 第2個(gè) SCSI 磁盤(整個(gè)磁盤)

32 = /dev/sdc 第3個(gè) SCSI 磁盤(整個(gè)磁盤)

240 = /dev/sdp 第16個(gè) SCSI 磁盤(整個(gè)磁盤)

分區(qū)表示方法如下(以第3個(gè) SCSI 磁盤為例)

33 = /dev/sdc1 第1個(gè)分區(qū)

34 = /dev/sdc2 第2個(gè)分區(qū)

47 = /dev/sdc15 第15個(gè)分區(qū)

對于Linux/i386來說,分區(qū)1-4是主分區(qū),5-15是邏輯分區(qū)。

9 block Metadisk(RAID)設(shè)備

0 = /dev/md0 第1組 metadisk

1 = /dev/md1 第2組 metadisk

metadisk 驅(qū)動(dòng)用于將同一個(gè)文件系統(tǒng)分割到多個(gè)物理磁盤上。

10 char 非串口鼠標(biāo),各種雜項(xiàng)設(shè)備和特性

1 = /dev/psaux PS/2鼠標(biāo)

131 = /dev/temperature 機(jī)器內(nèi)部溫度

134 = /dev/apm_bios APM(高級電源管理) BIOS

135 = /dev/rtc 實(shí)時(shí)時(shí)鐘(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)視計(jì)數(shù)器

183 = /dev/hwrng 通用硬件隨機(jī)數(shù)發(fā)生器

184 = /dev/cpu/microcode CPU微代碼更新接口

186 = /dev/atomicps 進(jìn)程狀態(tài)數(shù)據(jù)的原子快照

188 = /dev/buios Bus(系統(tǒng)管理總線) BIOS

200 = /dev/net/tun TAP/TUN 網(wǎng)絡(luò)設(shè)備(TAP/TUN以軟件的方式實(shí)現(xiàn)了網(wǎng)絡(luò)設(shè)備)

TAP模擬了以太網(wǎng)幀(第二層),TUN模擬了IP包(第三層)。

202 = /dev/emd/ctl 增強(qiáng)型 Metadisk RAID (EMD) 控制器

220 = /dev/mptctl Message passing technology (MPT) control

223 = /dev/input/uinput 用戶層輸入設(shè)備驅(qū)動(dòng)支持

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)內(nèi)存快照

232 = /dev/kvm 基于內(nèi)核的虛構(gòu)機(jī)(基于AMD SVM和Intel VT硬件虛擬技術(shù))

11 block SCSI CD-ROM 設(shè)備

0 = /dev/scd0 第1個(gè) SCSI CD-ROM

1 = /dev/scd1 第2個(gè) SCSI CD-ROM

…代碼:

13 char 核心輸入設(shè)備

32 = /dev/input/mouse0 第1個(gè)鼠標(biāo)

33 = /dev/input/mouse1 第2個(gè)鼠標(biāo)

62 = /dev/input/mouse30 第31個(gè)鼠標(biāo)

63 = /dev/input/mice 所有鼠標(biāo)的統(tǒng)一

64 = /dev/input/event0 第1個(gè)事件隊(duì)列

65 = /dev/input/event1 第2個(gè)事件隊(duì)列

95 = /dev/input/event1 第32個(gè)事件隊(duì)列

21 char 通用 SCSI 設(shè)備(通常是SCSI光驅(qū))

0 = /dev/sg0 第1個(gè)通用 SCSI 設(shè)備

1 = /dev/sg1 第2個(gè)通用 SCSI 設(shè)備

29 char 通用幀緩沖(frame buffer)設(shè)備

0 = /dev/fb0 第1個(gè)幀緩沖設(shè)備

1 = /dev/fb1 第2個(gè)幀緩沖設(shè)備

31 = /dev/fb31 第32個(gè)幀緩沖設(shè)備

30 char iBCS-2 兼容設(shè)備

0 = /dev/socksys 套接字訪問接口

1 = /dev/spx SVR3 本地 X 接口

32 = /dev/inet/ip 網(wǎng)絡(luò)訪問接口

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 路由, 設(shè)備更新, kernel to user

3 = /dev/fwmonitor Firewall packet 復(fù)制

59 char sf 防火墻模塊

0 = /dev/firewall 與 sf 內(nèi)核模塊通信

65 block SCSI 磁盤(16-31)

0 = /dev/sdq 第17個(gè) SCSI 磁盤(整個(gè)磁盤)

16 = /dev/sdr 第18個(gè) SCSI 磁盤(整個(gè)磁盤)

32 = /dev/sds 第19個(gè) SCSI 磁盤(整個(gè)磁盤)

240 = /dev/sdaf 第32個(gè) SCSI 磁盤(整個(gè)磁盤)

66 block SCSI 磁盤(32-47)

0 = /dev/sdag 第33個(gè) SCSI 磁盤(整個(gè)磁盤)

16 = /dev/sdah 第34個(gè) SCSI 磁盤(整個(gè)磁盤)

32 = /dev/sdai 第35個(gè) SCSI 磁盤(整個(gè)磁盤)

240 = /dev/sdav 第48個(gè) SCSI 磁盤(整個(gè)磁盤)

89 char I2C 總線接口

0 = /dev/i2c-0 第1個(gè) I2C 適配器

1 = /dev/i2c-1 第2個(gè) I2C 適配器

98 block 用戶模式下的虛擬塊設(shè)備(分區(qū)處理方式與 SCSI 磁盤相同)

0 = /dev/ubda 第1個(gè)用戶模式塊設(shè)備

16 = /dev/udbb 第2個(gè)用戶模式塊設(shè)備

103 block 審計(jì)(Audit)設(shè)備

0 = /dev/audit 審計(jì)(Audit)設(shè)備

char Unix98 PTY master

這些設(shè)備不應(yīng)當(dāng)存在設(shè)備節(jié)點(diǎn),而應(yīng)當(dāng)通過 /dev/ptmx 接口訪問。

char Unix98 PTY slave

這些設(shè)備節(jié)點(diǎn)是自動(dòng)生成的(伴有適當(dāng)?shù)臋?quán)限和模式),不能手動(dòng)創(chuàng)建。

方法是通過使用適當(dāng)?shù)?mount 選項(xiàng)(通常是:mode=0620,gid=)

將 devpts 文件系統(tǒng)掛載到 /dev/pts 目錄即可。

0 = /dev/pts/0 第1個(gè) Unix98 PTY slave

1 = /dev/pts/1 第2個(gè) Unix98 PTY slave

…代碼:

153 block Enhanced Metadisk RAID (EMD) 存儲(chǔ)單元(分區(qū)處理方式與 SCSI 磁盤相同)

0 = /dev/emd/0 第1個(gè)存儲(chǔ)單元

1 = /dev/emd/0p1 第1個(gè)存儲(chǔ)單元的第1個(gè)分區(qū)

2 = /dev/emd/0p2 第1個(gè)存儲(chǔ)單元的第2個(gè)分區(qū)

15 = /dev/emd/0p15 第1個(gè)存儲(chǔ)單元的第15個(gè)分區(qū)

16 = /dev/emd/1 第2個(gè)存儲(chǔ)單元

32 = /dev/emd/2 第3個(gè)存儲(chǔ)單元

240 = /dev/emd/15 第16個(gè)存儲(chǔ)單元

180 char USB 字符設(shè)備

96 = /dev/u/hiddev0 第1個(gè)USB人機(jī)界面設(shè)備(鼠標(biāo)/鍵盤/游戲桿/手寫版等人操作計(jì)算機(jī)的設(shè)備)

111 = /dev/u/hiddev15 第16個(gè)USB人機(jī)界面設(shè)備

180 block USB 塊設(shè)備(U盤之類)

0 = /dev/uba 第1個(gè)USB 塊設(shè)備

8 = /dev/ubb 第2個(gè)USB 塊設(shè)備

16 = /dev/ubc 第3個(gè)USB 塊設(shè)備

192 char 內(nèi)核 profiling 接口

0 = /dev/profile Profiling 控制設(shè)備

1 = /dev/profile0 CPU 0 的 Profiling 設(shè)備

2 = /dev/profile1 CPU 1 的 Profiling 設(shè)備

193 char 內(nèi)核事件跟蹤接口

0 = /dev/trace 跟蹤控制設(shè)備

1 = /dev/trace0 CPU 0 的跟蹤設(shè)備

2 = /dev/trace1 CPU 1 的跟蹤設(shè)備

195 char Nvidia 圖形設(shè)備(比如顯卡)

0 = /dev/nvidia0 第1個(gè) Nvidia 卡

1 = /dev/nvidia1 第2個(gè) Nvidia 卡

255 = /dev/nvidiactl Nvidia 卡控制設(shè)備

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

…代碼:

===================================================================

這部分詳細(xì)說明一些應(yīng)該或可能存在于 /dev 目錄之外的文件。

鏈接更好使用與這里完全相同的格式(絕對路徑或相對路徑)。

究竟是使用硬鏈接(hard)還是軟連接(symbolic)取決于不同的設(shè)備。

必須的鏈接

必須在所有的系統(tǒng)上都存在這些連接:

鏈接 目標(biāo) 鏈接類型 簡要說明

/dev/fd /proc/self/fd symbolic 文件描述府

/dev/stdin fd/0 symbolic 標(biāo)準(zhǔn)輸入文件描述府

/dev/stdout fd/1 symbolic 標(biāo)準(zhǔn)輸出文件描述符

/dev/stderr fd/2 symbolic 標(biāo)準(zhǔn)錯(cuò)誤文件描述符

/dev/nfsd socksys symbolic 僅為 iBCS-2 所必須

/dev/X0R null symbolic 僅為 iBCS-2 所必須

/dev/X0R 是 —

推薦的鏈接

推薦在所有的系統(tǒng)上都存在這些連接:

鏈接 目標(biāo) 鏈接類型 簡要說明

/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ù)機(jī)器的實(shí)際硬件配置創(chuàng)建其中的一部分甚至全部。

這些鏈接僅僅是為了迎合習(xí)慣用法,它們既非必須也非推薦。

鏈接 目標(biāo) 鏈接類型 簡要說明

/dev/mouse mouse port symbolic 當(dāng)前鼠標(biāo)

/dev/tape tape device symbolic 當(dāng)前磁帶

/dev/cdrom CD-ROM device symbolic 當(dāng)前CD-ROM

/dev/cdwriter CD-writer symbolic 當(dāng)前CD-writer

/dev/scanner scanner symbolic 當(dāng)前掃描儀

/dev/modem modem port symbolic 當(dāng)前調(diào)制解調(diào)器

/dev/root root device symbolic 當(dāng)前根文件系統(tǒng)所在設(shè)備

/dev/swap swap device symbolic 當(dāng)前swap所在設(shè)備

/dev/modem 不應(yīng)當(dāng)用于能夠同時(shí)支持呼入和呼出的modem,因?yàn)橥鶗?huì)導(dǎo)致鎖文件問題。

如果存在 /dev/modem ,那么它應(yīng)當(dāng)指向一個(gè)恰當(dāng)?shù)闹?TTY 設(shè)備。

對于SCSI設(shè)備,

/dev/tape 和 /dev/cdrom 應(yīng)該分別指向”cooked”設(shè)備 /dev/st* 和 /dev/sr* ;

而 /dev/cdwriter 和 /dev/scanner 應(yīng)當(dāng)分別指向恰當(dāng)?shù)?/dev/sg* 。

/dev/mouse 可以指向一個(gè)主串行 TTY 設(shè)備、一個(gè)硬件鼠標(biāo)、

或者一個(gè)對應(yīng)鼠標(biāo)驅(qū)動(dòng)程序的套接字(例如 /dev/gpmdata)。

套接字和管道

持久套接字和命名管道可以存在于 /dev 中。常見的有:

/dev/printer socket lpd 本地套接字

/dev/log socket syslog 本地套接字

/dev/gpmdata socket gpm 鼠標(biāo)多路復(fù)用器(multiplexer)

/dev/gpmctl socket (LFS-LiveCD中出現(xiàn))

/dev/initctl fifo pipe init 監(jiān)聽它并從中獲取信息(用戶與 init 進(jìn)程交互的通道)

掛載點(diǎn)

以下名稱被保留用于掛載特殊的文件系統(tǒng)。

這些特殊的文件系統(tǒng)只提供內(nèi)核界面而不提供標(biāo)準(zhǔn)的設(shè)備節(jié)點(diǎn)。

/dev/pts devpts PTY slave 文件系統(tǒng)

/dev/shm tmpfs 提供對 POSIX 共享內(nèi)存的直接訪問

linux aio directio的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux aio directio,Linux AIO DirectIO 技術(shù)簡介,linux python connect 對同一個(gè)端口可以建立多少個(gè),linux的相關(guān)問題的信息別忘了在本站進(jìn)行查找喔。

香港云服務(wù)器機(jī)房,創(chuàng)新互聯(lián)(www.cdcxhl.com)專業(yè)云服務(wù)器廠商,回大陸優(yōu)化帶寬,安全/穩(wěn)定/低延遲.創(chuàng)新互聯(lián)助力企業(yè)出海業(yè)務(wù),提供一站式解決方案。香港服務(wù)器-免備案低延遲-雙向CN2+BGP極速互訪!


分享文章:LinuxAIODirectIO技術(shù)簡介(linuxaiodirectio)
標(biāo)題URL:http://www.dlmjj.cn/article/dpcejei.html