Đồng nghiệp của tôi đang sử dụng một ứng dụng tiêu tốn nhiều bộ nhớ khiến hệ thống quá chậm. Có thể chia sẻ bộ nhớ với các PC khác qua Internet không?
Hệ thống có 8 GB RAM và ứng dụng tiêu thụ hơn 6 GB.
Đồng nghiệp của tôi đang sử dụng một ứng dụng tiêu tốn nhiều bộ nhớ khiến hệ thống quá chậm. Có thể chia sẻ bộ nhớ với các PC khác qua Internet không?
Hệ thống có 8 GB RAM và ứng dụng tiêu thụ hơn 6 GB.
Câu trả lời:
Tôi chỉ xem xét một ứng dụng độc lập chạy trên máy "tiêu chuẩn" mà không có khả năng cài đặt đơn giản ở nơi khác hoặc sử dụng phần cứng hoặc phần mềm chuyên dụng. Các câu trả lời khác (chính xác) giải quyết di chuyển phần mềm hoặc phần cứng chuyên dụng cho tác vụ.
Mọi cách để "chia sẻ RAM" qua mạng sẽ phải chịu những hạn chế của phương tiện mạng đó. Vì ngay cả gigabit Ethernet cũng bị giới hạn ở mức xấp xỉ 100MB / s (megabyte), điều này có nghĩa là tốc độ "RAM" của bạn cũng sẽ bị giới hạn.
100MB / s là một phần rất nhỏ của tốc độ RAM thực sự có trong hệ thống của bạn. Chương trình của bạn sẽ rất chậm và có cảm giác như nó đang chạy trên máy tính từ đầu những năm 90
Ổ đĩa cứng hiện đại, để đọc và ghi tuần tự, nhanh hơn một chút so với điều này. SSD nhanh hơn nhiều lần.
Điều này là bỏ qua các vấn đề về độ trễ sẽ làm cho chương trình của bạn trở nên chậm hơn một lần nữa.
Do sự chậm chạp và các vấn đề kỹ thuật khác liên quan, đây không phải là vấn đề mà bất kỳ ai cũng có thể coi là đáng để cố gắng giải quyết cho các hệ thống "nhà" hoặc "văn phòng". Nó rẻ hơn và hiệu quả hơn để mua thêm RAM nếu cần thiết.
Chỉ cần mua thêm RAM, hoặc thậm chí là SSD cho một tệp trang. Không có cách nào khác để làm điều này mà không đòi hỏi một lượng công việc hoặc phần cứng điên rồ vì lợi ích ít ỏi.
Chỉ để hoàn thiện: InfiniBand cho phép truy cập trực tiếp vào bộ nhớ của các máy khác.
Tuy nhiên, nó đòi hỏi:
Nó KHÔNG hoạt động trên một mạng hiện có, nó đòi hỏi một cơ sở hạ tầng hoàn toàn độc lập cho tất cả các nút được kết nối. Nó cũng KHÔNG hoạt động qua Internet
Is there any alternative solution?
Điều này phụ thuộc nhiều vào bản chất của dữ liệu.
Bạn có thể chạy 2 máy chủ mysql khác nhau trên 2 máy khác nhau.
Sau đó chia dữ liệu thành 1/2 và viết chương trình để tự động biết máy chủ nào sẽ đến.
Tất nhiên điều này có thể được thu nhỏ cho bất kỳ số lượng máy chủ nào nếu bạn có sẵn chúng.
Có, rất dễ thực hiện (và tôi đã làm điều này, đối với các hệ thống không cần đĩa cần trao đổi), sử dụng giao thức Network Block Device.
Cài đặt nbd-server
trên máy chủ và định cấu hình để tự động tạo các tệp trên mỗi máy chủ.
Đảm bảo các máy khách của bạn có NBD được biên dịch vào các hạt nhân của chúng, sau đó định cấu hình chúng để trao đổi với một thiết bị được gắn NBD. Các nbd-client
gói có thể giúp đỡ.
Xin lỗi nếu những điều trên hơi mơ hồ - Các máy tôi đã thực hiện việc này không thể truy cập được từ đây; Tôi có thể điền vào các chi tiết khi tôi có quyền truy cập vào chúng.
Có một triển khai máy chủ NBD thay thế được gọi là nbdkit
; Tôi không biết gì về nó.
Với các chi tiết nhỏ, không quan trọng "Windows 10, máy trạm có RAM 8G B" , thực sự chỉ có một câu trả lời chắc chắn: Mua thêm RAM và chạy ít rác hơn.
Mua một ổ SSD và đặt tệp trang ở đó sẽ là lựa chọn tốt nhất tiếp theo, nhưng thực sự ... mua thêm RAM.
Việc phục vụ tệp trang ("chia sẻ bộ nhớ") qua mạng là điều tất nhiên có thể, nhưng đó là một ý tưởng rất tồi. Mặc dù đúng là có các trường hợp đường biên tồn tại trong đó thời gian truy cập qua mạng sẽ tốt hơn truy cập vào ổ đĩa cục bộ, điều đó không liên quan đến trường hợp sử dụng của bạn, bởi vì bạn cần thời gian truy cập thấp và băng thông cao nhất quán cùng một lúc. Hãy nhớ rằng, bạn không lường trước được một hoặc hai lỗi trang, bạn liên tục tráo đổi. Trừ khi bạn sẵn sàng trả một vài ngàn, không có cách nào bạn có thể đến gần với việc mua RAM hoặc SSD.
8 GB gần như không đủ để chạy Windows 10 và một ứng dụng ngốn bộ nhớ cùng một lúc. Nó chỉ đủ để chạy Word, Excel và Outlook cùng một lúc. Đó chính xác là "thiết lập công ty nhảm nhí" hoàn toàn không thể sử dụng điển hình mà hàng triệu người phải sống hàng ngày trên máy tính xách tay làm việc của họ. Đầu tư 100-200 tiền vào một mô-đun bộ nhớ khác và nó sẽ khấu hao chi phí trong vòng một tuần (những thứ chỉ mất vài phút và thời gian là tiền - thật không may, điều này thường rất khó để vào đầu quầy đậu địa phương của bạn).
Ngoài ra, nếu bạn sở hữu máy, bạn có thể sử dụng NTLite để cắt giảm crap Windows 10, giảm dung lượng bộ nhớ của nó. Hoặc, bạn có thể tắt 80% các dịch vụ không cần thiết. Có vẻ khó tin, nhưng có thể chạy phiên bản Windows gần đây với RAM dưới 2 GB được sử dụng.
Nhưng thực sự, chỉ cần mua RAM ... nó nhanh hơn và dễ dàng hơn nhiều so với việc dành hàng giờ thời gian quý báu của bạn để cắt giảm crap Windows.
Một cách khác đơn giản là chạy ứng dụng trên PC từ xa , có thể dưới tài khoản người dùng chuyên dụng và chỉ cần điều khiển nó thông qua RDP, VNC hoặc bất cứ điều gì thuận tiện.
Một tùy chọn khác là tạm thời triển khai ứng dụng trong môi trường mà ram có thể được tăng hoặc giảm dễ dàng.
Tôi sẽ xem xét một ví dụ Amazon AWS, có thể thay đổi kích thước với một lần khởi động lại.
IE một ví dụ nhỏ như C5.large có 4GB ram và 2 lõi và có giá 2,04 USD một ngày cho linux, hoặc 4,26 USD mỗi ngày cho cài đặt windows. Dung lượng đĩa EBS là một chi phí phụ và quy mô tuyến tính với GB được phân bổ.
Bạn có thể thiết lập hệ thống của mình ở kích thước nhỏ hơn này và sau đó khi bạn muốn phát ra tiếng ồn đầy đủ, hãy dừng hệ thống, thay đổi kích thước cá thể và chạy phần mềm.
Hoặc lớn nhất ...
https://www.ec2instances.info/ sẽ giúp bạn chọn một kích thước phù hợp. Lưu ý một số địa điểm có giá cao hơn những nơi khác. Singapore và Bắc California đắt đỏ. Tuy nhiên, VM của bạn không mất gì khi nó không chạy, trừ chi phí lưu trữ đĩa.
Nhược điểm là nếu bạn cần bộ nhớ này trong một thời gian dài, mua thời gian VM là một cách tốn kém để làm điều đó. Tuy nhiên, kế toán dường như đôi khi thích chi phí hoạt động như cho thuê, hơn chi phí vốn như nâng cấp.
Như những người khác đã nói về mặt kỹ thuật là có thể nhưng không đáng.
Tuy nhiên, nếu bạn muốn tăng tốc độ sử dụng máy tính của mình, có thể bên ngoài một số ứng dụng của bạn đến một máy chủ từ xa.
Điều này chủ yếu sẽ phụ thuộc vào những gì bạn đang làm việc và ứng dụng bạn sử dụng. Nếu bạn đang chạy các chương trình đòi hỏi nhiều thời gian xử lý cho một đầu ra dữ liệu nhỏ, bạn có thể làm cho chúng chạy trên một máy chủ khác với máy tính của bạn để tiết kiệm thời gian và nguồn tài nguyên trong khi bạn làm việc trên một thứ khác.
Ví dụ tôi có trong đầu là một máy chủ kiểm tra mã của tôi mỗi khi tôi sửa đổi. Ý tưởng với giải pháp như vậy là nó được giới hạn trong các trường hợp sử dụng cụ thể.
Yêu cầu IT mua thêm RAM cho PC của bạn và thể hiện nhu cầu sử dụng ảnh chụp màn hình sử dụng ứng dụng trong Trình quản lý tác vụ.
Có một giải pháp thương mại cho việc này, thông qua một công ty tên là Kove ( http://kove.net/). Nó đòi hỏi cơ sở hạ tầng Infiniband để hoạt động trên "bảng nối đa năng" (ethernet hoạt động bình thường), mặc dù các tùy chọn khác như RoCE đôi khi có thể được cung cấp, tùy thuộc vào chi tiết cụ thể. Chúng cung cấp một số giao diện trong suốt để cho phép tích hợp thay đổi mã bằng 0 và API cho bỏ qua kernel với quyền truy cập CPU trực tiếp hơn (nghĩa là tránh chi phí nhân). Về hiệu suất, nó phụ thuộc vào ứng dụng của bạn. Nếu bạn bị ràng buộc CPU, thì tác động có thể là tối thiểu (có thể gây ngạc nhiên). Nếu bạn là băng thông bộ nhớ bị ràng buộc trên máy chủ cục bộ, chúng sẽ cung cấp cho bạn bộ nhớ lớn hơn, nhưng bạn sẽ bị tắc nghẽn bởi nút cổ chai đã tồn tại. Trong trường hợp này, có lợi cho khối lượng công việc để có bộ nhớ lớn hơn có thể được đặt trong một hộp không, và không hết RAM? Chúng tôi đã thấy (rất) kết quả tốt với các thư viện học máy ảo hóa và python. Các ứng dụng HPC cao cấp có xu hướng tệ hơn, nhưng chúng tôi đã sử dụng API C và quản lý để giữ hiệu suất đạt mức chấp nhận được trong khi giảm số lượng nút (các nút ở đó cho RAM, không phải chu kỳ CPU), đây là điểm cộng so với MPI . Cho dù đây là một giải pháp tốt cho đồng nghiệp của bạn rất khó để nói, nhưng nó là một lựa chọn bạn có thể xem xét. Mong rằng sẽ giúp. Để rõ ràng, tôi không làm việc cho Kove và không có động lực tài chính, nhưng tôi đã cộng tác với họ trong một số năm và nghĩ rằng công nghệ này có khả năng tác động đáng kể đến cách thức thực hiện điện toán nhất định. nhưng chúng tôi đã sử dụng API C và quản lý để giữ hiệu suất đạt mức chấp nhận được trong khi giảm số lượng nút (các nút ở đó cho RAM, không phải chu kỳ CPU), đây là điểm cộng so với MPI. Cho dù đây là một giải pháp tốt cho đồng nghiệp của bạn rất khó để nói, nhưng nó là một lựa chọn bạn có thể xem xét. Mong rằng sẽ giúp. Để rõ ràng, tôi không làm việc cho Kove và không có động lực tài chính, nhưng tôi đã cộng tác với họ trong một số năm và nghĩ rằng công nghệ này có khả năng tác động đáng kể đến cách thức thực hiện điện toán nhất định. nhưng chúng tôi đã sử dụng API C và quản lý để giữ hiệu suất đạt mức chấp nhận được trong khi giảm số lượng nút (các nút ở đó cho RAM, không phải chu kỳ CPU), đây là điểm cộng so với MPI. Cho dù đây là một giải pháp tốt cho đồng nghiệp của bạn rất khó để nói, nhưng nó là một lựa chọn bạn có thể xem xét. Mong rằng sẽ giúp. Để rõ ràng, tôi không làm việc cho Kove và không có động lực tài chính, nhưng tôi đã cộng tác với họ trong một số năm và nghĩ rằng công nghệ này có khả năng tác động đáng kể đến cách thức thực hiện điện toán nhất định.
Một quan điểm khác - có thể vấn đề không phải là giới hạn đối với tài nguyên hệ thống, nhưng ứng dụng lãng phí mà bạn của bạn đang viết. 6 GB RAM là rất nhiều bộ nhớ.
Chỉ vì rất nhiều các ứng dụng khác đang quá cồng kềnh , không nhất thiết có nghĩa là ứng dụng bạn của bạn cần phải được một trong số họ. Sử dụng các phương pháp lập trình khác nhau có thể làm giảm yêu cầu bộ nhớ trong khi cải thiện tốc độ. Ví dụ: nếu ứng dụng tải toàn bộ dữ liệu vào bộ nhớ và sau đó hoạt động trên đó sẽ lãng phí hơn nhiều so với việc lưu trữ dữ liệu trong cơ sở dữ liệu SQL (cục bộ hoặc từ xa) với một vài chỉ mục được chọn và truy cập vào đó. Làm cho nó xử lý từng khối dữ liệu nếu có thể, thay vì tải tất cả dữ liệu cùng một lúc. Cấu trúc trong bộ nhớ cũng có thể lãng phí. Bộ nhớ trống khi bạn hoàn thành nó. Không tải vào RAM những gì bạn có thể lập bản đồ bộ nhớ thay thế. Và hàng trăm lời khuyên khác ...
Tuy nhiên, nếu ứng dụng thực sự cần nhiều bộ nhớ hơn cần được lưu trữ trên các máy tính khác, nó có thể được sửa đổi để sử dụng memcached và muốn lưu trữ nó ở đó. Điểm thưởng vì nó sẽ mở rộng quy mô tốt hơn trong tương lai.
Vì vậy, người dùng đã yêu cầu CÁCH chia sẻ bộ nhớ qua mạng. Không nếu đó là một ý tưởng tốt. Vì vậy, đây thực sự là cách bạn có thể làm điều đó.
Tôi không nói rằng đây là một ý tưởng tốt, hoặc sẽ được thực hiện, nhưng nó sẽ hoạt động.
Tôi cho rằng đây không phải là Windows Server nơi bạn có thể tạo điểm gắn kết iSCSI.
Máy tính 1 bước:
Máy tính 2 bước:
Làm xong!
Hãy cẩn thận - bạn có thể bỏ qua những điều vô nghĩa VHD nếu Windows cho phép bạn di chuyển tệp trang sang chia sẻ mạng. Không có nhiều ví dụ về điều này trực tuyến (vì lý do rõ ràng).
Sự mất ổn định hệ thống hoàn toàn có thể xảy ra, hoặc một cái gì đó khác hoàn toàn. Không ai thực sự biết điều gì sẽ xảy ra.
Như bạn đề cập đến "RAM" để chia sẻ qua mạng không chỉ là "bộ nhớ" dưới bất kỳ hình thức nào, câu trả lời cuối cùng sẽ là về mặt lý thuyết là có, thực tế là không.
Trong khi các loại bộ nhớ khác như lưu trữ và dữ liệu tạm thời khác thường xuyên được chia sẻ qua mạng vì nhiều mục đích và lý do khác nhau. Theo cách tương tự, RAM về mặt kỹ thuật có thể được chia sẻ qua mạng nếu cần. Nhưng hiệu suất và chi phí sẽ quá cao để có thể khả thi trong thế giới thực.
RAM hoặc bộ nhớ truy cập ngẫu nhiên được sử dụng bởi một hệ điều hành làm không gian làm việc nên rất nhiều thao tác đọc / ghi được thực hiện trên nó. Trên hệ thống trung bình, dung lượng tốc độ dữ liệu với RAM là cao nhất so với các phần khác. Nếu bạn đặt RAM trên mạng, bạn cần có khả năng truyền dữ liệu tốc độ rất cao và chi phí sẽ rất cao ngay cả khi có thể để đạt được về mặt kỹ thuật. Với một phần chi phí nhỏ để nâng cấp tốc độ mạng, bạn sẽ có RAM cho máy của mình cục bộ.
Các ứng dụng thường chạy trong bộ nhớ ảo, do đó, yêu cầu bộ nhớ ảo của chúng có thể vượt quá bộ nhớ vật lý có sẵn của hệ thống mà không có hậu quả nào khác ngoài hiệu năng. Hệ điều hành sẽ chỉ đơn giản là trang bộ nhớ ảo ra đĩa để giải phóng bộ nhớ vật lý khi cần thiết trong bất kỳ thời điểm nào để sử dụng hoạt động. Điều này thường chỉ hoạt động tốt đối với các ứng dụng có địa phương hợp lý (hoạt động tại bất kỳ thời điểm nào được tập trung phần nào vào các khu vực hạn chế trong không gian bộ nhớ ảo của ứng dụng). Nếu một ứng dụng có địa phương kém (liên tục tham chiếu bộ nhớ trên toàn bộ không gian ảo của nó), ứng dụng sẽ hoạt động kém trừ khi tất cả bộ nhớ ảo của nó có thể được cung cấp trong bộ nhớ vật lý (tất cả bộ nhớ ảo đều nằm trong bộ nhớ).
Vì vậy, có một vài khả năng ở đây:
Ý tưởng sử dụng bộ nhớ trên một máy tính từ xa về cơ bản là tạo ra một tệp hoán trang được nối mạng . Về lý thuyết, nó có thể hoạt động, nhưng trên thực tế, hiệu năng sẽ tốt hơn nhiều nếu tệp hoán trang là cục bộ trên máy tính (ổ cứng của chính nó) vì băng thông mạng và độ trễ. Sẽ không có vấn đề gì nếu hệ thống từ xa đang lưu trữ tệp hoán trang trong bộ nhớ hoặc trên đĩa của nó, nút cổ chai (giới hạn đáng kể nhất về hiệu suất) sẽ là mạng. Điều này sẽ đặc biệt đúng qua internet, nhưng cũng sẽ đúng ngay cả khi máy tính từ xa nằm trên cùng một mạng LAN.
Điều này thực sự phụ thuộc vào loại ứng dụng và ram được sử dụng.
Ví dụ, nhiều ứng dụng web có thể sử dụng RAM qua mạng bằng cách kết nối với memcached
máy chủ. Điều này sẽ cho phép lưu trữ dữ liệu bộ nhớ cache (và các dữ liệu khác cần truy cập nhanh) trên một máy tính khác có nhiều RAM.
Tất nhiên đây là ứng dụng cụ thể và cần một ứng dụng có thể sử dụng memcached. Điều này sẽ không giúp bạn mở phiên bản thứ hai của chùng vì trình duyệt không hỗ trợ sử dụng phụ trợ bộ đệm như vậy.