Bisakah prinsip ujung ke ujung diformalkan?

10

Pada akhir 1990-an, ketika saya masih di sekolah pascasarjana, kertas

JH Saltzer; DP Reed; DD Clark: Argumen ujung ke ujung dalam desain sistem . ACM Trans. Komputasi. Syst. 2 (4): 277-288, 1984. DOI = 10.1145 / 357401.357402

cukup banyak bacaan wajib di setiap kelas sistem operasi di setiap universitas, dan tampaknya masih menjadi salah satu prinsip panduan utama yang mendasari desain internet. (Lihat misalnya: J Kempf, R Austein (eds), dan IAB, " Bangkitnya Pertengahan dan Masa Depan dari ujung ke ujung: Refleksi tentang Evolusi Arsitektur Internet ," RFC 3724, Maret 2004. )

Status prinsip ujung ke ujung (Saltzer et al., 1984):

[Jika] fungsi yang dipermasalahkan hanya dapat diimplementasikan dengan sepengetahuan dan bantuan aplikasi pada titik akhir sistem komunikasi, ..., asalkan fungsi yang dipertanyakan itu sebagai fitur dari sistem komunikasi itu sendiri tidak bisa jadi. [Meskipun] terkadang versi yang tidak lengkap dari fungsi yang disediakan oleh sistem komunikasi mungkin berguna sebagai peningkatan kinerja.

Atau lebih singkat (dari abstrak):

Argumen ujung ke ujung menunjukkan bahwa fungsi yang ditempatkan pada level rendah dari suatu sistem mungkin berlebihan atau sedikit nilainya bila dibandingkan dengan biaya penyediaannya pada level rendah itu.

Tapi saya sudah sedikit berhasil menerapkan prinsip ujung ke ujung dalam pengalaman saya sendiri (yaitu dalam arsitektur komputer, bukan arsitektur internet). Karena prinsip tersebut dinyatakan sebagai "puisi" (yaitu, dalam prosa bahasa Inggris dengan sekelompok istilah yang tidak didefinisikan secara matematis), cukup mudah untuk membodohi diri sendiri dengan berpikir bahwa "fungsi yang dimaksud dapat sepenuhnya dan benar diimplementasikan hanya dengan pengetahuan dan bantuan aplikasi. " Tapi apa "fungsi yang dimaksud," apalagi "pengetahuan dan bantuan" aplikasi?

Contoh: Jaringan on-chip (tidak seperti internet) tidak diizinkan untuk menjatuhkan paket, tetapi memiliki buffering yang sangat terbatas, jadi Anda perlu memiliki beberapa cara untuk menghindari atau memulihkan dari kebuntuan. Di sisi lain, aplikasi juga perlu membuat jalan buntu gratis, kan? Jadi saya mungkin beralasan bahwa saya harus membuat kasus umum (tidak ada deadlock) cepat dan mendorong penghindaran deadlock pada aplikasi. Ini, pada kenyataannya, apa yang kami coba pada Alewife dan Fugu (Mackenzie, et al., Memanfaatkan Pengiriman Dua Kasus untuk Pesan yang Dilindungi dengan Cepat , Int'l Symp High-Perf Comp Arch, (HPCA-4): 231-242, 1998. Atau disertasi John Kubiatowicz.) Ini "bekerja," (dengan interkoneksi mengganggu prosesor ketika buffer terisi dan memiliki penambahan OS dengan buffering perangkat lunak) tetapi saya belum melihat siapa pun di dunia akademis atau industri (termasuk kita yang merupakan penulis pada hal itu). Kertas HPCA) berlomba mencoba mereplikasi ide tersebut. Jadi rupanya penghindaran kebuntuan dalam suatu jaringan bukanlah "fungsi yang dipermasalahkan" yang sama dengan penghindaran kebuntuan tingkat aplikasi, atau prinsip ujung ke ujung salah.

Apakah mungkin untuk mengubah prinsip ujung ke ujung dari "puisi" menjadi teorema? Atau setidaknya, dapatkah hal itu dinyatakan dalam istilah yang dapat dimengerti oleh seorang arsitek komputer?

Logika Pengembaraan
sumber
ini terdengar seperti desain berlebihan atau rekayasa antarmuka dalam konteks komunikasi. sering di antarmuka CS / API dibuat dengan fungsi yang jarang digunakan atau struktur yang diantisipasi tidak sejalan dengan penggunaan / persyaratan aktual. nasihatnya adalah "waspada dan hindari hal itu jika memungkinkan".
vzn
Mengenai contoh Anda; Anda menyebutkan: Ini "berhasil," (dengan memiliki interkoneksi mengganggu prosesor ketika buffer terisi dan memiliki penambahan OS dengan buffering perangkat lunak). Jadi interkoneksi di antara CPU "cukup diam" untuk memungkinkan CPU lain untuk buffer data dalam memori prosesor biasa? Bagi saya itu agak tidak masuk akal.
Alexandros
Interkoneksi cukup sibuk. Interupsi dan buffering perangkat lunak hanya terjadi ketika buffer perangkat keras tidak memadai untuk mencegah kebuntuan. Buffer perangkat lunak dapat lebih besar daripada buffer perangkat keras, sehingga dapat memutus loop ketergantungan yang disebabkan oleh buffer perangkat keras kecil yang terisi. Ini jarang terjadi (terutama hanya ketika ada banyak lalu lintas DMA bersaing dengan lalu lintas cache-koherensi), sehingga untuk sebagian besar program sebagian kecil dari pesan yang ditangani dalam perangkat lunak daripada perangkat keras dapat diabaikan.
Logika Pengembaraan

Jawaban:

3

Saya percaya mungkin ada dua kekurangan dalam penerapan prinsip end-to-end (e2e) Anda:

Pertama, dalam arti bahwa Anda menerapkannya untuk kinerja. The end-to-end adalah prinsip desain seperti untuk memastikan arsitektur orthogonality, kompabilitas, keteraturan, satu atau semua, memberikan primitif dll. Prinsip-prinsip tersebut telah diuraikan dalam buku teks terkait. Performa bukan salah satunya. Bahkan, Clark et al, menyiratkan bahwa end-to-end yang ketat dapat mengakibatkan kinerja yang lebih buruk sehingga menggunakan itu, sebagai pengecualian dari prinsip ini.

Jadi, jika Anda masih ingin memformalkan:

"Argumen ujung ke ujung menarik bagi persyaratan aplikasi, dan memberikan alasan untuk memindahkan fungsi ke atas dalam sistem berlapis" sehingga Anda akan memerlukan persyaratan aplikasi formal dan sistem lapisan formal. Berikut adalah upaya yang mungkin membantu mengambilnya selangkah lebih maju:

Katakanlah Anda memiliki persyaratan Layer (i) (Layer (0) adalah untuk set aplikasi yang Anda harapkan untuk mendukung sekarang atau di masa depan, layer aplikasi) dan antarmuka perusahaan Antarmuka (i, i + 1) dan Antarmuka (i + 1 , i) (dari Layer i ke i + 1 pra-berasumsi tidak ada cross-layering di sini, mudah diubah dan menjadikannya persyaratan) dan fungsi Function (i, j) (Layer i, Function index j, menganggap data bagian dari fungsi untuk membuatnya lebih sederhana)

Input: Persyaratan lapisan (0) (seperti yang kami katakan ini perlu diformalkan)

Output: segalanya

Output END-TO-END adalah Output sehingga: Untuk setiap L, Layer (L) memenuhi persyaratannya hanya oleh fungsi Function (L, j) (yaitu fungsi di dalam layer) dan Interface (L, L + 1), Interface (L +1, L)

Untuk setiap Layer L dan Function function (L, F) tidak ada himpunan Function S dalam output sehingga Function (L, F) = S (= berarti output yang setara dan efek samping)

Jadi, sampai pada kekurangan kedua yang mungkin untuk penerapan prinsip e2e spesifik (dan jika saya membaca dengan benar apa yang sedang dicoba), seseorang dapat mengklaim bahwa itu sama sekali tidak mengikuti prinsip e2e, malah sebaliknya. Keripik Anda menyediakan "penghindaran kebuntuan" dan Anda memiliki Antarmuka yang tidak biasa dan spesifik untuk memicu (menyela) lebih banyak bantuan dari lapisan atas. Ini bisa dibilang pendekatan cross-layer bukan pendekatan end-to-end. Dengan kata lain Anda memiliki Fungsi (1, x) tidak menyelesaikan tugasnya dengan benar dan benar dengan set Antarmuka - jika Anda ingin menggunakan rancangan formalisasi yang disediakan di atas (yang tentu saja hanya awal yang berguna untuk perpanjangan untuk sepenuhnya menjawab pertanyaan Anda tetapi kemungkinan tidak penuh dengan sendirinya).

pengguna3134164
sumber