ファイルの操作(コピー、移動、削除)の速度はファイルの権限によって異なりますか?もしそうなら、それで何ですか?
理由:上記の作業は、複数のファイルに対して継続的に実行する必要があります。ファイルに特定の権限がある場合、これらのタスクはより早く完了しますか?たとえば、「読み取り専用」権限です。
答え1
ファイルの操作(コピー、移動、削除)の速度はファイルの権限によって異なりますか?もしそうなら、それで何ですか?
権限がこれを妨げる場合にのみ操作が拒否されます(したがって、無限の時間がかかると見なすことができます)。
極端な場合を除き、権限はコピー/移動/削除操作の速度には影響しません。
私は私の声明を確認するように頼まれました。これが私の答えの理由です。 (この問題を誤って引用/説明した場合はお詫び申し上げます。これを避ける意図ではありませんでした。)
何百万もの小さなファイルのそれぞれに大規模なACLがあるとどうなりますか?この場合、権限を確認するために実際にディスク(PCI-E gen4 SSDなど)からファイルを読み込むよりも時間がかかる場合があります。通常、読み取り速度が最大10 GB /秒のPCI-E Gen 4 NVMeドライブを使用できますか?
ファイルあたりの最大ACL数が見つかりません。しかしいくつかの研究を完了しました。これにはダウンロード可能なスクリプトがあります。研究者のテストには、ファイルあたり約500のACLがありました。テストでは、Raspbianのext4ファイルシステムの252 ACL制限に達しました。 (速度は考慮せず、制限のみを考慮します。)
このサイズでは、 inode ブロックで梱包されるか、最大限ブロックの外側に梱包されます。これは、読み取って解析する必要がある追加のブロックです。非常に小さなファイルはext4 inodeに保存できるため、追加のデータブロックを読み取る必要はありません。 NVMeドライブを使用すると、ファイルごとに追加のACLブロックの読み込み時間が非常に短く、250個のACLエントリを解析するのは計算上難しくありません。これは、ファイルが非常に小さく、追加のチャンクを必要としないと仮定します。
経験?確かに。現実的な?そうだと信じています。
答え2
ファイルの操作(コピー、移動、削除)の速度はファイルの権限によって異なりますか?もしそうなら、それで何ですか?
スピードたとえば、同じファイルシステム内を移動すると、ファイルシステムのデータ構造内の項目のみが変更されるため、実際のファイルの内容には触れません。したがって、かかる時間は、システムがプログラムからカーネルに切り替えるのにかかる時間と、これらのデータ構造に対する作業の複雑さに依存する。
権限に関係なく、複雑さは同じでなければなりません。ただし、権限は所有者、グループ、その他の読み取り/書き込み/実行だけでなく、ACLとxattrsもあるため、特別な場合にはより複雑になる可能性があります。しかし、これらのどれもあなたにとって全く重要ではない可能性があります。
権限が重要である可能性がある唯一のケースは、ファイルへの同時アクセスを調整する必要がある場合(たとえば、NFSを介してマウントされたネットワークファイルシステムなど)ですが、そのような違いは見たことがありません。
したがって、通常、状況は「高速」に進み、完全に停止します。あなたは質問をしますが、使用している実際のファイルシステムについては言及しません。これはおそらくあなたが間違っていることを心配しているという意味です。ファイルシステム間の違いを見つける可能性が高いです。たとえば、ファイルを頻繁にコピーする場合、複数の参照範囲を認識するファイルシステムを使用すると、非常にスピードを上げてください。現在、LinuxにはXFSとbtrfsという2つのオプションしかありません。ただし、2つの間で多くのタスク(たとえば、1秒あたり10,000以上のタスク)を実行するときに測定可能な速度差を確認できます。私はXFSに向かって傾いていますが、LVMを使って直接ベンチマークしてみると、ファイルシステムを作成して破壊するのは本当に簡単です。
タグを使用しているという事実 RM、CPとMVしかし、これは、同じ名前のシェルツールが完了するのにかかる時間を同じにすることを意味する可能性があります。これは非常に異なる問題です。/usr/bin/rm
1を呼び出すと、実際にファイルを削除するよりもはるかに時間がかかります。ファイルシステムを変更するためにこれらのツールを明示的に呼び出す必要があるシェルスクリプトや一部の言語でこれらのボトルネックが表示されると、ファイル操作自体ではなくプロセスの作成がボトルネックになる可能性があります。
fork
1 つまり、プロセスをフォークから始めexecve("/usr/bin/rm")
、LinuxはプログラムをRAMにロードし、ダイナミックリンカが約20個のライブラリを開こうとするプロセスにメモリを割り当て、実際に1つをロードし、より多くのメモリを割り当て、複数のファイル属性をを行います。open
stdoutを実行して...実際にファイルを実行するstderr
前に、すべて再度閉じます。これは実際の削除要求の数の100倍です。unlink
unlink